![](/img/trans.png)
[英]How would I be able to access (click buttons, type text) to Java AWT / Swing Frames from another application?
[英]Retrieving Java Swing Click events from another application
Java是否能够从Windows 10上运行的外部Java应用程序获取点击事件? 我有一个使用Swing构建的服务器上运行的外部应用程序。 不幸的是,我无权访问其源代码。 我想知道当用户单击该外部应用程序中的文本框时是否有任何方式可以得到通知。
Java Access Bridge之类的工具有可能吗?
您可以拦截您选择的事件,然后将数据发布到服务器(或处理消息,或记录到文件...您的呼叫)。
要拦截事件,我看到了两个方向:
1)您可以将可执行jar指向您自己的主类,这将安装自定义AWT事件队列( 此处将在此处进行说明 ),然后运行实际的主类,并传递未修改的参数。 (我们几年前已经在工作中实现了某种屏幕抓取工具)
1b)比自定义AWT事件队列更容易,如果您只想记录事件,则AWT为您提供Toolkit.addAWTEventListener
:
Toolkit.getDefaultToolkit().addAWTEventListener(
this::handleEvent,
AWTEvent.KEY_EVENT_MASK | AWTEvent.ACTION_EVENT_MASK // The kind of events you want
);
/*...*/
private void handleEvent(AWTEvent awtEvent) {
if (eventIsInteresting(awtEvent)) { // Do your own filtering
logEvent(awtEvent); // Collect, send message, whatever
}
}
(例如,它在GUI测试工具中用于记录测试方案)
2)另外,你可以修改选择JRE类的来源(例如ActionEvent.java
),插入您的关键点处的代码,编译,组装这些类的JAR文件,并预先准备 ,要使用bootclasspath -Xbootclasspath/p:./hack.jar
。 (几年前,我们已经完成了将错误修正从Java 8“移植”到Java 7的工作)
实施细节留给读者练习。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.