Anpassen der Titelzeile einer WinForms-Form
Hallo @all,
ich suche eine Funktionalität zum Anpassen der Titelzeile einer (Win11-)WinForms-Form.
Konkret soll die Hintergrundfarbe geändert werden.
Bisheriger Ansatz klappt leider nur in Win10. Ich such etwas ähnliches für Win11.
(In VB.Net oder C#)
Leider habe ich nix brauchbares gefunden.
Danke für Eure Hilfe.
SH
ich suche eine Funktionalität zum Anpassen der Titelzeile einer (Win11-)WinForms-Form.
Konkret soll die Hintergrundfarbe geändert werden.
Bisheriger Ansatz klappt leider nur in Win10. Ich such etwas ähnliches für Win11.
(In VB.Net oder C#)
Imports System.Runtime.InteropServices
Public Class FormTest
Inherits Form
<DllImport("user32.dll", SetLastError:=True)>
Private Shared Function SetWindowCompositionAttribute(hWnd As IntPtr, ByRef data As WindowCompositionAttributeData) As Integer
End Function
<StructLayout(LayoutKind.Sequential)>
Private Structure AccentPolicy
Public nAccentState As Integer
Public nFlags As Integer
Public nColor As Integer
Public nAnimationId As Integer
End Structure
<StructLayout(LayoutKind.Sequential)>
Private Structure WindowCompositionAttributeData
Public Attribute As Integer
Public Data As IntPtr
Public SizeOfData As Integer
End Structure
Private Const WCA_ACCENT_POLICY As Integer = 19
Private Const ACCENT_ENABLE_BLURBEHIND As Integer = 3
Public Sub New()
InitializeComponent()
SetTitleBarColor(Color.FromArgb(1, 93, 109)) ' Aufruf der Funktion, um die Farbe der Titelleiste zu ändern
End Sub
Private Sub SetTitleBarColor(color As Color)
Dim accent As New AccentPolicy()
Dim accentStructSize As Integer = Marshal.SizeOf(accent)
accent.nAccentState = ACCENT_ENABLE_BLURBEHIND
accent.nFlags = 2
accent.nColor = ColorToABGR(color)
Dim accentPtr As IntPtr = Marshal.AllocHGlobal(accentStructSize)
Marshal.StructureToPtr(accent, accentPtr, False)
Dim data As New WindowCompositionAttributeData()
data.Attribute = WCA_ACCENT_POLICY
data.SizeOfData = accentStructSize
data.Data = accentPtr
Dim hWnd As IntPtr = Me.Handle
SetWindowCompositionAttribute(hWnd, data)
Marshal.FreeHGlobal(accentPtr)
End Sub
Private Function ColorToABGR(color As Color) As Integer
Return (CInt(color.A) << 24) Or (CInt(color.B) << 16) Or (CInt(color.G) << 8) Or CInt(color.R)
End Function
End Class
Danke für Eure Hilfe.
SH
Please also mark the comments that contributed to the solution of the article
Content-ID: 22839481907
Url: https://administrator.de/contentid/22839481907
Printed on: November 11, 2024 at 10:11 o'clock
2 Comments
Latest comment
Beispiel mit Powershell um z.B. den Titel des PS Fensters gelb zu machen , kannst du dir ja selbst auf C# ummünzen (klappt hier unter Windows 11)
Doku
https://learn.microsoft.com/de-de/windows/win32/api/dwmapi/nf-dwmapi-dwm ...
https://learn.microsoft.com/de-de/windows/win32/api/dwmapi/ne-dwmapi-dwm ...
https://stackoverflow.com/questions/39261826/change-the-color-of-the-tit ...
Beispiel für Notepad Fenster
Add-Type -MemberDefinition '[DllImport("dwmapi.dll")] public static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int attrValue, int attrSize);'-Namespace my -Name tools
$color = 0x0050ffff
$handle = (Get-Process -id $PID).MainWindowHandle
[void][my.tools]::DwmSetWindowAttribute($handle,35,[ref]$color,[System.Runtime.InteropServices.Marshal]::SizeOf($color))
pause
https://learn.microsoft.com/de-de/windows/win32/api/dwmapi/nf-dwmapi-dwm ...
https://learn.microsoft.com/de-de/windows/win32/api/dwmapi/ne-dwmapi-dwm ...
https://stackoverflow.com/questions/39261826/change-the-color-of-the-tit ...
Beispiel für Notepad Fenster
Add-Type -MemberDefinition '[DllImport("dwmapi.dll")] public static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int attrValue, int attrSize);'-Namespace my -Name tools
$color = 0x0050ffff
$handle = (Get-Process -name Notepad).MainWindowHandle
[void][my.tools]::DwmSetWindowAttribute($handle,35,[ref]$color,[System.Runtime.InteropServices.Marshal]::SizeOf($color))