WIN32 API PostMessage同步

时间:2015-02-02 10:22:48

标签: c++ windows winapi sendmessage

我正在尝试远程控制应用程序。 特别是我尝试将功能键F5发送到notepad.exe。

F5上的

notepad.exe通常会通过粘贴其编辑区域中的实际时间/日期来做出反应。

到目前为止我已弄清楚的代码:

/********************************************************************/

org = GetActiveWindow(); // get current active window

ShowWindow(w, SW_RESTORE); // do the switch to the notepad window

PostMessage(w, WM_KEYDOWN, VK_F5, 0); // send/post F5

Sleep(100); // need this to wait for the notepad action to complete

ShowWindow(org, SW_SHOW); // restore org window

/********************************************************************/

到目前为止,代码或多或少都有效。

剩下的问题是我等待使用Sleep()需要多长时间,多少毫秒才足够? 等待短路将在notepad.exe完成F5任务之前切换回原始窗口。

notepad.exe将失去焦点,F5命令将丢失,因为只有一个专注的记事本才能处理它。

使用SendMessage()因为等待完成会更好

/********************************************************************/

SendMessage(w, WM_KEYDOWN, VK_F5, 0); // should sync on the completion of F5

/********************************************************************/

不幸的是,当使用SendMessage而不是PostMessage时,notepad.exe在F5上没有反应。

是否有一种干净的方式来同步所需的任务?

注意实际上notepad.exe只是一个更复杂的远程控制任务的示例。

1 个答案:

答案 0 :(得分:0)

根据我的经验,应用可以选择仅在某些键上回复WM_KEYUPWM_KEYDOWN可能为时过早),因此您应该在SendMessage(w, WM_KEYUP...)之后尝试WM_KEYDOWN