5

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

これが機能しないのはなぜですか?修正することは可能ですか?

4

2 に答える 2

3

PID: 2860 のメモ帳を入手しました

2860 と言って 2680 に電話していることに気付かずにはいられませんでした

SendIt(2680); //メモ帳ID

于 2014-09-08T11:57:02.863 に答える
3

PostThreadMessage を使用する必要があります。

hThread = GetWindowThreadProcessId(hwnd,&dwPID);  
if (dwPID == dwProcessID && hThread!= NULL ) {
   PostThreadMessage( hThread, WM_KEYDOWN,'A',1);
}

同じユーザーが 2 つのプロセスを作成する必要があります。それ以外の場合、関数は失敗し、ERROR_INVALID_THREAD_ID を返します。

他のプロセスがキーボード入力をキャプチャしているアクティブなウィンドウである場合、SendInput または keybd_event を使用してキーストローク イベントを送信することもできます。

于 2012-08-23T21:44:17.430 に答える