2017-03-28 4 views
2

私のタスクバーに最小化されたプロセスがあれば、それを最大化する方法はありますか?タスクバーのjavaからプロセスを最大化する

私はプロセスの名前を知っていますが、それは可能でしょうか?

+0

この*実行中のプログラムは、起動したいのですか、それとも他の任意のプログラムですか? Windowsや他のOSを独占的にターゲットにしていますか? – cubrr

+0

@cubrr私はWindowsをターゲットにしています。私はすでに実行しているプロセスを起動したい。 –

+0

もっと正確に言えば、タスクバーからゲームを開く。 –

答えて

1

おそらくWindows APIを使用している可能性があります。このような作業の前に私はJava Native Accessを使用しました。私はライブラリがとても便利だとわかりました。

JNAでは、共有ライブラリ(DLL)のエクスポートされた関数を使用してインターフェイスを宣言し、プロキシをそのライブラリにロードするライブラリを読み込みます。

私たちは、次のUSER32機能に興味がWinAPIの機能

HWND WINAPI FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName); 

BOOL WINAPI ShowWindow(HWND hWnd, int  nCmdShow); 

当社のプロキシインタフェースは、次のようになります。このインターフェイスは非常に低レベルのアクセスを提供するので、実際には機能をカプセル化したいと思うかもしれません。

import com.sun.jna.win32.StdCallLibrary; 

interface User32 extends StdCallLibrary { 
    // https://msdn.microsoft.com/en-us/library/windows/desktop/ms633499(v=vs.85).aspx 
    int FindWindowA(String className, String windowName); 
    // https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548(v=vs.85).aspx 
    boolean ShowWindow(int window, int command); 
} 

関数名は、API関数の名前正確と一致しなければならないことに注意してください。 Javaスタイルのメソッド名(PascalCaseの代わりにcamelCase)を使用する場合は、変更を行うカスタム関数マッパーが必要です(definition

ウィンドウを検索して表示するには)それが動作しない場合は、WindowsのAPIドキュメントはあなたを助けるでしょう、これをテストした:ウィンドウ名も正確に一致しなければならないということ

import com.sun.jna.Native; 

public class Program { 
    private static final int SW_RESTORE = 9; 

    public static void main(String[] args) { 
     User32 user32 = Native.loadLibrary("User32.dll", User32.class); 
     int window = user32.FindWindowA(null, "Google Chrome"); 
     boolean success = user32.ShowWindow(window, SW_RESTORE); 
     if (success) { 
      System.out.println("Success"); 
     } else { 
      System.out.println("Fail: " + Native.getLastError()); 
     } 
    } 
} 

注意を、それ以外の場合はwindowは0(NULL)になると、次の呼び出しは失敗します。 。 SW_RESTOREが単独で動作するのか、別のフラグが必要なのかもわかりません。

興味のあるものを見つけるためにすべてのプロセスを列挙したい場合は、lacuna projectからいくつかの例を調べることができます。windows/WindowsPidEnumerator.javaとwindows/WindowsNativeProcessCollector.javaファイルは有用かもしれません。しかし、警告の言葉で、これはコースプロジェクトであり、嫌なことに抽象化の層がたくさんあります。

+0

正しいかどうかわかりませんが、私が試したことは次のとおりです。https://pastebin.com/8Gw1qHAp @cubrr –

+0

@EugenValentinインターフェイス内で必要なのはwinapiメソッドだけです。それは期待どおりに機能しましたか?そうでない場合、代わりに何が起こったのですか? – cubrr

+0

は実際には期待どおりに動作していませんでした。エラーが発生しました:@cubrr –

関連する問題