jnative 为什么调用失败,总是返回0

发布于 2021-11-17 11:19:41 字数 2177 浏览 979 评论 2

import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.MemoryBlockFactory;

public class JNativTest {


	public static int FindWindow(String sClassName, String sWindowName)
									throws NativeException, IllegalAccessException {

		JNative jnative = new JNative("user32", "FindWindowW");
		jnative.setRetVal(Type.INT);
		jnative.setParameter(0,  sClassName);
		jnative.setParameter(1, sWindowName);
		jnative.invoke();
		int hWnd = Integer.parseInt(jnative.getRetVal());
		return hWnd;

	}
	
	public static int GetDriveType(String nDrive) throws Exception{

		JNative jnative = new JNative("kernel32", "GetDriveTypeA");
		jnative.setRetVal(Type.INT);
		jnative.setParameter(0, Type.STRING, nDrive);
		jnative.invoke();
		int hWnd = Integer.parseInt(jnative.getRetVal());
		return hWnd;
	}

	public static Integer InstallWinIoDriver()
			throws Exception {

		System.loadLibrary("WinIo32");

		Integer ret = new Integer(0);
		JNative jnative = new JNative("WinIo32", "InstallWinIoDriver");
		jnative.setRetVal(Type.INT);

		Pointer pszWinIoDriverPath = new Pointer(MemoryBlockFactory.createMemoryBlock(100));
		jnative.setParameter(0, pszWinIoDriverPath);
		jnative.setParameter(1, Type.INT, "0");

		jnative.invoke();
		ret = Integer.parseInt(jnative.getRetVal());
		
		String str = pszWinIoDriverPath.getAsString();
		System.out.println(str);
		return ret;

	}
	
	public static int InitializeWinIo() throws Exception{
		
		Integer ret = new Integer(0);
		JNative jnative = new JNative("WinIo32", "InitializeWinIo");
		jnative.setRetVal(Type.INT);
		jnative.invoke();
		ret = Integer.parseInt(jnative.getRetVal());
		return ret;

    }


	public static void main(String[] args) throws Exception {

		System.out.println(FindWindow("Notepad", ""));//return 0
		System.out.println(InstallWinIoDriver());//return 0
		System.out.println(GetDriveType("d:"));//这个可以返回结果
		System.out.println(InitializeWinIo());//return 0

	}

}

为什么有的可以,有的不行呢,检查来检查去。。。头疼,兄弟们帮忙瞧瞧,感激不尽

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

水水月牙 2021-11-23 04:05:00

楼主调用的window xp系统下的dll文件,那么这个dll文件中的相关的函数对应的含义和这个dll文件中的相关的函数使用的参数以及返回的参数是怎么知道了啊。。。求解 。。。

回忆凄美了谁 2021-11-19 07:02:05

你的测试程序中: findWindow("Notepad","")返回0,参考解决方案:

a.将测试代码中的第二个参数改成null,然后用记事本随便打开个文本,然后再运行;

b.如果还不行,把调用的本地方法名"FindWindowW"改成"FindWindowA"

---------

其它俩个我机器是win7 32bit,貌似没有WinTo32这个库。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文