Как продвигать слайд-шоу обоев на Windows Vista / 7 программно? - PullRequest
1 голос
/ 23 октября 2009

Я прочитал на форуме , что команда "Следующий фон рабочего стола" в функции Windows Aero Slideshow вызывает файл 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

Полагаю, если я вызову один из этих методов, он не сработает. Что мне делать?

Ответы [ 2 ]

2 голосов
/ 27 октября 2009

эти два экспорта являются стандартными COM-экспортами, вам нужно выяснить, какой COM-интерфейс использовать, и вызывать их обычным COM-способом (если у вас есть Visual Studio, вы можете запустить OLE / COM Object Viewer на dll и посмотрите на его библиотеку типов, если она есть)

1 голос
/ 18 июля 2012

У меня была похожая проблема. Разница в том, что я хотел удалить текущий файл обоев и включить слайд-шоу. Я разобрался, что на обоях сменить ключ реестра 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%"

Попробуйте увеличить временной интервал, если ничего не происходит.

...