URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

Windowsの視覚効果をグループポリシーで管理する

 Active Directoryのグループポリシーではレジストリの設定をコンピュータやユーザーに強制することができますが、設定が煩雑になりがちです。
 そのため、よく使う内容はテンプレート化しておくと便利だと思っており、以前のADM形式のものはそこそこ作っていました。しかし、ADMX/ADML形式になってからはあまり手を付けずに時間が経ってしまった次第。
 最近、ちょっとしたきっかけもあり、やはりテンプレートは作れるようにしておこうと重い腰を上げました。

 メインテーマとしてはADMX/ADMLファイルのお勉強です。

 グループポリシーのテンプレートは"C:\Windows\PolicyDefinitions"に配置されており、設定するレジストリ等を定義するADMXファイルと、各国語のUIに表示される内容を定義するADMLファイルで構成されています。
 今回は自分で使うので日本語表示のみを考えます。

 Windowsの視覚効果の設定は(バージョンによって動きが違うかもしれませんが)結構ややこしくて、「デザインを優先する」とか「パフォーマンスを優先する」という部分のラジオボタンに対応するレジストリを変更しても実際には何も変わりません。
 そのため、カスタムの下にある詳細項目に対応するレジストリをそれぞれ設定する必要があるのですが、この設定箇所もいろんな所に散らばっている上、複数の設定が一つのバイナリ値になっていたりします。
 その辺は検索すれば情報は見つかると思うので割愛して、各項目の有効/無効を切り替えるポリシーを以下のような内容で作成しました。

C:\Windows\PolicyDefinitions\VisualEffects.admx

