Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将击键发送到其他进程(例如记事本)?_C++_Windows_Winapi_Sendmessage_Sendkeys - Fatal编程技术网

C++ 如何将击键发送到其他进程(例如记事本)?

C++ 如何将击键发送到其他进程(例如记事本)?,c++,windows,winapi,sendmessage,sendkeys,C++,Windows,Winapi,Sendmessage,Sendkeys,我有一个记事本的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 d

我有一个记事本的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;
}
#包括
#包括
#包括
使用名称空间std;
HWND SendIt(DWORD dwProcessID){
HWND HWND=NULL;
做{
hwnd=FindWindowEx(NULL,hwnd,NULL,NULL);
DWORD dwPID=0;
GetWindowThreadProcessId(hwnd和dwPID);
if(dwPID==dwProcessID){

应该使用PostThreadMessage

hThread = GetWindowThreadProcessId(hwnd,&dwPID);  
if (dwPID == dwProcessID && hThread!= NULL ) {
   PostThreadMessage( hThread, WM_KEYDOWN,'A',1);
}
两个进程必须由同一用户创建。否则,函数将失败并返回错误\u无效\u线程\u ID

如果另一个进程是正在捕获键盘输入的活动窗口,则SendInput或keybd_事件也可用于发送击键事件

我有一个记事本的PID:2860

我忍不住注意到你说的是2860,打的是2680

SendIt(2680);//记事本ID


可能重复,以及无数其他。尝试使用SendInput您正在向记事本窗口发送假输入,而您应该将其发送到其中包含的编辑框。另请参阅