我正在尝试使用JNA访问IDesktopWallpaper接口,但我遇到了障碍。
我查阅了Windows 10 SDK中的
我查阅了Windows 10 SDK中的
ShOljIdl_core.idl
,并发现该接口的GUID如下。// IDesktopWallpaper
[
uuid(B92B56A9-8B55-4E14-9A89-0199BBB6F93B),
object
]
以及实现接口的具体类的GUID
// CLSID_DesktopWallpaper
[uuid(C2CF3110-460E-4fc1-B9D0-8A1C0C9CC4BD)] coclass DesktopWallpaper { interface IDesktopWallpaper; }
所以我按照JDA Github上的官方示例编写了以下内容。
@ComObject(clsId="{C2CF3110-460E-4fc1-B9D0-8A1C0C9CC4BD}")
public interface DesktopWallpaper extends IUnknown{
}
并且在Main
中
Ole32.INSTANCE.CoInitializeEx(Pointer.NULL, Ole32.COINIT_MULTITHREADED);
try {
Factory factory = new Factory();
try {
DesktopWallpaper dw = factory.createObject(DesktopWallpaper.class);
} finally {
factory.disposeAll();
factory.getComThread().terminate(1 * 1000);
}
} finally {
Ole32.INSTANCE.CoUninitialize();
}
但是factory.createObject(DesktopWallpaper.class)
会抛出No such interface supported(HRESULT: 80004002) (puArgErr=)
,我不知道如何解决或者为什么会出现这种情况。
有没有专家能够为我解释一下发生了什么?(我完全不懂)如果需要任何进一步的信息,我会提供。JNA能否实现我想要的功能,还是我必须使用像Com4j这样的其他工具?
IDesktopWallpaper
,它是否有效?只是猜测。 - cbr