[英]Copy and paste Delphi for Android
我有以下情形:Delphi XE7和一個Android模擬器環境(Andy)。 我使用以下命令在Windows環境中粘貼文本以使其正常運行:
procedure TForm1.Button1Click(Sender: TObject);
begin
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0);
keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0)
end;
formstyle選項表單設置為fsStayOnTop。
現在,在運行Android模擬器的情況下,我需要將文本粘貼到例如模擬器的Google搜索欄中,並且粘貼命令不起作用。
我注意到,如果按住鼠標右鍵2秒鍾,則會出現粘貼選項(在Android環境中),單擊它可以粘貼,但是我需要將其設為自動。 有什么建議嗎?
鍵盤輸入由前台窗口處理。 您要將擊鍵注入到鍵盤本身將用戶輸入發布到的同一低級輸入隊列中(順便說一句,您應該使用SendInput()
而不是keybd_event()
)。 模擬的擊鍵經歷與用戶輸入的擊鍵相同的處理和路由。 Raymond Chen在他的網站上對此有很好的描述:
當您單擊按鈕時,您的應用程序窗口位於前台。 因此,您的應用程序會收到Ctrl-V序列,而不是Andy模擬器會收到。 而且,如果您使用TWinControl
派生的按鈕(如TButton
,則在單擊時它將獲得輸入焦點(為避免這種情況,請改用TGraphicControl
派生的按鈕,例如TSpeedButton
)。 由於未集中編輯控件,因此Ctrl-V似乎無濟於事,因為在處理按鍵時沒有任何內容可粘貼。
您需要使用SetForegroundWindow()
(可能還有SetFocus()
)將Andy的窗口帶回到前台,並在輸入您的擊鍵之前發送輸入焦點。
即使這樣,也不能100%保證在您發出擊鍵的時間和它們從輸入隊列中出來的時間之間, 其他某些應用程序也不會竊取焦點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.