<?xml version="1.0" encoding="utf-8"?> <policyDefinitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinition" revision="1.1" schemaVersion="1.0" > <policyNamespaces> <target prefix="VisualEffects" namespace="Workstg.Policies.VisualEffects" /> <using prefix="windows" namespace="Microsoft.Policies.Windows" /> </policyNamespaces> <resources minRequiredRevision="1.0" /> <categories> <category name="String_Cat_VisualEffects" displayName="$(string.String_Cat_VisualEffects)" explainText="$(string.String_Cat_VisualEffects)" /> </categories> <policies> <policy name="String_Pref_Perf" class="User" displayName="$(string.String_Pref_Perf)" explainText="$(string.String_Pref_Perf_Help)" presentation="$(presentation.Presentation_Pref_Perf_List)" key="Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects"> <parentCategory ref="String_Cat_VisualEffects" /> <supportedOn ref="windows:SUPPORTED_WindowsVista" /> <elements> <enum id="Presentation_Pref_Perf_List_Item" valueName="VisualFXSetting" required="true"> <item displayName="$(string.String_Pref_Perf_0)"> <value> <decimal value="0" /> </value> </item> <item displayName="$(string.String_Pref_Perf_1)"> <value> <decimal value="1" /> </value> </item> <item displayName="$(string.String_Pref_Perf_2)"> <value> <decimal value="2" /> </value> </item> <item displayName="$(string.String_Pref_Perf_3)"> <value> <decimal value="3" /> </value> </item> </enum> </elements> </policy> <policy name="String_UserPreferencesMask" class="User" displayName="$(string.String_UserPreferencesMask)" explainText="$(string.String_UserPreferencesMask_Help)" presentation="$(presentation.Presentation_UserPreferencesMask_List)" key="Control Panel\Desktop"> <parentCategory ref="String_Cat_VisualEffects" /> <supportedOn ref="windows:SUPPORTED_WindowsVista" /> <elements> <enum id="Presentation_UserPreferencesMask_List_Item" valueName="UserPreferencesMask" required="true"> <item displayName="$(string.String_UserPreferencesMask_0)"> <value> <longDecimal value="70867030672" /> </value> </item> <item displayName="$(string.String_UserPreferencesMask_1)"> <value> <longDecimal value="70867169936" /> </value> </item> <item displayName="$(string.String_UserPreferencesMask_2)"> <value> <longDecimal value="70867423888" /> </value> </item> </enum> </elements> </policy> <policy name="String_FontSmoothing" class="User" displayName="$(string.String_FontSmoothing)" explainText="$(string.String_FontSmoothing_Help)" key="Control Panel\Desktop" valueName="FontSmoothing"> <parentCategory ref="String_Cat_VisualEffects" /> <supportedOn ref="windows:SUPPORTED_WindowsVista" /> <enabledValue> <string>0</string> </enabledValue> <disabledValue> <string>2</string> </disabledValue> </policy> <policy name="String_DragFullWindows" class="User" displayName="$(string.String_DragFullWindows)" explainText="$(string.String_DragFullWindows_Help)" key="Control Panel\Desktop" valueName="DragFullWindows"> <parentCategory ref="String_Cat_VisualEffects" /> <supportedOn ref="windows:SUPPORTED_WindowsVista" /> <enabledValue> <string>0</string> </enabledValue> <disabledValue> <string>1</string> </disabledValue> </policy> <policy name="String_MinAnimate" class="User" displayName="$(string.String_MinAnimate)" explainText="$(string.String_MinAnimate_Help)" key="Control Panel\Desktop\WindowMetrics" valueName="MinAnimate"> <parentCategory ref="String_Cat_VisualEffects" /> <supportedOn ref="windows:SUPPORTED_WindowsVista" /> <enabledValue> <string>0</string> </enabledValue> <disabledValue> <string>1</string> </disabledValue> </policy> <policy name="String_IconsOnly" class="User" displayName="$(string.String_IconsOnly)" explainText="$(string.String_IconsOnly_Help)" key="Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" valueName="IconsOnly"> <parentCategory ref="String_Cat_VisualEffects" /> <supportedOn ref="windows:SUPPORTED_WindowsVista" /> <enabledValue> <decimal value="1" /> </enabledValue> <disabledValue> <decimal value="0" /> </disabledValue> </policy> <policy name="String_TaskbarAnimations" class="User" displayName="$(string.String_TaskbarAnimations)" explainText="$(string.String_TaskbarAnimations_Help)" key="Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" valueName="TaskbarAnimations"> <parentCategory ref="String_Cat_VisualEffects" /> <supportedOn ref="windows:SUPPORTED_WindowsVista" /> <enabledValue> <decimal value="0" /> </enabledValue> <disabledValue> <decimal value="1" /> </disabledValue> </policy> <policy name="String_ListviewShadow" class="User" displayName="$(string.String_ListviewShadow)" explainText="$(string.String_ListviewShadow_Help)" key="Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" valueName="ListviewShadow"> <parentCategory ref="String_Cat_VisualEffects" /> <supportedOn ref="windows:SUPPORTED_WindowsVista" /> <enabledValue> <decimal value="0" /> </enabledValue> <disabledValue> <decimal value="1" /> </disabledValue> </policy> <policy name="String_ListviewAlphaSelect" class="User" displayName="$(string.String_ListviewAlphaSelect)" explainText="$(string.String_ListviewAlphaSelect_Help)" key="Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" valueName="ListviewAlphaSelect"> <parentCategory ref="String_Cat_VisualEffects" /> <supportedOn ref="windows:SUPPORTED_WindowsVista" /> <enabledValue> <decimal value="0" /> </enabledValue> <disabledValue> <decimal value="1" /> </disabledValue> </policy> <policy name="String_ThemeActive" class="User" displayName="$(string.String_ThemeActive)" explainText="$(string.String_ThemeActive_Help)" key="Software\Microsoft\Windows\CurrentVersion\ThemeManager" valueName="ThemeActive"> <parentCategory ref="String_Cat_VisualEffects" /> <supportedOn ref="windows:SUPPORTED_WindowsVista" /> <enabledValue> <string>0</string> </enabledValue> <disabledValue> <string>1</string> </disabledValue> </policy> <policy name="String_EnableAeroPeek" class="User" displayName="$(string.String_EnableAeroPeek)" explainText="$(string.String_EnableAeroPeek_Help)" key="Software\Microsoft\Windows\DWM" valueName="EnableAeroPeek"> <parentCategory ref="String_Cat_VisualEffects" /> <supportedOn ref="windows:SUPPORTED_WindowsVista" /> <enabledValue> <decimal value="0" /> </enabledValue> <disabledValue> <decimal value="1" /> </disabledValue> </policy> <policy name="String_AlwaysHibernateThumbnails" class="User" displayName="$(string.String_AlwaysHibernateThumbnails)" explainText="$(string.String_AlwaysHibernateThumbnails_Help)" key="Software\Microsoft\Windows\DWM" valueName="AlwaysHibernateThumbnails"> <parentCategory ref="String_Cat_VisualEffects" /> <supportedOn ref="windows:SUPPORTED_WindowsVista" /> <enabledValue> <decimal value="0" /> </enabledValue> <disabledValue> <decimal value="1" /> </disabledValue> </policy> <policy name="String_CompositionPolicy" class="User" displayName="$(string.String_CompositionPolicy)" explainText="$(string.String_CompositionPolicy_Help)" key="Software\Microsoft\Windows\DWM" valueName="CompositionPolicy"> <parentCategory ref="String_Cat_VisualEffects" /> <supportedOn ref="windows:SUPPORTED_WindowsVista" /> <enabledValue> <decimal value="0" /> </enabledValue> <disabledValue> <decimal value="2" /> </disabledValue> </policy> <policy name="String_ColorizationOpaqueBlend" class="User" displayName="$(string.String_ColorizationOpaqueBlend)" explainText="$(string.String_ColorizationOpaqueBlend_Help)" key="Software\Microsoft\Windows\DWM" valueName="ColorizationOpaqueBlend"> <parentCategory ref="String_Cat_VisualEffects" /> <supportedOn ref="windows:SUPPORTED_WindowsVista" /> <enabledValue> <decimal value="0" /> </enabledValue> <disabledValue> <decimal value="1" /> </disabledValue> </policy> </policies> </policyDefinitions>

 <categories>の部分がグループポリシーエディタで読み込んだ時に配置される場所、
 <policies>の配下がレジストの内容と有効や無効にしたときの値を記述しているところです。"UserPreferencesMask"の設定はちょっと苦しいか…。

 また、"$(string.String_Cat_VisualEffects)"のようになっているところがADMLファイルから読み込む内容になります。
 ADMLファイルは言語ごとに準備してOSの言語によって適当なものが呼び出されると思うのですが、今回は日本語環境だけなので、"ja-JP"フォルダの下に配置します。

