我正在使用PostMessage向应用程序发送windows消息。现在,当发送除箭头键(VK_RIGHT或VK_LEFT)之外的任何键时,此代码都可以正常工作。
procedure SendKey(key: Variant);
var
lParam: integer;
scancode: integer;
begin
if (VarType(key) = varUString) then
begin
scancode := MapVirtualKey(Ord(VarToStr(key)[1]), MAPVK_VK_TO_VSC);
lParam := scancode shl 16;
PostMessage(_hWindow, WM_KEYDOWN, scancode, lParam);
PostMessage(_hWindow, WM_KEYUP, scancode, lParam);
end else
begin
lParam := MapVirtualKey(key, MAPVK_VK_TO_VSC) shl 16;
PostMessage(_hWindow, WM_KEYDOWN, key, lParam);
PostMessage(_hWindow, WM_KEYUP, key, lParam);
end;
end;我安装了一个键盘钩子来监视VK_LEFT/RIGHT的WM_KEYDOWN/UP消息,以查看lParam的外观,我遇到了一些奇怪的值,这是按下向右箭头键(VK_RIGHT)时的DebugView输出。
[2776] wParam: 39, lParam: 21823489
[2776] wParam: 39, lParam: -1051918335如果我尝试发送带有硬编码的值的消息,也没有任何反应,你知道发生了什么吗?谢谢。
发布于 2015-12-02 03:04:30
这取决于应用程序如何处理输入。有时,应用程序直接从消息循环而不是窗口过程来处理此问题。有时,应用程序会使用原始输入。假设您的目标应用程序就是这种性质。
通常,这些问题是由那些试图伪造程序输入的人提出的,这些程序不想接受假输入。你不能在你的程序中伪造输入,这似乎是合理的。或者您也可以使用SendInput。这完全取决于目标应用程序
如果您的目标应用程序已准备好接受自动化,则应使用接受的方法UI Automation。
https://stackoverflow.com/questions/34027970
复制相似问题