Articles of JNA

如何获得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) { […]

JNA简单的函数调用在Linux(x64)上工作,但不能在windows(x86)上工作

我想从Java运行下面的C函数使用JNA,但我得到一个错误(无效的内存访问)在x86窗口(DLL),但不是在x64 Linux(.SO)。 cfunction char* testcopy(char* out,char* in) { strcpy(out,in); free(in); return out; }; Ctesting:在两个平台(Eclipse CDT / MVC ++) 当通过linux共享库或者windows dll暴露函数并直接在C中调用的时候,结果是OK的。 … char out[10]; char* res; char* in = (char*)malloc(3*sizeof(char)); strcpy(in,"ab"); res = testcopy(out,in); fprintf(stdout,"out: %s\n",out); fprintf(stdout,"res: %s\n",res); return 0; 或者使用DLL: … HINSTANCE hInst = LoadLibrary(_T("C:\\jnatest.dll")); if( hInst != NULL ) { typedef char* (*maFonction)(char*, char*); […]

使用JNA来获取GetForegroundWindow();

我在前一个线程上提出了一个类似的问题( https://stackoverflow.com/questions/5206633/java-find-out-what-application-window-is-in-focus),但我被引导使用JNI,而我没有太多的成功…我已经阅读了一些教程,虽然有些工作正常,但其他人不能得到我需要的信息,这是前台窗口的标题。 现在我正在研究JNA,但我不知道如何访问GetForegroundWindow()…我想我可以打印文本,一旦我得到了处理窗口使用此代码(在另一个线程上find): import com.sun.jna.*; import com.sun.jna.win32.*; public class jnatest { public interface User32 extends StdCallLibrary { User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class); int GetWindowTextA(PointerType hWnd, byte[] lpString, int nMaxCount); } public static void main(){ byte[] windowText = new byte[512]; PointerType hwnd = //GetForegroundWindow() (?)… User32.INSTANCE.GetWindowTextA(hwnd, windowText, 512); System.out.println(Native.toString(windowText)); } } 有什么build议么? 谢谢!

使用Java在Windows中设置壁纸

我正在尝试使用Java在Windows 7中设置壁纸。 我试过使用这里和这里的答案代码。 它在Windows 8和10中完美工作,但不是在7中。没有错误,它只是没有做任何事情。 我已经尝试设置不同的1920×1080壁纸(这是控制面板中设置的分辨率)和不同的文件格式(PNG,JPG,BMP),并在几个不同的计算机上运行该程序。 我应该设置壁纸的行后的代码运行良好。 我正在使用JNA版本4.2.0和Java 8更新60。 有没有什么办法可以在Windows 7中使用Java设置壁纸? 编辑: 这是我的代码: import java.util.HashMap; import com.sun.jna.Native; import com.sun.jna.platform.win32.WinDef.UINT_PTR; import com.sun.jna.win32.StdCallLibrary; import com.sun.jna.win32.W32APIFunctionMapper; import com.sun.jna.win32.W32APITypeMapper; public class WallpaperChanger { public interface SPI extends StdCallLibrary { long SPI_SETDESKWALLPAPER = 20; long SPIF_UPDATEINIFILE = 0x01; long SPIF_SENDWININICHANGE = 0x02; @SuppressWarnings("serial") SPI INSTANCE = (SPI) Native.loadLibrary("user32", SPI.class, new […]

JNA – 查询Windows进程

我正在尝试使用JNA来返回特定Windows进程的详细信息。 不完全确定如何做到这一点。 无法在互联网上find很多帮助。 我想返回的一些信息包括CPU和内存使用情况。 下面只是我find的一个例子。 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import com.sun.jna.*; import com.sun.jna.Library.Handler; import com.sun.jna.platform.win32.*; import com.sun.jna.platform.win32.Advapi32Util.*; import com.sun.jna.platform.win32.WinNT.*; import com.sun.jna.ptr.IntByReference; import com.sun.jna.win32.*; import com.sun.jna.Native; import com.sun.jna.platform.win32.*; import com.sun.jna.win32.W32APIOptions; public class WindowsProcess { public static void main(String[] args) { WinNT winNT = (WinNT) Native.loadLibrary(WinNT.class, W32APIOptions.UNICODE_OPTIONS); […]

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?