C:\Windows\PolicyDefinitions\ja-JP\VisualEffects.adml

<?xml version="1.0" encoding="utf-8"?> <policyDefinitionResources xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinition" revision="1.0" schemaVersion="1.0"> <displayName >ここに表示名を入力</displayName> <description >ADMX ファイルの説明を入力</description> <resources> <stringTable> <string id="String_Cat_VisualEffects">Windows 視覚効果</string> <string id="String_Pref_Perf">視覚効果を設定する</string> <string id="String_Pref_Perf_Help">「システムの詳細設定」で視覚効果を設定します。ただし、実際に反映するには詳細項目の設定が必要です。 元に戻す場合はこのカテゴリーの項目を全て「未構成」に設定し、各ユーザーで視覚効果を設定してください。</string> <string id="String_Pref_Perf_0">最適なものを自動的に選択する</string> <string id="String_Pref_Perf_1">デザインを優先する</string> <string id="String_Pref_Perf_2">パフォーマンスを優先する</string> <string id="String_Pref_Perf_3">カスタム</string> <string id="String_UserPreferencesMask">デスクトップの視覚効果を無効</string> <string id="String_UserPreferencesMask_Help">以下の視覚効果を無効にします。 「Windows内のアニメーションコントロールと要素」 「ウィンドウの下に影を表示する」★ 「コンボボックスをスライドして開く」 「ヒントをフェードまたはスライドで表示する」 「マウスポインターの下に影を表示する」※ 「メニューをフェードまたはスライドして表示する」 「メニュー項目をクリック後にフェードアウトする」 「リストボックスを滑らかにスクロールする」</string> <string id="String_UserPreferencesMask_0">全て無効</string> <string id="String_UserPreferencesMask_1">※のみ有効</string> <string id="String_UserPreferencesMask_2">★のみ有効</string> <string id="String_FontSmoothing">フォントスムージングを無効化</string> <string id="String_FontSmoothing_Help">「スクリーンフォントの縁を滑らかにする」を無効にします。</string> <string id="String_DragFullWindows">ドラッグウインドウ表示を無効化</string> <string id="String_DragFullWindows_Help">「ドラッグ中にウィンドウの内容を表示する」を無効にします。</string> <string id="String_MinAnimate">ウインドウアニメーションを無効化</string> <string id="String_MinAnimate_Help">「ウィンドウを最大化や最小化するときにアニメーションで表示する」を無効にします。</string> <string id="String_IconsOnly">サムネイル表示を無効化</string> <string id="String_IconsOnly_Help">「アイコンの代わりに縮小版を表示する」を無効にします。</string> <string id="String_TaskbarAnimations">タスクバーアニメーションの無効化</string> <string id="String_TaskbarAnimations_Help">「タスクバーとスタートメニューでアニメーションを表示する」を無効にします。</string> <string id="String_ListviewShadow">アイコン名の影を無効化</string> <string id="String_ListviewShadow_Help">「デスクトップのアイコン名に影を付ける」を無効にします。</string> <string id="String_ListviewAlphaSelect">半透明の選択ツールを無効化</string> <string id="String_ListviewAlphaSelect_Help">「半透明の[選択]ツールを表示する」を無効にします。</string> <string id="String_ThemeActive">ウインドウとボタンの視覚スタイルを無効化</string> <string id="String_ThemeActive_Help">「ウィンドウとボタンに視覚スタイルを使用する」を無効にします。 (Windows 10 では非サポート)</string> <string id="String_EnableAeroPeek">プレビューを無効化</string> <string id="String_EnableAeroPeek_Help">「Aeroプレビューを有効にする」を無効にします。</string> <string id="String_AlwaysHibernateThumbnails">タスクバーのプレビューを無効化</string> <string id="String_AlwaysHibernateThumbnails_Help">「タスクバーの縮小版のプレビューを保存する」を無効にします。</string> <string id="String_CompositionPolicy">デスクトップコンポジションを無効化</string> <string id="String_CompositionPolicy_Help">「デスクトップコンポジションを有効にする」を無効にします。 (Windows 10 では非サポート)</string> <string id="String_ColorizationOpaqueBlend">透明感を無効化</string> <string id="String_ColorizationOpaqueBlend_Help">「透明感を有効にする」を無効にします。 (Windows 10 では非サポート)</string> </stringTable> <presentationTable> <presentation id="Presentation_UserPreferencesMask_List"> <dropdownList refId="Presentation_UserPreferencesMask_List_Item" defaultItem="0" noSort="true">設定値:</dropdownList> </presentation> <presentation id="Presentation_Pref_Perf_List"> <dropdownList refId="Presentation_Pref_Perf_List_Item" defaultItem="0" noSort="true">設定値:</dropdownList> </presentation> </presentationTable> </resources> </policyDefinitionResources>

 ファイルの配置と書式が間違っていなければ、こんな感じで読み込めるはず、



 あとは実際に適用してレジストリが変更されていれば成功です。
 ただ、視覚効果の設定はポリシーが適用された(=レジストリが変更された)後でログインし直さないと反映されなかったりと、動きはいまいちです。

 ひとままず基本的なものはできたけど、設定内容のカスタマイズ(テキストボックスとかチェックボックス等)や、いろいろ切り替えたときの整合性を考慮したりとか、考えることはまだまだ多そう。
 まだ使っていない書式を試してみなければ。