Изменить тему XP (внешний вид и цветовую схему) из VBScript - PullRequest
2 голосов
/ 30 марта 2009

Кто-нибудь знает, как изменить внешний вид и цветовую схему Windows XP с помощью VBScript?

У меня есть приложение, написанное на Visual C ++, для которого нужно правильно отображать внешний вид Windows XP (не классический), и я хочу установить эти свойства из Установки.

Я использую InstallShield для установки и VBScript для выполнения некоторых пользовательских действий. Поэтому было бы здорово, если бы я мог создать скрипт на Visual Basic для изменения этих свойств.

Ответы [ 4 ]

3 голосов
/ 31 марта 2009

Это должно сделать это:

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

Однако вам все равно нужно заставить пользователя нажать «ОК» или использовать другую утилиту, чтобы сделать это за вас.

2 голосов
/ 23 июня 2009

Если вам нужно изменить отдельные параметры внешнего вида (например, цвета окон), вы можете изменить соответствующие значения реестра в ключах HKEY_CURRENT_USER\Control Panel\Appearance и HKEY_CURRENT_USER\Control Panel\Colors. Например, этот код поменяет цвет фона окна на кремовый:

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

Обратите внимание, однако, что Windows, вероятно, будет применять изменения реестра только после перезагрузки.


Если вам нужно загрузить готовый файл .theme , вы можете использовать следующий код:

Const Theme = "C:\MyTheme.theme"

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

Хотя, как указывал sascha, это только вызовет диалоговое окно «Свойства экрана» с выбранной выбранной темой; вам все еще нужно, чтобы пользователь нажал OK или нажал Enter. Можно моделировать нажатия клавиш из кода скрипта, используя метод 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"

Но этот подход ненадежен, потому что пользователь может щелкнуть где-нибудь еще, чтобы Enter перешел в другое окно. Кроме того, заголовок диалогового окна «Свойства экрана» зависит от локали.

Другой вариант - использовать Theme.Manager API, предоставляемый библиотекой themeui.dll, начиная с Windows XP SP1, но, похоже, он не работает на XP SP2. В любом случае, вы можете найти образец кода здесь .

1 голос
/ 24 июня 2009

Я создал c ++ dll, который я использую в качестве настраиваемого действия в Install Shield. В этой dll я использую uxtheme.dll, чтобы установить файл luna.msstyle в качестве темы. Это функция, которая делает работу:

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

Это не идеально, но делает то, что мне нужно.

Я надеюсь, что это может помочь кому-то еще ... если у вас есть какие-либо сомнения, не стесняйтесь спрашивать меня.

Приветствие.

0 голосов
/ 28 января 2012
'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 

Успешно применяется в Windows XP и Windows Server 2003R2 X86, а также в Citix XenApp 4.6FP7 (ОС: W2003R2X86 SP2) для применения темы Windows Embedded с синим фоновым цветом, более светлым.

Отлично смотрится на сеансе Citrix!

Интегрировано в пользовательский конфигурационный объект групповой политики при входе пользователя в систему под Citrix XenApp.

...