2011-07-09 19 views
5

Windows 7, çeşitli yerleşik temalarla birlikte gelir. Masaüstünü sağ tıklayıp Kişiselleştir'i seçerek erişilebilirler. Kişiselleştir altında, "Mimari" "Doğa" ve benzeri gibi temalar içeren "Aero Temalar" bölüm adları vardır.Windows 7 tema adı nasıl edinilir

Ben uxtheme.dll en GetCurrentThemeName kullanarak çalıştı, ama aslında stil adını veriyor: : Mevcut temamın, Windows Basic ayarlanmadığı sürece "C \ Windows \ kaynaklar \ Temalar Aero \ Aero.msstyles \", bu durumda boş bir dize döndürür. "Doğa" "Mimari" vb. Gibi tema ismini döndüren bir API var mı?

[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

Bir kayıt defteri anahtarı buldum: Bir girdi içeren HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Temalar: Tema dosya adıyla doldurulmuş "CurrentTheme", orijinalimde adı geçen missnamed API gibi tema görsel stilleri değil sonrası. Örneğin, Doğa Teması için, değeri alır: "C: \ Windows \ resources \ Themes \ nature.theme" bu, ayrıştırmak ve adı almak için gerçekten yeterince iyi. Tabii ki, tema dosyasının adı UI'daki gerçek tema görünen adıyla uyuşmazsa bir sorun olur, ancak bu senaryoyu asla sınırlı senaryoda asla vurmayacağım. – user577240

+1

Genellikle, uygulama ayrıntılarının başka herhangi bir şeyden daha fazla olması nedeniyle, kayıt defterinin etrafında dolaşmak genellikle iyi bir fikir değildir. [Brian Dishaw'un bahsettiği gibi] (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) istediğiniz şeyi yapıyor gibi görünüyor. –

+0

Teşekkürler beyler. Bu kadar. – user577240

cevap

2

o aradığınız şey olabilir GetThemeDocumentationProperty benziyor MSDN belgelerine bir göz aldıktan sonra şu şekildedir:

Denedim kodudur.

SZ_THDOCPROP_DISPLAYNAME içinde yöntemin ikinci parametresi olarak geçerek yanı sıra tema dosyasında (alreayd'in kayıtta bulduğu) birlikte kullanmak isteyeceksiniz. yardımcı olur http://www.java2s.com/Open-Source/CSharp/2.6.4-mono-.net-core/System.Windows.Forms/System/Windows/Forms/VisualStyles/UXTheme.cs.htm

Umut: Burada ek olarak

p C# yöntemi kurdelelesini bir sitedir/çağrıyı çağırmak.