我正在寫一個delphi應用程序(myApp)將鍵盤筆畫輸入到外部應用程序(extApp)。爲什麼PostMessage與外部應用程序的行爲不同於鍵盤
當extApp在Windows 7中啓動時,我按{tab} {tab} {down}我在列表框中選擇了適當的項目。向下箭頭選擇TListBox中的第二項(WinSpy ++告訴我它是一個TListBox)。
爲什麼myApp使用此代碼不具有與鍵盤相同的功能?此代碼將選擇一個TListBox(的{標籤}結果{選項卡},然後不動列表框選擇!
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;
是否有不同的方法,我可以向下箭頭鍵行程發到我的外部應用程序,將?模仿物理鍵盤
您是否嘗試過在sendxxx命令之間添加一些小的延遲? – Graymatter
是的。我在PostMessage之間添加了一個Sleep(500) – Paul
您沒有在消息的lParam參數中設置任何適當的狀態標誌。至少應該設置掃描碼位,以前的鍵狀態和轉換狀態。 –