2011-07-09 88 views
5

Windows 7帶有幾個內置主題。可以通過右鍵單擊桌面並選擇「個性化」來訪問它們。在Personalize下,有一個名爲「Aero Themes」的部分,其中包含「Architecture」,「Nature」等主題。如何獲取Windows 7主題名稱

我試着用的uxtheme.dll的GetCurrentThemeName,但它實際上是給樣式名稱: 「C:\ WINDOWS \資源\主題\航空\ Aero.msstyles」除非我的當前主題設置爲Windows基礎,在這種情況下,它返回一個空字符串。有沒有實際返回主題名稱的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」,其中填充了主題文件名,而不是主題視覺樣式,如我原始提到的錯誤提及的API帖子。例如,對於自然主題,它的價值是:「C:\ Windows \ resources \ Themes \ nature.theme」,這對我來說是非常好的解析並獲得名稱。當然,如果主題的文件名與UI中的實際主題顯示名稱不匹配,則會出現問題,但在有限的情況下,我絕不會遇到這種情況。 – user577240

+1

因爲它比實現更多的是實現細節,所以它通常不是一個好主意。正如[布萊恩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

考慮看看MSDN文檔看起來GetThemeDocumentationProperty可能是你在找什麼後。

您需要將它與主題文件(您在註冊表中找到的主題文件)一起使用,並將SZ_THDOCPROP_DISPLAYNAME作爲方法的第二個參數傳遞。

另外這裏是具有用於p C#的方法包裝一個網站/調用電話:http://www.java2s.com/Open-Source/CSharp/2.6.4-mono-.net-core/System.Windows.Forms/System/Windows/Forms/VisualStyles/UXTheme.cs.htm

希望有所幫助。