Windows API для запуска обоев в случайном порядке - PullRequest
6 голосов
/ 24 марта 2012

Есть ли способ вызвать перемешивание в слайд-шоу обоев Windows? Желательно что-то, что я могу использовать из .net

РЕДАКТИРОВАТЬ: поэтому я пытаюсь использовать интерфейс IActiveDesktop, я получил его от здесь , я пытался использовать его так:

public static IActiveDesktop GetActiveDesktop()
{
    Type typeActiveDesktop = Type.GetTypeFromCLSID(new Guid("{75048700-EF1F-11D0-9888-006097DEACF9}"));
    return (IActiveDesktop) Activator.CreateInstance(typeActiveDesktop);
}

и затем называет это так:

IActiveDesktop dt = GetActiveDesktop();
dt.ApplyChanges(AD_APPLY.ALL | AD_APPLY.FORCE | AD_APPLY.BUFFERED_REFRESH);

при запуске кода ничего не происходит, ошибок тоже нет.

Ответы [ 4 ]

3 голосов
/ 24 марта 2012

Попробуйте следующее:

Ваша тема находится в папке C: \ Users \ USERNAME \ AppData \ Local \ Microsoft \ Windows \ Themes \ .theme

Откройте файл .theme и обновите флаг Shuffle в разделе [Slideshow]:

[Slideshow]     
Shuffle=1

Затем используйте интерфейс IActiveDesktop для перезагрузки темы, вызовите ApplyChange со следующими параметрами:

AD_APPLY_ALL | AD_APPLY_FORCE | AD_APPLY_BUFFERED_REFRESH

1 голос
/ 25 марта 2012

О, ПОДОЖДИТЕ, только что обнаружил, что вы просто хотите перетасовать. Ответ Flot2011 - это путь.

Полный путь к теме текущего пользователя можно найти по адресу:

HKCU \ Software \ Microsoft \ Windows \CurrentVersion \ Themes \ CurrentTheme

Если для этого есть какой-либо API, он, вероятно, пока не будет выставлен.Лучшее, что я буду делать на вашем месте, это смоделировать щелчок по опции «Следующий фон рабочего стола» в контекстном меню рабочего стола.Есть несколько способов сделать это, но я предлагаю вам использовать GetDesktopWindow api, имитировать щелчок правой кнопкой мыши и отправлять клавишу «n».Я не совсем уверен, какого эффекта это достигнет, но оно должно работать.

Также взгляните на это: http://www.technixupdate.com/keyboard-shortcut-or-hotkey-to-switch-to-next-windows-7-desktop-wallpaper/

0 голосов
/ 28 февраля 2018

Если все, что кому-то нужно, это быстрый, хакерский сценарий, мне кажется, что он работает в PowerShell, если вы не возражаете, задержка в пару секунд, и окна закрываются, а затем возвращаются обратно:

Function Next-Slide() {

   $shellApp = New-Object -ComObject  Shell.Application
   $wScript = New-Object -ComObject WScript.Shell

   # stack.push(...)
   # I guess this is assuming we aren't on the desktop already...
   $shellApp.ToggleDesktop();

   # This doesn't seem to be needed...
   #$desktopLoc = $wScript.SpecialFolders('Desktop');
   #$wScript.AppActivate($desktopLoc);

   #Give time to get to the desktop
   sleep 1;

   # Hack to make sure something is selected on the desktop
   # if there is something to select.
   $wScript.SendKeys('{RIGHT}');
   $wScript.SendKeys('{UP}');
   $wScript.SendKeys('{LEFT}');
   $wScript.SendKeys('{DOWN}');

   # Now undo the selection so that we get the desktop context
   # menu, not the icon one. This toggles selection on desktop.
   $wScript.SendKeys("^ ");


   # Open a context menu and select the option to see the next slide
   $wScript.SendKeys("+{F10}");
   $wScript.SendKeys("n");
   $wScript.SendKeys("~"); #This is ENTER

   # Give the key commands time to be read
   sleep 1;

   # stack.pop()
   $shellApp.ToggleDesktop();
}

Предупреждение: я вижу, что индикатор numlock включается / выключается в правом нижнем углу моего экрана, когда я запускаю это. Я не уверен почему. Это может измениться.

0 голосов
/ 24 марта 2012

Раздел реестра

HKEY_CURRENT_USER \ Панель управления \ Персонализация \ Слайд-шоу на рабочем столе

содержит значения, которые должны дать вам контроль над несколькими аспектами функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...