1

在一个论坛上读到,Windows Aero 幻灯片功能中的“下一个桌面背景”命令调用了该stobject.dll文件。所以我运行了垃圾箱来检查我是否可以找到一个导出的方法来调用:

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

我猜如果 IP/Invoke 其中一种方法不起作用。我该怎么办?

4

2 回答 2

2

这两个导出是标准 COM 导出,您必须弄清楚要使用哪个 COM 接口并以普通 COM 方式调用它们(如果您有 Visual Studio,您可以在 dll 上运行 OLE/COM 对象查看器并查看其类型库(如果有)

于 2009-10-27T10:38:58.250 回答
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%"

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

于 2012-07-17T20:27:02.753 回答