gpt4 book ai didi

java - 在 JNA 中使用 GetWindowModuleFileName

转载 作者:太空宇宙 更新时间:2023-11-04 07:20:50 25 4
gpt4 key购买 nike

这是我的进程列表:

public class lab2 {
public static void main(String args[]) {
Kernel32 kernel32 = Kernel32.INSTANCE;
User32 user32 = User32.INSTANCE;
Tlhelp32.PROCESSENTRY32.ByReference processEntry = new Tlhelp32.PROCESSENTRY32.ByReference();
WinNT.HANDLE snapshot = kernel32.CreateToolhelp32Snapshot(
Tlhelp32.TH32CS_SNAPPROCESS, new WinDef.DWORD(0));
char path[] = new char[512];
HWND hWnd = User32.INSTANCE.GetWindowModuleFileName(hWnd, path, 512);

try {
while (kernel32.Process32Next(snapshot, processEntry)) {
System.out.println(Native.toString(processEntry.szExeFile)
+ "\t" + Native.toString(path));
}
} finally {
kernel32.CloseHandle(snapshot);
}
}
}

我尝试将变量path设置为文件的完整路径。我在 HWND hWnd = User32.INSTANCE.GetWindowModuleFileName(hWnd, path, 512); 中收到错误 @Type Mismatch:无法从 int 转换为 WinDef.HWND@ 我哪里出错了?怎样做才正确呢?谢谢。

最佳答案

您使用的函数是错误的。

  • 您在声明 hWnd 变量的同一行中使用它。
  • 并且 hWnd 尚未保存对可行窗口的引用。
  • 我不知道你为什么试图将返回的 int 放入 HWND 变量中。这是没有意义的,也是你错误的根源。
  • 为了使该函数正常工作,您的 HWND 变量 hWnd 需要引用一个可行的窗口句柄。您可能需要调用另一个 JNA 函数来获取此句柄。

例如,

  User32 user32 = User32.INSTANCE;
char path[] = new char[512];

long sleepTime = 2000;
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {}

HWND hWnd = user32.GetForegroundWindow();
user32.GetWindowModuleFileName(hWnd, path, 512);
System.out.println("Foreground Window Module FileName: " +
Native.toString(path));

user32.GetWindowText(hWnd, path, 512);
System.out.println("Window text is: " + Native.toString(path));

关于java - 在 JNA 中使用 GetWindowModuleFileName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19348488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com