gpt4 book ai didi

delphi - 为什么到外部应用程序的 PostMessage 的行为与键盘不同

转载 作者:行者123 更新时间:2023-12-02 22:37:09 25 4
gpt4 key购买 nike

我正在编写一个delphi应用程序(myApp)来将键盘敲击输入到外部应用程序(extApp)。

当 extApp 在 Windows 7 中启动并按 {tab}{tab}{down} 时,我在列表框中选择了相应的项目。向下箭头选择 TListBox 中的第二项(WinSpy++ 告诉我它是 TListBox)。

为什么使用此代码的 myApp 不具有与键盘相同的功能?此代码将选择 TListBox({tab}{tab} 的结果,然后不移动 ListBox 选择!

    procedure TfrmMain.run;
begin
setForegroundWindow(extApp);
sendTab(extApp);
sendTab(extApp);
sendDown(extApp);
end

procedure TfrmMain.sendTab(h: HWND);
begin
PostMessage(h, WM_KEYDOWN, VK_TAB, 0);
PostMessage(h, WM_KEYUP, VK_TAB, 0);
end;
procedure TfrmMain.sendDown(h:HWND);
begin
PostMessage(h, WM_KEYDOWN, VK_DOWN, 0);
PostMessage(h, WM_KEYUP, VK_DOWN , 0);
end;

是否有其他方法可以将向下箭头击键发送到模仿物理键盘的外部应用程序?

最佳答案

正确的方法是使用 SendInput 。像这样的事情应该可以帮助您开始:

var
Inputs: array of TInput;
ScanCode: Word;
begin
ScanCode := MapVirtualKey(VK_TAB, 0);

SetLength(Inputs, 2);
Inputs[0].iType := INPUT_KEYBOARD;
Inputs[0].ki.wVk := VK_TAB;
Inputs[0].ki.wScan := ScanCode;

Inputs[1].iType := INPUT_KEYBOARD;
Inputs[1].ki.wVk := VK_TAB;
Inputs[1].ki.wScan := ScanCode;
Inputs[i].ki.dwFlags := KEYEVENTF_KEYUP;

SendInput(2, Inputs[0], SizeOf(Inputs[0]));
end;

关于delphi - 为什么到外部应用程序的 PostMessage 的行为与键盘不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24963184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com