使用 SendMessage 自动键盘

Auto keyboard by using SendMessage

int VK_F_DOWN = GetVirtualKey('F', 0);
int VK_F_UP = GetVirtualKey('F', 1);
HWND hWnd = FindWindow(NULL,L"Calculator.exe");

SendMessage(hWnd, WM_KEYDOWN, toascii('F'), VK_F_DOWN);
SendMessage(hWnd, WM_KEYUP, toascii('F'), VK_F_UP);

它在 Calculator.exe 上不起作用,但是当我将 hWnd 更改为 HWND(0xFFFF) 时它可以在我的 visual studio 上起作用。 而且我也已经得到了一个非零 hWnd。我在这里错过了什么?比如权威什么的?

听起来像 User Interface Privilege Isolation。正如维基百科文章所解释的那样,您可以在应用程序清单中请求所需的访问权限。

也就是说,您应该使用 SendInput 而不是 SendMessage。参见 one of Raymond Chen's blog entries on that point