我正在尝试远程控制应用程序。 特别是我尝试将功能键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只是一个更复杂的远程控制任务的示例。
答案 0 :(得分:0)
根据我的经验,应用可以选择仅在某些键上回复WM_KEYUP
(WM_KEYDOWN
可能为时过早),因此您应该在SendMessage(w, WM_KEYUP...)
之后尝试WM_KEYDOWN