我引用on a forum Windows Aero幻灯片功能中的“下一桌面背景”命令调用stobject.dll
文件。所以我运行了dumpbin以检查我是否可以调用导出的方法来调用:
Microsoft Visual Studio 9.0\VC\bin\dumpbin.exe /EXPORTS
Windows\System32\stobject.dll
Microsoft (R) COFF/PE Dumper Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file C:\Windows\System32\stobject.dll
File Type: DLL
Section contains the following exports for stobject.dll
00000000 characteristics
49EE914D time date stamp Wed Apr 22 00:38:53 2009
0.00 version
1 ordinal base
2 number of functions
2 number of names
ordinal hint RVA name
1 0 00001A28 DllCanUnloadNow
2 1 000059A9 DllGetClassObject
Summary
1000 .data
2000 .reloc
1A000 .rsrc
1A000 .text
我想如果我P / Invoke其中一种方法它将无法正常工作。我该怎么办?
答案 0 :(得分:2)
这两个导出是标准的COM导出,您必须弄清楚使用哪个COM接口并以正常的COM方式调用它们(如果您有Visual Studio,则可以在dll上运行OLE / COM对象查看器,看它的类型库,如果它有一个)
答案 1 :(得分:1)
我遇到过类似的问题。区别在于我想删除当前的壁纸文件并强制继续幻灯片放映。我发现在壁纸上更改了HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Desktop\General\WallpaperSource
注册表项。所以,我试图删除它所指向的文件。并且...在大约十秒钟内壁纸被改变了!看起来这样会强制幻灯片继续下去。
所以,这是一个批处理文件来完成这个技巧。它从注册表中获取当前壁纸文件值,使用临时名称重命名,等待10秒并将其重命名为原始文件。
@echo off
set WallpaperFilePath=
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Desktop\General" /v WallpaperSource`) Do set WallpaperFilePath=%%J
if "%WallpaperFilePath%" equ "" goto :eof
For %%i In ("%WallpaperFilePath%") Do set WallpaperFileName=%%~nxi
set WallpaperFileNameTmp=__%WallpaperFileName%__
echo "%WallpaperFilePath%" "%WallpaperFileName%" "%WallpaperFileNameTmp%"
ren "%WallpaperFilePath%" "%WallpaperFileNameTmp%"
ping -n 10 localhost > Nul
For %%i In ("%WallpaperFilePath%") Do ren "%%~dpi%WallpaperFileNameTmp%" "%WallpaperFileName%"
如果没有任何反应,请尝试增加时间间隔。