Tag: jna

JAVA JNA WindowProc实现

我正在尝试用Java编写一个简单的应用程序,它将与USB设备通信。 USB设备由我使用Microchip微控制器制造。 通信相当简单,因为USB设备来自HID类,所以在计算机和设备之间交换64字节的数组。 我的程序根据产品ID和供应商ID查找设备,可以写入和读取64个字节,但现在我想检测设备何时连接或与计算机断开连接。 正如我在Microchip提供的C#程序中看到的那样,WndProc方法被覆盖并处理WM_DEVICECHANGE消息。 我的问题是如何使用JNA在Java中完成,我如何覆盖WindowProc方法并处理消息,如果可能的话:),但我希望它是:D 提前谢谢你的答案。 的Gabor。

如何在Windows上使用JNA操作Java内存

如何操纵Java的内存? 我知道Java在它自己的JVM中运行,因此无法直接访问进程内存。 我听说过JNA可以用来获取操作系统和我的Java代码之间的接口。 假设我想操纵纸牌的得分。 尝试将是这样的: 得到纸牌的过程 获得纸牌记忆 找出分数存储在内存中的位置 在地址中写下我的新值 Java本身无法访问该内存,因此如何使用JNA执行此操作?

如何在Java程序中调用DLL中的方法

我试图使用JNA调用DLL中的方法。 到目前为止已经加载了DLL Runtime.getRuntime().load(“myworkspace/test.dll”); 这个dll包含了我需要访问的方法。 如何在Java文件中执行DLL中的方法。 我是否创建一个对象或DLL的某些东西,然后在点运算符后获取方法名称。

如何在Java中获得打印机的品牌和型号?

我实际上正在开发一个将打印机共享到服务器的Java应用程序,我需要这个应用程序来获取它共享的打印机的品牌和型号。 我知道这个问题被问了三四次,但似乎没有人找到答案。 我试过这段代码: PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null); for (PrintService printer : printServices){ System.out.println(printer.getDefaultAttributeValue(PrinterMakeAndModel.class)); System.out.println(printer.getAttribute(PrinterURI.class)); } 第一个打印始终返回一个空字符串,第二个打印出一个NullPointerException 。 一些研究引导我访问此页面: http : //bugs.sun.com/bugdatabase/view_bug.do?video_id = 4673400 这似乎是一个知道“错误”,我真的不理解评估。 我想解决方法是通过向打印机发送SNMP请求来获取make和model,但我不知道有关SNMP的事情,我不确定是否有单个SNMP命令来获取make和model任何打印机。 如果有人知道如何实现这一点,无论是通过使用Java方法还是通过发送SNMP命令或任何可在任何操作系统上完成的任何其他操作,您的帮助将不胜感激。 编辑: 以下是指向同一问题的主题的链接: 如何在javax.print中获取打印机的型号? 编辑2: 方案: 正如我在评论中所说,我试图通过将OID“1.3.6.1.2.1.25.3.2.1.3.1”发送到打印机来通过SNMP获取make和model。 它似乎工作,但我不确定它是否适用于使用相同OID的任何打印机,如果在目标打印机上停用SNMP,它可能会崩溃。 所以我最终选择使用JNA和Winspool.drv获取驱动程序名称。 其中一部分已在JNA中实现,但我必须添加一些结构和function。 这是JNA中现有WinspoolUtil.java和Winspool.java类的链接。 以下是我对这两个类的个人更新的代码。 温斯普尔: import java.util.Arrays; import java.util.List; import com.sun.jna.Memory; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.Structure; import com.sun.jna.platform.win32.WinDef.DWORD; import com.sun.jna.platform.win32.WinDef.INT_PTR; […]

让JNA使用Java => C#?

我在C#库中编写了很多代码,我现在需要从Java调用它。 我在SO上建议使用JNA ,但是我甚至无法摆脱起跑线; 那里的文件非常粗略。 首先,它似乎只是告诉你如何连接到Native C库,这对我没有好处; 我想连接到我自己的库。 代码示例显示: // This is the standard, stable way of mapping, which supports extensive // customization and mapping of Java to native types. public interface CLibrary extends Library { CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? “msvcrt” : “c”), CLibrary.class); void printf(String format, Object… args); } 我想连接到我的库(MyLibrary.dll),并在MyNamespace.MyClass上调用一个静态方法,其C#签名是: public static string […]

