当前位置: 首页 > 知识库问答 >
问题:

JNA使用的ShObjIdl位置

严兴言
2023-03-14

我试图使用shobjidl_core. h库来运行代码,改变一个特定的监视器的壁纸,特别是我需要运行这两个函数:GetMonitor orDevicePathAt,SetWallfile。

现在,当我运行以下代码时:

java prettyprint-override">    interface shobjidl_core extends Library {
        test.shobjidl_core INSTANCE = Native.load( "shobjidl_core", shobjidl_core.class);

        void GetMonitorDevicePathAt(int monitorIndex, WString m);
        void SetWallpaper(WString monitorId, WString wallpaperPath);
    }

我收到一个错误,提示“无法加载库'shobjidl'”

我已经尝试了任何变体的“舒比德”,但仍然找不到一个有效的。从我对JNA的理解来看,它需要一个包含库的dll,但是我找不到任何与shObjidl相关的dll

我应该怎么做才能加载shObidl?

共有1个答案

闾丘山
2023-03-14

shobjidl是一个C/C头文件,它不是Windows附带的库。这些头文件中声明的函数通常以shell32结尾。dll或shcore。dll,但在本例中,实际上是指IDesktopWallpaper,这是一个COM对象。

使用JNA或JNI或任何您喜欢的COM交互方法。

这里可以找到一个最小的C示例。

 类似资料:
  • 我已经在Java工作了8个月。目前,我正在使用JNA加载一个第三方DLL,它在32bit WinXP和32bit Win7机器上运行良好。 我将使用procexp来查找是否缺少任何依赖项。我会相应地更新这篇文章。 请提供您的专家建议。提前感谢!

  • 目前,我正试图使用JNA将非Java应用程序设置为焦点,我发现了以下代码。 我还将以下依赖项放入我的pom.xml,该项目是一个只有主文件的新项目。 这是我们的程序入口点: 理论上,在编译/运行时,程序应该只关注运行时打开的谷歌Chrome。 然而,Java给出了以下错误消息: 对于这个问题,我找到的唯一参考是使用JNA User32平台映射的NoSuchMethodError 这几乎是相同的错误

  • 我正在使用jna调用Java中的放大api函数。 MagImageScalingCallback.java MagImageHeader.java 华丽.java WingDiExtra.java 我的代码 如果调用函数,则调用函数。 问题是,如果我用jre7(64位)运行这段代码,那么一切都可以正常工作。但是如果我在jre7(32位)中运行相同的代码,我会得到以下错误。 如何解决这个问题?如何在

  • 问题内容: 我正在计划在Windows下运行的Java程序的计划制定工作,该程序可以在背景的不同键runnig上映射不同的“宏”。问题是- 如何使Java在应用程序未聚焦时监听按键。 我发现很多观点认为这是不可能的。但是我也发现Stefano在SO上写的这本书。这种解决方案对我来说还不够好,至少没有一个重要的信息。如果没有按下该键,该函数将返回一个值。按键后,它会返回不同的值…如果函数在按键事件后

  • 问题内容: 我在上一个线程http://codingdict.com/questions/105948上问了类似的问题,但是我被引导使用JNI, “它并没有取得太大的成功。。。我已经阅读了一些教程,虽然有些可以很好地工作,但其他的我仍然无法获得我所需要的信息,这就是前台窗口的标题。 现在,我正在研究JNA,但我不知道如何访问GetForegroundWindow()…我认为一旦使用以下代码(在另一

  • 我有一个庞大的C源文件集,当编译时,这些文件将生成一个共享库。 还有一个Java版本使用JNA访问已经构建的c共享库。这些文件在另一个JAR中可用。此jar依赖于jna. 首先,我编译了c文件,然后编译了java代码。在java中,没有错误。只有当我试图将它移植到Android时,问题才会出现。我可以使用android的'ndk-build'工具轻松地编译c文件。这将成功创建共享库。 我无法在An