我想向外部应用程序发送一些按键,并且它工作正常,但是当我尝试将按键发送到同一个外部应用程序的子窗口时,由于某些原因不起作用,所以我需要帮助。假设我们想要从记事本中打印剪贴板文本,并希望一步完成。在代码看起来像这样。
#include <windows.h>
#include <stdio.h>
#include <iostream.h>
using namespace std;
int main(int argc, char* argv[]){
WinExec("notepad", 1);
Sleep(1000);
HWND handle = FindWindow("notepad",0); // it's handling as well
SetForegroundWindow(handle);
keybd_event(VK_CONTROL, 0, 0, 0); // simulate CTRL down
keybd_event(VkKeyScan('V'), 0, 0, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
Sleep(500);
keybd_event(VK_CONTROL, 0, 0, 0); // simulate CTRL down
keybd_event(VkKeyScan('P'), 0, 0, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); // simulate CTRL up
Sleep(1000);
HWND handle1 = FindWindow(0, "Print"); // it wann't find "Print" window
SetForegroundWindow(handle1);
keybd_event(VK_MENU, 0, 0, 0); // simulate ALT down
keybd_event(VkKeyScan('P'), 0, 0, 0);
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
return 0;
}
但它想将ALT + P发送到“打印”窗口,为什么? 最终目标是制作发送到应用程序keystorkes的小宏(在任何Windows子节点或父节点上) 操作系统:WIN 7 64位
答案 0 :(得分:0)
您可以通过简单地删除这些行来使现有代码(类型)工作:
HWND handle1 = FindWindow(0, "Print"); // it wann't find "Print" window
SetForegroundWindow(handle1);
请记住,伪造的输入会转到具有输入焦点的线程,当您在记事本中显示打印对话框时,该对话框将获得输入焦点。您根本不需要设置焦点,系统会为您完成。
然而,你采取的方法非常脆弱。我怀疑使用像UI Automation这样的东西会更好。