我创建了这个方法,它应该返回完整的路径和文件名,以便我可以唯一地标识一个程序。但是,它只返回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);
}