0

Windows 7 OS にインストールされている AERO テーマの情報 (ファイル名と実際のテーマ名) のリストを取得したいと考えています。

また、現在のテーマをインストール済みのテーマのいずれかに変更する必要がありますが、使用process.start(ThemeFile)しようとするとパーソナライズパネルが開くため、使用しません...

ファイル名を取得するためにインストールされたテーマファイルは次のとおりです:「C:\ Windows\Resources\Themes」

しかし、実際の名前も必要なので、そのディレクトリのファイルの内容を一覧表示するよりも良い方法があるかどうかを尋ねています。パーソナライゼーション パネルを開かずに現在のテーマを他のテーマに変更する方法を知りたいです。

これの例... 私の OS には Aero テーマが 2 つしかありません。

ファイル名は次のとおりです。

Aero.theme
Concave_seven.theme

ただし、パーソナライゼーション パネルに表示されるテーマ名は次のとおりです。

Windows 7
Concave 7

ファイル名と実際の名前を取得してリストボックスに保存し、現在のテーマを目的のテーマに変更したいと考えています。

更新,

私が試したこと...

 ' Load theme names
 For Each Theme As System.IO.FileInfo In New System.IO.DirectoryInfo(Environment.GetEnvironmentVariable("windir") & "\Resources\Themes").GetFiles("*theme")
    ComboBox1.Items.Add(Theme.ToString.Substring(0, Theme.ToString.Length - 6))
 Next

' Change theme
' Process.start(ThemeFilename)
' rundll32.exe Shell32.dll,Control_RunDLL desk.cpl desk,@Themes /Action:OpenTheme /File:"C:\Windows\Resources\Themes\aero.theme"
4

1 に答える 1

0

rundll32 などを使用してテーマ セレクターを開かずに現在のテーマを変更する方法を誰もが知っていたように、ここで私の個人的なトリックに進みます (これは Google やどこにもありません。純粋な運です)。

最初のステップ: DWMCOMPOSITION を無効にします。たとえば、「テーマ」サービスを無効にします。

2 番目のステップ: regkey を追加して目的の新しいテーマを指定し、.theme ファイルではなく msstyles ファイルを指定します。

私は個人的な関数でこれを行いますが、アイデアを得ることができます:

Reg_Set_Value("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager", "DllName", "C:\windows\resources\themes\aero\aero.msstyles", Microsoft.Win32.RegistryValueKind.String)

3 番目のステップ: DWM コンポジション (「テーマ」サービス) を再度有効にします。

出来上がり!

アップデート:

また、すべての配色が確実に更新されるようにするには、テーマを有効にする前に、この値を 0 に変更する必要があることに気付きました。

Reg_Set_Value("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager", "LoadedBefore", "0", Microsoft.Win32.RegistryValueKind.String)
于 2013-04-29T01:10:10.430 に答える