用JNA查询所有Windows服务
目前,我正在尝试从(远程)计算机查询所有已安装的Windows服务. 我看了win32.Advapi32. 但是,在这里,我只能"获取"一个定义(我必须提供" ServiceName")Windows Services. (advapi32.instance.openscmanager,advapi32.instance.openservice,advapi32.instance.queryserservicestatusex) 您知道允许从(远程)机器查询所有Windows服务的API吗? 编辑:// 我使用以下代码已经准备好了.但是它几乎没有任何错误消息! public void getService(){ IntByReference size = new IntByReference(); IntByReference lppcbBytesneeded = new IntByReference(); IntByReferenc
0 2023-12-08
编程技术问答社区
Windows Kernel32.BatteryLifePercent = 255
我正在尝试构建一个Java应用程序,该应用程序读取笔记本电脑电池的状态,并在用户较低时向用户发送通知.为了做到这一点,我正在将JNA与kernel32本机库一起使用,如该问题的第一个答案所述: 态系统? 运行示例,程序产生此输出: ACLineStatus: Offline Battery Flag: High, more than 66 percent Battery Life: Unknown Battery Left: 0 seconds Battery Full: 10832 seconds 电池寿命和电池剩余的电池寿命和电池在kernel32 batterylifepercent 和 batterylifetime 值值255(未知)和0(我没有得到此值.未知.未知.根据Microsoft文档,为-1: 我的问题是:为什么我要回到这些价值观? Windows电池托盘图标显示正确的百分比,所以为什么我无法从这里获取数据? 我正在运行Windows 7 Ult
0 2023-12-07
编程技术问答社区
使用JNA获取/设置应用程序标识符
在 ,我想诊断为什么Windows不确认我的应用程序独立于javaw.exe.我目前有以下JNA代码来获取public class AppIdTest { public static void main(String[] args) { NativeLibrary lib; try { lib = NativeLibrary.getInstance("shell32"); } catch (Error e) { System.err.println("Could not load Shell32 library."); return; } Object[] functionArgs = new Object[1]; String functionName = null; Function function; try { functionArgs[0] = new String("Vendor.MyJavaApplication") .getBytes("UTF-16"); functio
0 2023-12-07
编程技术问答社区
通过JNA向隐藏窗口发送击键信息
背景: 我将击键发送到我隐藏的程序(文本编辑器),然后发送F7键,然后在该文本的四个键(类似的密码)之后.我正在使用JNA库和Win32API的SendMessage函数发送消息,无法使用sendInput(),因为我需要发送到特定的窗口句柄. 代码: private static void sendInputToWindow(WinDef.HWND editorWindowHandle, char[] password) throws InterruptedException { User32.INSTANCE.ShowWindow(editorWindowHandle, WinUser.SW_HIDE); User32.INSTANCE.SetForegroundWindow(editorWindowHandle); User32.INSTANCE.SetFocus(editorWindowHandle);
0 2023-12-07
编程技术问答社区
如何从Windows上的Java控制台应用程序中确定当前活动的代码页?
这是一个简单的Java应用程序,在Windows上显示默认代码页: package doscommand; import java.io.IOException; import java.io.InputStream; public class DosCommand { public static void main(String[] args) throws IOException { InputStream in = Runtime.getRuntime().exec("chcp.com").getInputStream(); int ch; StringBuilder chcpResponse = new StringBuilder(); while ((ch = in.read()) != -1) { chcpResponse.append((char) ch);
0 2023-12-07
编程技术问答社区
如何使用JNA将一个包含数组的Structures传递给C++函数?
我正在构建一个Java应用程序,该应用程序使用JNA与特定制造商的API进行通信.我有大量的函数电话映射并且已经在工作,但是有一对功能给我带来了一些悲伤. 这两个功能都来回传递数据结构以配置设备.该结构内部具有嵌套的数据结构. 本地定义: VISION_API_DECL BOOL VISION_API SetDeviceParameters( DWORD DeviceID, DeviceParameters DeviceParam ); VISION_API_DECL BOOL VISION_API GetDeviceParameters( DWORD DeviceID, DeviceParameters *DeviceParam ); 我在Java中声明了它们: public interface Driver extends Library { ... public boolean SetDeviceParameters(int Devi
0 2023-12-07
编程技术问答社区
用JNA的MS DPAPI加密的数据解密
是否可以解密使用MS DPAPI加密的数据?例如,我想从Windows注册表中解密数字证书. byte[] byteArray = (byte[]) Advapi32Util.registryGetValue(WinReg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\SystemCertificates\\AuthRoot\\Certificates\\02FAF3E291435468607857694DF5E45B68851868", "Blob"); byte[] decrypted = Crypt32Util.cryptUnprotectData(byteArray); String stringDecrypted = new String(decrypted); System.out.println(stringDecrypted); 但是我得到一个win32例外:线程" main" com.sun.jna.platform.
0 2023-12-07
编程技术问答社区
如何通过java程序获得运行中的exe的进程ID
我正在通过Java运行时API 运行EXE Process process = runTime.exec("cmd.exe /c start abc.exe "+Id, null, new File("D:/My")); 并使用这样的JNA检索过程ID- Kernel32.INSTANCE.GetProcessId((Long) f.get(process)); ,但过程ID返回不是ABC.EXE,而是CMD.EXE .....我需要ABC.EXE的过程ID.不知道该如何得到任何人可以提供帮助. 解决方案 我无法通过cmd.exe启动EXE的进程ID,但是我的目的是通过使CMD.EXE等到Child Exe使用以下命令 来实现我的目的 Process process = runTime.exec("cmd.exe /c start /wait abc.exe "+Id, null, new File("D:/My")
0 2023-12-06
编程技术问答社区
使用Java在Windows中设置墙纸
我正在尝试使用Java在Windows 7中设置墙纸.我已经尝试使用答案中的代码在这里/4750765/5403773">在这里.它可以在Windows 8和10中完美地工作,但在7中没有.没有错误,只是什么都不做.我已经尝试设置不同的1920x1080壁纸(这是控制面板中的分辨率)和不同的文件格式(PNG,JPG,BMP),并在一些不同的计算机上运行程序.我应该在墙纸设置壁纸的行之后的代码运行正常.我正在使用JNA版本4.2.0和Java 8更新60. 有什么方法可以使用Java在Windows 7中设置墙纸? 编辑: 这是我的代码: 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.w
0 2023-12-06
编程技术问答社区
JNA Windows服务启动类型
我一直在玩JNA,并且能够使用下面的代码返回Windows服务的状态(即启动或停止).我不确定如何返回服务的启动类型.我敢肯定,JNA之外有一些方法,但是如果可能的话,我想继续使用JNA. 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.*; public class WindowsService { public static void main(String[] args) { W32ServiceManager
0 2023-12-06
编程技术问答社区
为什么我得到java.lang.UnsatisfiedLinkError: 无法加载库?
我试图使用JNA从我的Java应用程序调用.dll文件.我得到以下例外: 线程" main" java.lang.unsatisfiedlinkerror中的例外:无法加载库'c:\ windows \ system32 \ foo.dll':找不到指定的模块. .dll和我的JDK都是32位(OS_ARCH =" i586"),尽管我在64位Windows 7 PC上运行它. .dll在System32文件夹中. 我正在使用Eclipse,并已将System32文件夹添加到JRE System库中的本机库位置,在Java build Path属性中的库中的库中(尽管我不认为这是必需的). . 我将感谢任何帮助或建议. 谢谢, -Munk. 解决方案 这取决于话虽如此,系统目录归该系统拥有和私人.预计您不会将DLL放入系统目录中.您应该找到一种将DLL放在其他位置的方法. 其他解决方案 错误的另一个原因是,DLL仅支持32版,而不是64位O
0 2023-12-06
编程技术问答社区
JNA的简单函数调用在Linux(x64)上工作,但在Windows(x86)上不工作
我正在尝试使用JNA从Java运行以下C函数,但是我在X86 Windows(dll)上获得了错误(无效的内存访问),但在x64 linux(.so)中却没有. C功能 char* testcopy(char* out,char* in) { strcpy(out,in); free(in); return out; }; C测试:在两个平台(Eclipse CDT/MVC ++)中工作 当函数通过Linux共享库或Windows DLL暴露并直接在C中调用时,结果是可以的. ... 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); retu
0 2023-12-06
编程技术问答社区
如何使用 Java Native Access 为 Java.exe 以外的进程设置进程亲和力?
尽管手动进行操作相当容易,但我试图自动化Windows 7中各种VM的CPU亲和力的设置.该项目位于Java,我正在尝试直接避免使用C代码,因此我一直在使用Java Antive Access,它掩盖了Winapi之类的东西.我是图书馆的新手,尽管可以通过快速的Google搜索可以找到一些基本的教程或示例,但有点缺乏教程或示例. . 使用以下代码,我可以设置主Java进程的亲和力(本地ffffffffffffffff),但是即使我拥有使用任务管理器手动设置亲和力的特权,其他过程仍然完全不受影响.我还迭代了所有整数从0到10000,而不仅仅是输入我知道有效的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
0 2023-12-06
编程技术问答社区
Windows VHD API的Java库
我需要安装和浏览Java的Windows VHD.任何人都知道包裹 Windows Virtual硬盘驱动器API 或者是否有源代码使用 jna 我可以看一下.我的Google搜索没有给我太多. 即使是有关如何转换 openvirtualdisk函数对JNA结构将为我提供足够的我相信的其余部分. 解决方案 VHD API在MSDN上.这是一个API之一的链接. 这是一个使用JNA库加载JNA的JNA使用示例(必要时调整/定义类型): public interface VHDLibrary extends Library { VHDLibrary INSTANCE = (VHDLibrary) Native.loadLibrary("VirtDisk", VHDLibrary.class); DWORD AttachVirtualDisk(HANDLE p1, Pointer p2, int p3, long p4, Pointer p5, Poi
0 2023-12-06
编程技术问答社区
使用JNA的Java Windows任务栏如何将窗口图标(HICON)转换为Java图像?
我正在尝试将一个应用程序转换器添加到我正在从事的更大项目中.它需要在Windows XP/Vista/7/8上使用.我正在使用Java 1.7.以下是我创建的示例应用程序,以证明我遇到的一些问题.我是JNA的新手. 非常感谢'Hovrcraft funper eels'的这个答案(以及许多其他!)对于测试申请. 这是我的问题: 图像图 - 我从窗口图标中获得的图像以黑色和白色绘制.我从中修改了getimageforwindow中的代码.是否有更好的方法将hicon对象转换为java.aw.aw.image?我注意到在com.sun.jna.platform.win32.w32api.hicon中有一种称为" fromnative"的方法,但我不知道如何使用它. 获取图标 - 我用来获取图标句柄的呼叫,GetClasslongw(HWND,GCL_HICON),不会从64位窗口返回图标.我想我需要getClasslongptr,但我似乎无法通过JNA访问它.
0 2023-12-06
编程技术问答社区
Java (Windows)-按进程ID,获取内存使用量、磁盘使用量、网络使用量
我一直在研究为特定过程获得以下数据的最佳方法: CPU用法 内存用法 磁盘用法 网络用法 我决定使用OSHI(操作系统和硬件信息)API. 对我来说不幸的是,此API并没有为我提供所需的信息,它需要一些基本知识,例如计算如何计算. 我的问题是:如何通过进程ID获取内存,磁盘,网络使用? 使用以下每个Prcoess的CPU使用数据 的示例 例如: 获取claculator.exe运行过程的实际CPU使用: import oshi.SystemInfo; import oshi.hardware.CentralProcessor; import oshi.software.os.OSProcess; import oshi.software.os.OperatingSystem; public class processCPUusage { public static void main(String[] args) throws In
0 2023-12-06
编程技术问答社区
在Java中从内存中执行一个可执行程序(.exe)。
我想在Windows上的内存中执行程序.我不想将文件写入磁盘.我只想传递字节数组(这是我要执行的程序)作为参数. 我不足以编写本机代码来执行此操作.同样,这应该是Windows本地人. 我要在内存中执行的程序不是Java程序.这是可执行的(.exe)!可执行文件旨在在内存中读取和运行,而不是通过 runtime.getRuntime().exec(" example.exe"); 解决方案 我还不能发表评论,否则我会发表评论.您应该能够在此处找到一些有用的信息,人们试图使用C ++解决相同的问题.祈祷说,您是否想编写一个跨平台或仅窗口的程序?您对" .exe"的使用仅表示窗口. 来自内存缓冲区的createProcors 理论上,只要您不尝试制作此跨平台,您就应该能够使用Windows API调用来完成此工作.
0 2023-12-06
编程技术问答社区
使用JNA本机等待调用检测线程中断(Windows)
我正在尝试编写一些通过JNA进行等待的代码(例如,调用kernel32函数waitforsingleobject),但是如果thread.inter.inter.inter.inter.inter.inter.inter.inter.inter.int.ient.int.ient.ient.ient.ient.ient.int.int.ient.int.ient.int.ient.int.ient.ient.int.ient.int.ient.ient.ient.ient.ient();我认为Java使用类似事件对象的东西来实现中断.是否有任何方法可以从Java获得该事件以在呼叫中使用WaitgormultipleObjects?或者,如果线程中断,我还有其他方法可以安排我的等待完成? 解决方案 Java通过Nio支持它,很少有人知道,该课程是抽象的,但这不是问题: java.nio.channels.spi.AbstractInterruptibleChannel.它具有
0 2023-12-05
编程技术问答社区
从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"之类的文档.这只是一种方法,我无法预测将要启动的内容(因此我不知道事先从那里获得窗口标题/className,从那里获取HWND,然后获取PID). 有人可以指
0 2023-12-05
编程技术问答社区
JNA-查询Windows进程
我正在尝试使用JNA来返回特定Windows进程的详细信息.不确定该怎么做.在Interwebs上找不到很多帮助.我想要返回的一些信息包括CPU和内存使用量.以下只是我发现的一个例子. 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.Advapi32U
2 2023-12-05
编程技术问答社区