繁体   English   中英

复制并粘贴Android版Delphi

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM