我有一个 PID 为 2860 的记事本
#include <iostream>
#include <windows.h>
#include <psapi.h>
using namespace std;
HWND SendIt (DWORD dwProcessID){
HWND hwnd = NULL;
do {
hwnd = FindWindowEx(NULL, hwnd, NULL, NULL);
DWORD dwPID = 0;
GetWindowThreadProcessId(hwnd, &dwPID);
if (dwPID == dwProcessID) {
cout<<"yay:"<<hwnd<<":pid:"<<dwPID<<endl;//debug
PostMessage(hwnd,WM_KEYDOWN,'A',1); //send
}
} while (hwnd != 0);
return hwnd; //Ignore that
}
int main()
{
SendIt(2680); //notepad ID
return 0;
}
记事本应该写入 A
但没有任何反应。
我在上面尝试了 WM_DESTROY
消息,它正在工作,但 WM_KEYDOWN
不工作。
我还完成了 GetLastError()
并打印错误 2 ERROR_FILE_NOT_FOUND
。
为什么这不起作用,是否可以修复?
最佳答案
应该使用 PostThreadMessage。
hThread = GetWindowThreadProcessId(hwnd,&dwPID);
if (dwPID == dwProcessID && hThread!= NULL ) {
PostThreadMessage( hThread, WM_KEYDOWN,'A',1);
}
两个进程必须由同一用户创建。否则,函数失败并返回 ERROR_INVALID_THREAD_ID。
如果其他进程是捕获键盘输入的事件窗口,SendInput 或 keybd_event 也可用于发送击键事件。
关于c++ - 如何将击键发送到其他进程(例如记事本)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12099957/