微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在JNA中使用GetWindowModuleFileName

有我的进程列表:

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); } } }

我试图设置一个variablespath文件的完整path。 我得到了一个错误@Type不匹配:不能转换从INT到WinDef.HWND @ HWND hWnd = User32.INSTANCE.GetwindowmodulefileName(hWnd,512); 我哪里做错了? 如何做到这一点? 谢谢。

设置在linux上运行的Java程序的好价值

Java似乎正在发送回车到一个subprocess?

如何在Windows中使用Java获取文件名?

JNA Windows服务启动types

处理video库不适用于Linux(Ubuntu 13.04)

你使用的功能错误的。

您在声明它的同一行上使用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.GetwindowmoduleeFileName(hWnd,512); System.out.println("Foreground Window modulee FileName: " + Native.toString(path)); user32.GetwindowText(hWnd,512); System.out.println("Window text is: " + Native.toString(path));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