2011-07-09 12 views
5

Windows 7にはいくつかのビルトインテーマが付属しています。デスクトップに右クリックし、「パーソナライズ」を選択するとアクセスできます。パーソナライズの下には、 "Architecture" "Nature"などのテーマを含むセクション名 "Aero Themes"があります。Windows 7のテーマ名を取得する方法

私はuxtheme.dllのGetCurrentThemeNameを使用してみましたが、それは実際にスタイル名を与えている: 「C:\ WINDOWS \資源エアロ\ Aero.msstyles \ \テーマ」私の現在のテーマが、その場合には、Windowsの基本に設定されていない限り、空の文字列を返します。 "Nature" "Architecture"などのテーマ名を実際に返すAPIがありますか?

[DllImport("uxtheme", ExactSpelling = true, CharSet = CharSet.Unicode)] 
public extern static Int32 GetCurrentThemeName(StringBuilder stringThemeName, 
    int lengthThemeName, StringBuilder stringColorName, int lengthColorName, 
    StringBuilder stringSizeName, int lengthSizeName); 

    StringBuilder stringThemeName = new StringBuilder(260); 
    StringBuilder stringColorName = new StringBuilder(260); 
    StringBuilder stringSizeName = new StringBuilder(260); 

    Int32 s = GetCurrentThemeName(stringThemeName, 260,stringColorName, 260,stringSizeName, 260); 
+1

レジストリキー:HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Themesエントリが含まれています:テーマファイル名で作成された "CurrentTheme"役職。たとえば、Nature Themeの場合、値を取得します。「C:\ Windows \ resources \ Themes \ nature.theme」です。これは、解析して名前を取得するのに十分です。もちろん、テーマのファイル名がUIの実際のテーマ表示名と一致しない場合には問題はありますが、限られたシナリオではそのケースに当てはまることはありません。 – user577240

+1

レジストリの周りを潜んでいるのは、一般的には良いアイデアではありません。 [Brian Dishawが言及したように](http://stackoverflow.com/questions/6631796/how-to-get-the-windows-7-theme-name/6632887#6632887)、['GetThemeDocumentationProperty()'](http ://msdn.microsoft.com/en-us/library/bb773402.aspx)は、あなたが望むことをするようです。 –

+0

ありがとう。それでおしまい。 – user577240

答えて

2

を、それはあなたが探しているものかもしれないGetThemeDocumentationPropertyのように見えるMSDNのドキュメントを見て取った後、次のよう

私が試したコードです。

テーマファイル(レジストリで見つけたもの)と一緒に使用すると同時に、メソッドの2番目のパラメータとしてSZ_THDOCPROP_DISPLAYNAMEを渡して使用します。 http://www.java2s.com/Open-Source/CSharp/2.6.4-mono-.net-core/System.Windows.Forms/System/Windows/Forms/VisualStyles/UXTheme.cs.htm

希望に役立ちます。ここでまた

は、p /呼び出しコールのためのC#のメソッドのラッパーを持っているサイトです。

関連する問題