あなたは、いくつかのネイティブの呼び出しなしでJavaから直接それを行うことはできません。いくつかの図書館はあなたのためにすでにそれをしているかもしれませんが、私は気づいていません。だから、自分で書く必要があります - それは明らかに完全にOSに依存しています。
Windowsの場合、比較的シンプルです(そしてafmaにはwin32 API用のJNIラッパーがありますので、あなたはそれを自分で行う必要はありません)。ここで(簡単にするためにエラーチェックなし)基本的なバージョンがあります:
HWND hForeground = GetForegroundWindow();
DWORD pid;
GetWindowThreadProcessId(hForeground, &pid);
HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, TRUE, pid);
現在のプロセスへのハンドルを持って、あなたがそれでやりたいことができます。あなたは、プロセスのパスをしたい場合は、このような何かを行くだろう:
DWORD size = MAX_PATH;
TCHAR pathName[MAX_PATH];
QueryFullProcessImageName(hProc, /*win32 path format*/ 0, pathName, &size);
トリビアルが本当に(あなたがイベントを受信したい場合は、それはしかし、より複雑な良いビットを取得したときに、フォアグラウンドの変更)、単にエラー処理が吹きますいつものようにコードアップ。
私が言ったように、JavaのいくつかのWin32ラッパーについて読んでいるので、JNI/JNAのものを自分で書く必要はありません。 * nixについてはここでは考えません。
出典
2012-01-15 14:58:06
Voo
ハックとして、AutoIt3のようなものを呼び出すことができます。これにはすでにかなり便利な機能があります(http://www.autoitscript.com/autoit3/docs/functions/WinActive.htm)。 – millimoose
しかし、Javaからどのように呼び出されますか? – Sidar
AutoItでは、スクリプトをラップする.exeファイルを作成できます。[Runtime.exec'](http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime)を使用して実行できます。 html#exec(java.lang.String))。スクリプトファイルを生成して実行することもできます。 (あまりにも漠然として申し訳ありませんが、WindowsのJava開発環境をセットアップして実用的な例を作りません) – millimoose