プログラムを一意に識別できるように、完全なパスとファイル名を返すこのメソッドを作成しました。ただし、C:\Program Files (x86)\Java\jre6\bin\javaw.exe
フォーカスされている特定のプログラムのパスではなく、または空の文字列のみを返します。私が間違っているのは何ですか?
private void getFocusWindow() {
HWND focusedWindow = User32.INSTANCE.GetForegroundWindow();
char[] nameName = new char[512];
User32.INSTANCE.GetWindowModuleFileName(focusedWindow, nameName, 512);
System.out.println(nameName);
}
psapi の使用:
解決:
フル パスとモジュール ファイル名を提供します。唯一の例外は、Eclipse で「�」が出力される場合です。GetModuleFileNameEx メソッドの詳細については、@technomage の回答を参照してください。
private void getFocusWindow() {
PsApi psapi = (PsApi) Native.loadLibrary("psapi", PsApi.class);
HWND focusedWindow = User32.INSTANCE.GetForegroundWindow();
byte[] name = new byte[1024];
IntByReference pid = new IntByReference();
User32.INSTANCE.GetWindowThreadProcessId(focusedWindow, pid);
HANDLE process = Kernel32.INSTANCE.OpenProcess(0x0400 | 0x0010, false, pid.getValue());
psapi.GetModuleFileNameExA(process, null, name, 1024);
String nameString= Native.toString(name);
System.out.println(nameString);
}
psapi クラス:
public interface PsApi extends StdCallLibrary {
int GetModuleFileNameExA(HANDLE process, HANDLE module ,
byte[] name, int i);
}