【问题标题】:How to advance the wallpaper slideshow on windows vista/7 programatically?如何以编程方式在 windows vista/7 上推进壁纸幻灯片?
【发布时间】:2009-10-23 01:59:25
【问题描述】:

我读到on a forum,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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • --------------- OLE/COM 对象查看器 ---------- ----------------- IMoniker::BindToObject 在从 ( "C:\Windows\System32\stobject.dll" ) 创建的文件名字对象上失败。文件 MK_E_INVALIDEXTENSION 的错误扩展名 ($800401E6) ---------------------------- OK ------------- --------------
    • --------------- OLE/COM 对象查看器 ---------- ----------------- LoadTypeLib( C:\Windows\System32\stobject.dll ) 失败。加载类型库/DLL 时出错。 TYPE_E_CANTLOADLIBRARY ($80029C4A) ------------------------- 好的 ----- ----------
    • 我不知道如何通过名称或 guid 找到这个库。在 OLE/COM 对象查看器中打开文件会引发上述异常。尝试在 Visual Studio 项目中直接引用它会引发另一个异常。赏金是谁展示了我应该采取的步骤。
    • ---------------------------- Microsoft Visual Studio ------------ --------------- 无法添加对“C:\WINDOWS\system32\stobject.dll”的引用。请确保该文件是可访问的,并且它是一个有效的程序集或 COM 组件。 - - - - - - - - - - - - - - 好的 - - - - - - - - - - - -----
    • 我终于在OleViewer上找到了,我也可以把dll拖放到它上面。它公开了一些接口。不知道如何继续。
    【解决方案2】:

    我也遇到过类似的问题。不同之处在于我想删除当前的壁纸文件并强制幻灯片继续播放。我发现在墙纸上更改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-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多