Articles of JNA

在本地库中查找暴露的方法来访问JNA / JNI?

嗨:我想用JNA来访问本地库中的一些函数。 1)我如何反思本机库文件(例如.so文件),看看有什么方法可用? 2)在.so文件中可访问的方法和为编译这些文件而构build的C代码之间是否存在一对一映射? 3)JNA是否可以在所有只有java / native互操作涉及从Java调用本机库的情况下工作(我认为这是JNA的经典用例),还是有时需要JNI?

Windows上的Java:如何删除垃圾文件(使用JNA)

我根本没有使用Windows API的经验,所以请原谅我的无知。 我想删除垃圾文件。 如何使用JNA做到这一点,以及如何检测这是不可能的,例如,因为文件位于networking共享?

用于Windows VHD API的Java库

我需要从Java安装和导航Windows VHD。 任何人都知道包装Windows虚拟硬盘API的Java库,或者有可能使用JNA的源代码,我可以看看。 我的谷歌search没有给我太多。 即使是一些关于如何将OpenVirtualDisk函数转换为JNA结构的示例代码,也足以让我相信其余的部分。

从ShellExecute获取PID

我从ShellExecuteEx启动一个进程,我真的需要得到ProcessID(这是这个类的要求的一部分)。 不知何故,所有重要的SHELLEXECUTEINFO返回null。 所以例如,如果我使用这个代码: exInfo.lpVerb = "open"; exInfo.lpFile = "C:\\Windows\\system32\\cmd.exe"; exInfo.nShow = 5; ShellExecuteExA(exInfo); 它启动了CMD.exe。 但现在我需要得到它的PID。 exInfo.hwnd返回0 , exInfo.hProcess返回null 。 这是正常的行为? 我不想诉诸使用CreateProcess(),因为我的函数也应该能够启动文件,如“C:\ doc1.docx”。 这只是一个方法,我不能预测将要发射什么(所以我不能预先知道窗口标题/类名,从那里得到hWnd,然后得到PID)。 有人能指出我的错误吗? 谢谢。

使用JNA原生等待调用检测线程中断(Windows)

我试图写一些通过JNA执行等待的代码(例如通过调用Kernel32函数WaitForSingleObject),但是如果调用Thread.interrupt(),我还想等待完成。 我假设Java使用类似Event对象来实现中断; 有什么办法从Java获取事件,以便在调用WaitForMultipleObjects时使用它? 或者,如果线程中断,还有什么其他的方式可以安排我等待呢?

确定文件是否是连接(在Windows中)?

我一直在四处搜寻,试图find一种方法来确定一个文件是否是一个交叉点,并没有find任何满意的答案。 我尝试的第一件事是: Files.isSymbolicLink(aPath) 它只检测符号链接,而不是在Windows中被称为连接点的文件。 也尝试了这里提出的解决scheme(使用JNA库): Stackoverflow的问题(3249117) ,但它从来没有返回真正的任何文件,我知道是路口。 我发现确定哪些文件是连接点的唯一方法是在Windows命令提示符下运行以下命令: DIR /S /A:L 在我的计算机上,它返回66个文件夹,而Files.isSymbolicLink(aPath)只返回2.所以我想我可以find一种方法来利用这个,但我不认为这将是非常有效的遍历文件树。 有没有办法做到这一点使用标准的Java库,或者替代JNA?

从Java调用Windows内核函数最简单的方法是什么?

在寻找如何做到这一点的时候,我发现了一些关于不同选项的模糊讨论,比如JNI和JNA,但是没有太多具体的例子。 上下文:如果Java的File.renameTo()不能完成它的工作(无论什么原因; 有点问题 ),我想退回到直接使用这个在kernel32.dll中定义的本地Windows函数( 从此答案 ): BOOL WINAPI MoveFile( __in LPCTSTR lpExistingFileName, __in LPCTSTR lpNewFileName ); 所以,使用任何方法,你将如何从Java代码中调用该函数? 我正在寻找最简单的方法,使用最less量的非Java代码或额外的步骤(例如编译或部署)。

如何使用Java Native Access为Java.exe以外的进程设置进程关联?

虽然手动操作相当容易,但是我试图在Windows 7中为各种虚拟机初始创build时间自动设置cpu亲和性。 该项目是在Java中,我试图避免直接包括C代码,所以我一直在使用Java Native Access,它掩盖像winapi的东西。 我是图书馆的新手,虽然有一些基本的快速Googlesearchfunction,但还是缺乏教程或示例。 使用下面的代码,我可以设置主要Java进程的亲和性(本地的ffffffffffffffff),但其他进程仍然完全不受影响,即使我有权限使用任务pipe理器手动设置亲和力。 我也重复了从0到10000的所有整数,而不是input我知道有效的ID。 主要课程: import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.WinNT.HANDLE; public class SetAffinity { public static void main(String[] args){ int pid = -1; AffinityKernel instance = (AffinityKernel)Native.loadLibrary("Kernel32",AffinityKernel.class)); System.out.println(instance.SetProcessAffinityMask(new HANDLE(new Pointer(pid)), 1)); } } 工具界面: import com.sun.jna.platform.win32.Kernel32; import com.sun.jna.platform.win32.WinNT.HANDLE; public interface AffinityKernel extends Kernel32{ public boolean SetProcessAffinityMask(HANDLE hProcess, int dwProcessAffinityMask); } […]

为什么我得到java.lang.UnsatisfiedLinkError:无法加载库?

我正尝试使用JNA从我的Java应用程序中调用.dll文件。 我收到以下exception: 线程“main”中的exceptionjava.lang.UnsatisfiedLinkError:无法加载库“C:\ Windows \ System32 \ foo.dll”:无法find指定的模块。 .dll和我的JDK都是32位(OS_ARCH =“i586”),虽然我在64位Windows 7 PC上运行它。 .dll位于System32文件夹中。 我正在使用Eclipse,并将System32文件夹添加到Java Build Path Properties中的Libraries选项卡下的JRE System库中的Native库位置(尽pipe我不认为这是必须的)。 我将不胜感激任何帮助或build议。 谢谢, -Munk。

如何获得Java中的所有窗口句柄的列表(使用JNA)?

我是JNA的新手。 我正试图得到包括最小化的所有窗口句柄。 我需要所有窗口的HWND 。 我经历了Windows的问题:如何获得所有可见窗口的列表? 这帮助我得到了Windows的列表,但它有hWndtypes为int。 我不能用com.sun.jna.platform.win32.User32函数来请求com.sun.jna.platform.win32.WinDef.HWNDtypes的hWnd 。 所以,有没有办法得到所有types的com.sun.jna.platform.win32.WinDef.HWND而不是int指针的窗口句柄? 最后,为什么int和HWND的区别? 它如何接受? 我有点困惑。 谢谢。 我有下面的代码(从Hovercreft的答案编辑): import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.User32; import com.sun.jna.platform.win32.WinDef.HWND; import com.sun.jna.platform.win32.WinDef.RECT; import com.sun.jna.platform.win32.WinUser.WNDENUMPROC; public class TryWithHWND { public static void main(String[] args) { final User32 user32 = User32.INSTANCE; user32.EnumWindows(new WNDENUMPROC() { int count = 0; public boolean callback(HWND hWnd, Pointer arg1) { […]