如何以编程方式在windows vista / 7上推进壁纸幻灯片?

时间:2009-10-23 01:59:26

标签: windows-7 windows-vista unmanaged aero wallpaper

我引用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其中一种方法它将无法正常工作。我该怎么办?

2 个答案:

答案 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%"

如果没有任何反应,请尝试增加时间间隔。