4

Java Robot クラスのフォーカスを、実行中の Java アプリから ms word や firefox などの特定のプロセスに変更するかどうか、またはその方法を理解しようとしています。

ありがとう!

4

3 に答える 3

7

ロボットはそれを自動的に行うことはできません。上記で提案されているように、alt-tab を使用して別のアプリケーションをアクティブ化できますが、アクティブ化するアプリケーションの z オーダーを知る必要があります。これを本当に最善の方法で行うには、アクティブ化したいトップレベル ウィンドウのウィンドウ ハンドル (hWnd) を取得し (これが Windows アプリの場合)、Windows user32 ライブラリ関数を使用して、必要なウィンドウ。これには、 JNAの使用をお勧めします最も簡単な方法の 1 つとして (JNI と比較した場合)。最初に JNA の jna.jar および platform.jar jar ファイルをダウンロードし、それらをクラスパスに配置する必要があります。その後、ほとんどの OS メソッドを簡単に呼び出すことができます。たとえば、ウィンドウ名 (完全または部分的) に基づいて実行中の最上位 Windows アプリケーションの hWnd を取得できる Windows アプリケーション用にこの種のものを稼働させており、その hWnd を使用して user32 を呼び出します。 setForegroundWindow 関数。Windows アプリケーションをアクティブ化し、これをさらに進めたい場合は、この回答にコメントしてください。このためのコードを表示できます。もしそうなら、あなたがやろうとしていることを正確に詳細に調べたいと思うでしょう.

頑張ってください!

于 2012-06-07T04:06:16.697 に答える
5

私がやったように、Googleでこれに出くわした人のために:

public class activate {

    public interface User32 extends W32APIOptions {

        User32 instance = (User32) Native.loadLibrary("user32", User32.class,
                DEFAULT_OPTIONS);


        boolean ShowWindow(HWND hWnd, int nCmdShow);

        boolean SetForegroundWindow(HWND hWnd);

        HWND FindWindow(String winClass, String title);

        int SW_SHOW = 1;

    }

    public static void main(String[] args) {  
        User32 user32 = User32.instance;  
        HWND hWnd = user32.FindWindow(null, "Downloads"); // Sets focus to my opened 'Downloads' folder
        user32.ShowWindow(hWnd, User32.SW_SHOW);  
        user32.SetForegroundWindow(hWnd);  
    } 
}

クレジット: http://www.coderanch.com/t/562454/java/java/FindWindow-ShowWindow-SetForegroundWindow-effect-win

于 2014-06-03T15:59:39.977 に答える