VB.net中的全局热键捕获

时间:2010-06-01 21:01:22

标签: winforms winapi .net-3.5 interop applet

我希望我的应用程序最小化,以便在按下热键时捕获在另一个应用程序窗口中选择的数据。我的应用程序肯定没有焦点。此外,当按下热键时,我想呈现一个淡入淡出的弹出窗口(Outlook样式),这样我的应用程序永远不会得到焦点。

我想要捕获窗口名称,进程ID和选定的数据。有焦点的应用程序不是我的应用程序?

我知道一个选项是嗅探剪贴板,但还有其他任何解决方案。

这是为了审核我无法控制的另一个系统的数据输入速度。它是一个大型机仿真客户端程序(attachmate又名java托管的telnet,支持3250)。

计划是

  1. 在应用程序X中完成数据输入。
  2. 在App X中选择屏幕的某个部分,它是数据输入的证明(事务ID)。
  3. 按Magic Hot键,然后将选择“发送”到我的应用程序。
  4. 从System.environment或system.Threading我可以找到Windows登录。
  5. 同样我也可以捕捉时间。
  6. 所有数据都将记录到SQL。
  7. 一旦完成显示Outlook样式弹出,表示已记录数据条目。
  8. 任何想法。

2 个答案:

答案 0 :(得分:1)

连接键盘/鼠标&屏幕抓取几乎是你可以用applet做的限制。记住Java被编译为字节码并在JVM中运行。由于JVM的性质,可移植性和安全性问题,您实际上无法访问applet内部的任何内容。您可能从.Net看到的是一个没有孩子的“SunAwtFrame”级窗口。

重点是可行的,只需使用SendMessage(& other)API在后台执行您需要的操作,只要您不更改焦点,它就会保持不变(即运行代码不需要焦点)

就数据提取而言,它将归结为您是否可以使用某些(可能是硬核)图像处理从屏幕上提取该信息。小程序是一种无人区域(从.Net至少内部),没有JavaWindow.Textbox.GetAStringForMePlease()。

对于记录,如果您实际控制applet,则会有例外。在这种情况下,您可以创建一种applet shell来挂钩applet的内容。

答案 1 :(得分:0)

听起来你需要设置一个全局键盘钩子来捕获热键,这个代码项目文章展示了如何做到这一点(在C#中,但它并没有太大的不同): http://www.codeproject.com/KB/cs/globalhook.aspx

然后您可以使用FindWindow API查找其他应用程序窗口,然后找到包含“事务ID”的控件,并使用WM_GETTEXT消息从中复制文本。< / p>