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