.net - Windows API til at udløse tapet shuffle

Indlæg af Hanne Mølgaard Plasc

Problem



Er der en måde at udløse et shuffle i Windows tapet lysbilledshow?
Fortrinsvis noget, jeg kan bruge fra .net


EDIT: så jeg forsøger at bruge IActiveDesktop-grænsefladen, jeg fik den herfra, jeg forsøgte at bruge den som denne: [6]


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


og derefter kalde det sådan:


IActiveDesktop dt = GetActiveDesktop();
dt.ApplyChanges(AD\_APPLY.ALL | AD\_APPLY.FORCE | AD\_APPLY.BUFFERED\_REFRESH);


intet sker, når jeg kører koden, ingen fejl også.

Bedste reference


Prøv følgende:


Dit tema er placeret i C: \ Users \ USERNAME \ AppData \ Local \ Microsoft \ Windows \ Themes \ .theme


Åbn .theme-filen og opdater et Shuffle-flag i sektionen [[Slideshow]]:


[Slideshow]     
Shuffle=1


Brug derefter IActiveDesktop-grænsefladen til at genindlæse tema, ring til ApplyChange med følgende parametre:


AD\_APPLY\_ALL | AD\_APPLY\_FORCE | AD\_APPLY\_BUFFERED\_REFRESH

Andre referencer 1


OH Vent, har lige opdaget, at du bare vil shuffle. Flot2011s svar er vejen at gå.


Du kan finde den fulde sti til den aktuelle brugers tema via:



  HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Temaer \ CurrentTheme



Hvis der er nogen som helst, vil det nok ikke blive udsat endnu. Det bedste jeg vil gøre, hvis jeg var dig, er at simulere et klik på 'Næste skrivebordsbaggrund' i menuen Desktop Context. Der er flere måder at gøre dette på, men jeg vil foreslå at du bruger GetDesktopWindow api, simuler et højre museklik og send 'n' tasten. Jeg er ikke helt sikker på, hvilken virkning dette vil opnå, men det skal fungere.


Se også på dette: http://www.technixupdate.com/keyboard-shortcut-or-hotkey-to-switch-to-next-windows-7-desktop-wallpaper/
[8]

Andre referencer 2


Registernøglen



  HKEY\_CURRENT\_USER \ Kontrolpanel \ Personalisering \ Desktop Slideshow



indeholder værdier, som skal give dig kontrol over flere aspekter af funktionen.

Andre referencer 3


Hvis alle har brug for et hurtigt, hacky script, synes dette at fungere for mig i powershell, hvis du ikke har noget imod et par sekunder forsinkelse og vinduerne går ned og derefter sikkerhedskopieres:


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();
}


Advarsel: Jeg ser Numlock on/off indikatoren pop op nederst til højre på min skærm, når jeg kører dette. Jeg er ikke sikker på hvorfor. Det kan ændre sig.