我希望我的应用程序最小化,以便在按下热键时捕获在另一个应用程序窗口中选择的数据。我的应用程序肯定没有焦点。此外,当按下热键时,我想呈现一个淡入淡出的弹出窗口(Outlook样式),这样我的应用程序永远不会得到焦点。
我想要捕获窗口名称,进程ID和选定的数据。有焦点的应用程序不是我的应用程序?
我知道一个选项是嗅探剪贴板,但还有其他任何解决方案。
这是为了审核我无法控制的另一个系统的数据输入速度。它是一个大型机仿真客户端程序(attachmate又名java托管的telnet,支持3250)。
计划是
任何想法。
答案 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>