如何检查文件是否可读?

我正在编写Java 6应用程序,我必须检查文件是否可读。 但是,在Windows上, canRead()始终返回true 。 所以我看到可能,唯一的解决方案可能是基于WINAPI并使用JNA / JNI编写的一些本机解决方案。 但是,还有另一个问题,因为在WINAPI中很难找到一个简单的函数,它会返回有关文件访问的信息。 我找到了GetNamedSecurityInfo或GetSecurityInfo但我不是一个高级的WINAPI程序员,对于我来说,与JNA / JNI相关的它们太复杂了。 有什么想法如何处理这个问题?

如何在JNA中映射枚举

我有以下枚举如何在jna中映射? 该枚举在结构中进一步引用。 typedef enum { eFtUsbDeviceNotShared, eFtUsbDeviceSharedActive, eFtUsbDeviceSharedNotActive, eFtUsbDeviceSharedNotPlugged, eFtUsbDeviceSharedProblem } eFtUsbDeviceStatus; 阿卜杜勒·哈利克

使用JNA(JAVA)的GetAsyncKeyState和VirtualKeys /特殊字符

我正在进行双向私聊,这将在全屏游戏中运行。 这需要让用户在屏幕顶部键入半透明文本框, 即使它没有焦点也是如此 。 使用以下代码, 我可以检测所有物理键 ,但使用虚拟键时会很困难。 检测到SHIFT 。 检测到2 。 但是, Shift + 2被检测为单独的键(即使[SHIFT+2]在键盘上给出@ )。 IE:程序输出SHIFT和2,但不输出它们产生的内容: @ 。 问题是,我将如何根据键盘转换为角色? 例如: 在英国键盘上,SHIFT + 2会给我” (引号)。 在美国键盘上,SHIFT +2会给我@ 。 如何根据键盘转换为特定字符? 这是到目前为止的代码: static interface User32 extends Library { public static User32 INSTANCE = (User32) Native.loadLibrary(“User32”, User32.class); short GetAsyncKeyState(int key); short GetKeyState(int key); IntByReference GetKeyboardLayout(int dwLayout); int MapVirtualKeyExW […]

Java – 窗口图像

有没有人知道如何捕获Java中的屏幕截图(不是它自己的屏幕,而是桌面上的任何其他窗口,它们不一定必须是活动窗口)? 这个类似的主题有很多线索,但我还没有找到答案。 我尝试过使用JNA,但经过几次尝试后卡住了。 例如… public class Main { public static void main(String[] args) { Main m = new Main(); List list = m.getWindows(); for (int i=0;i<list.size();i++) { WindowInfo info = list.get(i); System.out.println(info.getTitle()); } WindowInfo wi = list.get(0); W32API.HDC hdcSrc = User32.instance.GetWindowDC(wi.getHwnd()); W32API.HDC hdcMemory = Gdi32.instance.CreateCompatibleDC(hdcSrc); //W32API.HBITMAP hBitmapMemory = Gdi32.instance.CreateCompatibleBitmap(hdcSrc, int width, int height); int width […]

使用JNA从Java调用DLL

我是使用JNA从Java访问DLL的新手。 我需要从DLL中的类(用.net编写)访问方法。 在下面形成此示例DLL,我试图获取AuditID和服务器ID。 我在运行代码时遇到以下错误。 任何指导真的很感激。 ///错误/// Exception in thread “main” java.lang.UnsatisfiedLinkError: Error looking up function ‘GetEnrollcontext’: The specified procedure could not be found. // DLL文件代码// SampleDLL.ProfileEnroll enrollcontext = new SampleDLL.ProfileEnroll(); enrollcontext.Url =” url”; enrollcontext.AuditIdType = SampleDLL.ProfileId; enrollcontext.AuditId = “22222222 “; enrollcontext.ServerId = “server1”; /// Java代码/// import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Structure; import dllExtract.DLLExtractTest.SampleDLL.Enrollcontext; public class […]