2

VBScriptを使用してWindowsXPの外観と配色を変更する方法を知っている人はいますか?

Visual C ++で記述されたアプリケーションがあり、Windows XPの外観(クラシックではない)を正しく表示する必要があり、インストールからこのプロパティを設定したいと思います。

InstallShieldを使用してインストーラーを作成し、VBScriptを使用していくつかのカスタムアクションを実行します。したがって、このプロパティを変更するためのVisualBasicのスクリプトを作成できれば素晴らしいと思います。

4

4 に答える 4

2

個々の外観オプション(ウィンドウの色など)を変更する必要がある場合は、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 キーを押すと別のウィンドウに移動する可能性があるからです。また、[表示プロパティ] ダイアログのキャプションはロケールに依存します。

Windows XP SP1 以降では、themeui.dll ライブラリによって提供される APIを使用することもできますがTheme.Manager、XP SP2 では機能しないようです。とにかく、ここでサンプルコードを見つけることができます。

于 2009-06-23T18:53:16.907 に答える
1

私がしたことは、Install Shield でカスタム アクションとして使用する c++ dll を作成することでした。この 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;
}

完璧ではありませんが、必要なことは実行します。

これが他の誰かの助けになることを願っています...疑問がある場合は、遠慮なく私に尋ねてください。

乾杯。

于 2009-06-24T07:33:49.700 に答える
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 

Windows XP および Windows Server 2003R2 X86 に正常に適用され、Citix XenApp 4.6FP7 (OS: W2003R2X86 SP2) の下で、青色の背景色がより明るい Windows Embedded テーマが適用されました。

Citrix セッション ユーザーに最適です。

Citrix XenApp でのユーザー ログオン時のユーザー構成 GPO に統合されています。

于 2012-01-28T13:19:23.370 に答える