Rehber C# dili ile yazılan programda başlık çubuğu (titlebar) rengini değiştirme

Merhaba

Bugün sizlerle birlikte C# dili ile, yani Form veya WPF olarak yazılmış bir yazılımın titlebar, yani başlık çubuğu rengini değiştirmeyi göstereceğim.

Bildiğiniz üzere bir program yazınca başlık çubuğu rengi bu şekilde gözüküyor.



Özellikle koyu tema bir yazılım geliştirdiğiniz zaman sinir bozucu olabiliyor.

Normalde varsayılan olarak WinForm bunu desteklemez. Hatta çoğu zaman WPF'de tam olarak desteklemez.

O yüzden DWM (Desktop Window Manager) API kullanacağız. Bu API, Windows'un kendi içinde yer alan bir API'dir.

Şimdi başlık çubuğu rengini değiştirelim.

Not:
Bu yapacağımız renk değiştirme işlemleri sadece Windows 10 ve 11'de çalışır.

Gerekli kütüphaneler;
C#:
using System;
using System.Windows.Forms; // WPF ise gerekli değil.
using System.Runtime.InteropServices;

Öncelike Form'un global alanına ilgili kodu yazmanız lazım.


C#:
// ======================================================================================================
// TITLE BAR SETTINGS DWM API - TECHNOPAT SOSYAL
[DllImport("DwmApi")]
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize);

Ardından Form veya WPF programının Load (Form) veya Start (WPF) işlemine altta verdiğim kodu yazmanız gerekiyor.


C#:
try{
    if (DwmSetWindowAttribute(Handle, 19, new[]{ 1 }, 4) != 0){
        DwmSetWindowAttribute(Handle, 20, new[]{ 1 }, 4);
    }
}catch(Exception){ }

Bu kod titlebar, yani başlık çubuğu rengi beyaz ise rengini siyaha çevirir. Ardından metin ve pencere boyutlandırma renklerini beyaza çeviriyor.



Gördüğünüz üzere, artık başlık çubuğu rengi siyah oldu.

Umarım işinize yaramıştır.
Yazılım rehberlerimin devamı gelecek.

İyi çalışmalar, kolay gelsin
 
Son düzenleme:
Tekrar merhaba size bir sorum olacaktı. Bazı programların pencere sistemi çok gelişmiş, dinamik ve düzenlenebilir oluyor (Unreal E., Adobe Programları,Blender gibi) visual studio da böyle düzenlenebilir arayüzler yapmak mümkünmüdür yoksa görsel olarak değilde en baştan kod olarakmı yazmak lazım?
 
Mümkün tabii ki. Kodlama bilginiz yeterince iyiyse rahat bir şekilde yapabilirsiniz.
 
Çok yararlı bir rehber olmuş. C# dilini ilk öğrendiğim zamanlar kendimi biraz geliştirdikten sonra havalı bir program yazmak istemiştim ancak 2 saat boyunca titlebar rengini yapmaya çalışmıştım o zamanlar stackedoverflowdan haberim yoktu ve her kaynakta başka class veya başka public kullandıkları için zorlanmıştım. Sonuç olarak kendi titlebarımı yapmıştım. Anlatım biçimi hoşuma gitti. Kendi titlebarımızı yapmak içinde bir rehber hazırlayabilirsiniz.

Çaktırmayın bu titlebar rengini ayarlama işini şimdi bu rehberden öğrendim bende.
 
Geri beyaz haline çevirmek isterseniz eğer alttaki kod ile değiştirebilirsiniz;

C#:
try{ if (DwmSetWindowAttribute(Handle, 20, new[]{ 1 }, 4) != 1){ DwmSetWindowAttribute(Handle, 20, new[]{ 0 }, 4); } }catch (Exception){ }
 
Günümüz teknolojisinde bu rehberdekiler zaten kullanılmıyor. WinForm veya WPF ile sadece vakit kaybedersiniz. UWP ve bir sonraki nesil Windows APP SDK olarak gözüküyor.

 
Hocam peki burada rengi siyah değil de kendimiz verebiliyor muyuz? Kırmızı,mor gibi değiştirmek mesela.
 
@BayCoder denemedim doğrusu. Mutlaka veriliyordur. Ancak henüz bilmiyorum ben, araştıracağım müsait olunca.
 
C ya da C++ ile yapmak isteyenler:
C:
HMODULE module = LoadLibrary("dwmapi.dll");
if(module == NULL)
{
    MessageBox(NULL, "dwmapi.dll bulunamadi", "Hata", MB_OK | MB_ICONERROR);
    ExitProcess(1);
}

FARPROC ProcDwmSetWindowAttribute = GetProcAddress(module, "DwmSetWindowAttribute");
if(ProcDwmSetWindowAttribute == NULL)
{
    MessageBox(NULL, "dwmapi.dll icinde DwmSetWindowAttribute bulunamadi", "Hata", MB_OK | MB_ICONERROR);
    ExitProcess(1);
}
    
DWORD pvAttribute[] = {1};
if(ProcDwmSetWindowAttribute(hwnd, 19, pvAttribute, 4) != 0)
{
    ProcDwmSetWindowAttribute(hwnd, 20, pvAttribute, 4);
}
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…