【问题标题】:Copy and paste Delphi for Android复制粘贴 Delphi for Android
【发布时间】:2016-04-18 13:51:31
【问题描述】:

我有以下场景: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 环境),单击它可以粘贴,但我需要它是自动的。有什么建议吗?

【问题讨论】:

  • 按住鼠标右键2秒,点击粘贴按钮。如果你打算通过输入伪造来做到这一点,那就是你必须做的。

标签: android delphi delphi-xe7


【解决方案1】:

键盘输入由前台窗口处理。您将击键注入到键盘本身将用户输入发布到的同一低级输入队列中(顺便说一句,您应该使用SendInput() 而不是keybd_event())。您的模拟击键经历了与用户输入的击键相同的处理和路由。 Raymond Chen 在他的网站上有一个很好的描述:

When something gets added to a queue, it takes time for it to come out the front of the queue

当您单击按钮时,您的应用窗口位于前台。因此,您的 Ctrl-V 序列会被您的应用程序接收,而不是被 Andy 模拟器接收。如果您使用TWinControl-派生按钮,如TButton,则单击时会获得输入焦点(为避免这种情况,请改用TGraphicControl-派生按钮,如TSpeedButton)。由于编辑控件没有获得焦点,因此 Ctrl-V 似乎什么都不做,因为在处理按键时没有可粘贴的内容。

您需要使用SetForegroundWindow()(也可能还有SetFocus())将Andy 的窗口带回前台并在之前给它输入焦点,然后发送您的击键。

即便如此,也不能 100% 保证其他一些应用不会在您发出击键和它们从输入队列中出来之间窃取焦点。

【讨论】:

  • Ctrl+V 在 Android 中没有意义。提问者希望在 Android 应用中进行粘贴。
  • @DavidHeffernan:当然,Android 本身不识别 Ctrl-V,但问题是关于在 Windows 上运行的 Android 模拟器,所以谁说模拟器本身不处理 Ctrl-V 和复制将 Windows 剪贴板中的文本复制到 Android 的剪贴板并将其粘贴到当前的 Android UI 控件中?我之前尝试过使用 Andy 一次,但遇到了问题(它永远不会正确启动),所以我不知道在平台边界的模拟器级别中实际使用了哪种交叉交互功能。
  • 我无法将 Windows 剪贴板的内容复制到 Android 环境。我进入了 GooglePlay,下载了一个应用程序,并想通过 Delphi 在这个应用程序中填写字段。我尝试复制粘贴,然后模拟每个键的握持(keybd_event (65,0,0,0);)但不起作用。
  • @Luana:如果您无法使用真实键盘进行复制/粘贴,您将无法使用模拟按键进行复制/粘贴。如果 Andy 支持 Ctrl-V 那么你没有正确模拟它(因此我在上面的回答)。如果 Andy 在内部将两个剪贴板链接在一起,您可能必须像 David 建议的那样在 Android 中模拟鼠标长按,而不是模拟键盘上的 Ctrl-V。所以首先你需要弄清楚 Andy 如何支持 Windows 和 Android 之间的复制/粘贴,然后你可以弄清楚如何在代码中模拟它。在不涉及代码的情况下,DOES 的工作原理是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多