2009-03-30 6 views
2

Est-ce que quelqu'un sait comment modifier l'apparence de Windows XP et les couleurs en utilisant VBScript?Modifier le thème XP (apparence et jeu de couleurs) à partir d'un vbscript

J'ai une application écrite en Visual C++ qui a besoin d'une apparence Windows XP (pas classique) pour être affichée correctement et je veux définir ces propriétés depuis l'installation. J'utilise InstallShield pour que le programme d'installation et VBScript exécutent certaines actions personnalisées. Donc ce serait génial si je peux créer un script en Visual basic pour changer ces propriétés.

Répondre

1

Ce que j'ai fait était la création d'une DLL C++ que j'utilise comme une action personnalisée dans Install Shield. Dans cette DLL j'utilise le uxtheme.dll pour définir le fichier luna.msstyle comme un thème. C'est la fonction qui fait le travail:

bool SetVisualStyle() 
{ 
    TCHAR szUxTheme[MAX_PATH+1]; 
    UINT nSize = ::GetSystemDirectory( szUxTheme, 
             MAX_PATH); 
    szUxTheme[nSize] = '\0'; 

    wcscat_s( szUxTheme, 
       MAX_PATH - nSize, 
       L"\\uxtheme.dll"); 

    HMODULE hModule = ::LoadLibrary(szUxTheme); 
    if(!hModule) 
    { 
     return false; 
    } 

    typedef int (__stdcall *SETVISUALSTYLE) ( LPCWSTR szTheme, 
               LPCWSTR szScheme, 
               LPCWSTR szFontType, 
               int nReserved); 
    SETVISUALSTYLE pFnSetVisualStyle; 
    pFnSetVisualStyle = (SETVISUALSTYLE)GetProcAddress(hModule, 
                 MAKEINTRESOURCEA(LOWORD(65))); 
    if(pFnSetVisualStyle) 
    { 
     pFnSetVisualStyle( L"C:\\WINDOWS\\Resources\\Themes\\Luna\\luna.msstyles", 
          L"NormalColor", 
          L"NormalSize", 
          1|32); 
    } 

    ::FreeLibrary(hModule); 
    return true; 
} 

Ce n'est pas parfait mais il fait ce dont j'ai besoin.

J'espère que cela peut aider quelqu'un d'autre ... si vous avez un doute n'hésitez pas à me demander.

Cheers.

3

Cela devrait le faire:

rundll32 shell32.dll,Control_RunDLL desk.cpl desk,@themes /Action:OpenTheme /File:"%WinDir%\Resources\Themes\Luna.theme" 

Cependant, vous avez encore besoin d'obtenir l'utilisateur de cliquer sur « OK » ou utiliser un autre utilitaire pour le faire pour vous.

2

Si vous devez changer options d'apparence individuelles (comme les couleurs de la fenêtre), vous pouvez modifier les valeurs de registre appropriées dans les clés HKEY_CURRENT_USER\Control Panel\Appearance et HKEY_CURRENT_USER\Control Panel\Colors. Par exemple, ce code chamge la couleur de fond de la fenêtre à la crème:

Set oShell = CreateObject("WScript.Shell") 
oShell.RegWrite path & "HKCU\Control Panel\Colors\Window", "255 251 240", "REG_SZ" 

Notez toutefois que Windows va probablement appliquer les modifications de Registre uniquement après le redémarrage.


Si vous devez charge un prêt .theme fichier, vous pouvez utiliser le code suivant:

Const Theme = "C:\MyTheme.theme" 

Set oShellApp = CreateObject("Shell.Application") 
oShellApp.ControlPanelItem "desk.cpl desk,@Themes /Action:OpenTheme /file:""" & Theme & """" 

Bien que, comme Sascha a souligné, cela apportera seulement les propriétés d'affichage de dialogue avec le thème spécifié sélectionné; vous avez toujours besoin de l'utilisateur pour cliquer sur OK ou appuyez sur Entrée. Il est possible de simuler touches à partir du code de script en utilisant la méthode WshShell.SendKeys:

Set oShell = CreateObject("WScript.Shell") 

' Wait until the Display Properties dialog is opened 
While Not oShell.AppActivate("Display Properties") 
    WScript.Sleep 500 
Wend 

' Send the Enter key to close the dialog and apply the theme 
Do 
    oShell.SendKeys "~" 
    WScript.Sleep 500 
Loop While oShell.AppActivate "Display Properties" 

Mais cette approche est peu fiable, car l'utilisateur peut cliquer ailleurs Entrez donc irait à une autre fenêtre. En outre, la légende de la boîte de dialogue Propriétés d'affichage dépend des paramètres régionaux.

Une autre option consisterait à utiliser l'API Theme.Manager fournie par la bibliothèque themeui.dll à partir de Windows XP SP1, mais cela ne semble pas fonctionner sur XP SP2. Quoi qu'il en soit, vous pouvez trouver l'exemple de code here.

0
'Script name: yourtheme.vbs 

'Object: Automate without command prompt the application of a Windows Theme by a VB script 

' 

'SCRIPT CONTENTS: 

'Define Variables : 

    Set ShellApp = CreateObject("Shell.Application") 
    Set WsShell = CreateObject("Wscript.Shell") 


' 

'Define path for your file theme (put it on a network share and don't forget to apply "read and execute" ACL for your Users) 

    Theme = "typeyoursharepath\typeyourtheme.theme" 
    Theme = """" + Theme + """" 


'Open Display Properties Windows, Select your theme and apply with keep focus on Windows 

    ShellApp.ControlPanelItem cstr("desk.cpl desk,@Themes /Action:OpenTheme /file:" & Theme) 
    Wscript.Sleep 100 
    WsShell.SendKeys "{ENTER}" 
    While WsShell.AppActivate ("Display Properties") = TRUE 
    WsShell.AppActivate "Display Properties" 
    Wend 


'END OF SCRIPT 

appliquée avec succès sur Windows XP et Windows Server 2003R2 X86, et sous Citix XenApp 4.6FP7 (OS: W2003R2X86 SP2) de Windows pour appliquer le thème intégré avec la couleur de fond bleu plus clair.

Convient parfaitement aux utilisateurs de session Citrix!

Intégré dans le GPO de configuration utilisateur lors de la connexion de l'utilisateur sous Citrix XenApp.

Questions connexes