我使用的是Windows 7和Microsoft Visual Studio 2010.我使用此代码将数字字符插入到calc.exe的窗口中:
STARTUPINFO si = { 0 };
PROCESS_INFORMATION pi = { 0 };
memset(&si, 0, sizeof(si));
memset(&pi, 0, sizeof(pi));
si.cb = sizeof(si);
BOOL bResult = CreateProcess("c:\\windows\\syswow64\\calc.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
WaitForInputIdle(pi.hProcess, INFINITE);
HWND hWnd = FindWindow("CalcFrame", NULL);
PostMessage(hWnd, WM_CHAR, (WPARAM)'1', 0);
PostMessage(hWnd, WM_CHAR, (WPARAM)'2', 0);
PostMessage(hWnd, WM_CHAR, (WPARAM)'3', 0);
PostMessage(hWnd, WM_CHAR, (WPARAM)'4', 0);
此代码非常完美。当我将"c:\\windows\\syswow64\\calc.exe"
替换为"c:\\windows\\syswow64\\notepad.exe"
而"CalcFrame"
替换为"Notepad"
时,它不会在记事本窗口中插入字符。
答案 0 :(得分:2)
在记事本的主窗口的客户区域内有一个类EDIT
的子窗口。对于您正在做的事情,您需要找到并发送消息到那个窗口而不是记事本的主窗口。
BOOL bResult = CreateProcess("c:\\windows\\syswow64\\notepad.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
WaitForInputIdle(pi.hProcess, INFINITE);
HWND hWnd = FindWindow("Notepad", NULL);
hWnd = FindWindowEx(hWnd, NULL, "EDIT", NULL); // <-- add this
PostMessage(hWnd, WM_CHAR, (WPARAM)'1', 0);
PostMessage(hWnd, WM_CHAR, (WPARAM)'2', 0);
PostMessage(hWnd, WM_CHAR, (WPARAM)'3', 0);
PostMessage(hWnd, WM_CHAR, (WPARAM)'4', 0);
使用Spy ++探索窗口层次结构并找到这些东西。