Wie ermittle ich in VB.NET 2003 den systemweiten Font für Fenstertexte (Explorerliste)?

Antwort

Um in VB.NET 2003 den systemweiten Font für Fenstertexte (wie sie z.B. in Explorer-Listen verwendet werden) zu ermitteln, kannst du auf die SystemFonts-Klasse zugreifen. Allerdings ist die SystemFonts-Klasse erst ab .NET Framework 2.0 verfügbar. In .NET 1.1 (wie in VB.NET 2003 üblich) musst du auf die Win32-API zurückgreifen. Der relevante Font ist der sogenannte „Shell Font“ oder „System Font“, der für Fenstertexte verwendet wird. In der Regel ist das der Wert von `NONCLIENTMETRICS.lfMessageFont`. Hier ein Beispiel, wie du diesen Font mit P/Invoke ausliest: ```vb Imports System.Runtime.InteropServices Imports System.Drawing Public Class SystemFontHelper <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> Private Structure LOGFONT Public lfHeight As Integer Public lfWidth As Integer Public lfEscapement As Integer Public lfOrientation As Integer Public lfWeight As Integer Public lfItalic As Byte Public lfUnderline As Byte Public lfStrikeOut As Byte Public lfCharSet As Byte Public lfOutPrecision As Byte Public lfClipPrecision As Byte Public lfQuality As Byte Public lfPitchAndFamily As Byte <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> Public lfFaceName As String End Structure <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> Private Structure NONCLIENTMETRICS Public cbSize As Integer Public iBorderWidth As Integer Public iScrollWidth As Integer Public iScrollHeight As Integer Public iCaptionWidth As Integer Public iCaptionHeight As Integer <MarshalAs(UnmanagedType.Struct)> Public lfCaptionFont As LOGFONT Public iSmCaptionWidth As Integer Public iSmCaptionHeight As Integer <MarshalAs(UnmanagedType.Struct)> Public lfSmCaptionFont As LOGFONT Public iMenuWidth As Integer Public iMenuHeight As Integer <MarshalAs(UnmanagedType.Struct)> Public lfMenuFont As LOGFONT <MarshalAs(UnmanagedType.Struct)> Public lfStatusFont As LOGFONT <MarshalAs(UnmanagedType.Struct)> Public lfMessageFont As LOGFONT End Structure Private Const SPI_GETNONCLIENTMETRICS As Integer = 41 Private Const LF_FACESIZE As Integer = 32 <DllImport("user32.dll", CharSet:=CharSet.Auto)> Private Shared Function SystemParametersInfo( _ ByVal uAction As Integer, _ ByVal uParam As Integer, _ ByRef lpvParam As NONCLIENTMETRICS, _ ByVal fuWinIni As Integer) As Boolean End Function Public Shared Function GetWindowTextFont() As Font Dim ncm As New NONCLIENTMETRICS() ncm.cbSize = Marshal.SizeOf(ncm) If SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, ncm, 0) Then Dim lf As LOGFONT = ncm.lfMessageFont Return New Font(lf.lfFaceName, Math.Abs(lf.lfHeight), FontStyle.Regular) Else Return SystemFonts.DefaultFont End If End Function End Class ``` Verwendung: ```vb Dim sysFont As Font = SystemFontHelper.GetWindowTextFont() MessageBox.Show("System-Font: " & sysFont.Name & ", Größe: " & sysFont.Size) ``` **Hinweis:** - In neueren .NET-Versionen kannst du einfach `SystemFonts.MessageBoxFont` oder ähnliche Eigenschaften verwenden. - In VB.NET 2003 ist der oben gezeigte Weg über die Win32-API notwendig. Weitere Infos: - [Microsoft Doku zu SystemParametersInfo](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-systemparametersinfoa) - [SystemFonts-Klasse (ab .NET 2.0)](https://learn.microsoft.com/en-us/dotnet/api/system.drawing.systemfonts)

KI fragen

Verwandte Fragen

Warum erzeugt thumb.Dispose() in VB.NET 2003 nach Verwendung den Fehler 'ungültige Parameter verwendet'?

Der Fehler „Ungültige Parameter verwendet“ beim Aufruf von `thumb.Dispose()` in VB.NET 2003 (bzw. .NET Framework 1.1) tritt häufig auf, wenn das `thumb`-Objekt (vermutlich ein `S... [mehr]

Wann und wie muss man in VB.NET 2003 ein erstelltes Thumbnail disposen?

In VB.NET 2003 (also .NET Framework 1.1) ist das Ressourcenmanagement bei Objekten wie Bildern und Thumbnails besonders wichtig, da diese oft nicht verwaltete Ressourcen (z.B. GDI-Handles) verwenden.... [mehr]

Wie erstelle ich in VB.NET 2003 ein Thumbnail eines Bildes zur Weiterverwendung?

Um in VB.NET 2003 ein Thumbnail eines Bildes zu erstellen und zur Weiterverwendung bereitzustellen, kannst du die Methoden der `System.Drawing`-Bibliothek nutzen. Hier ein einfaches Beispiel, wie du e... [mehr]

Was ist der Unterschied zwischen frm.Resize und frm.SizeChanged in VB.NET 2003?

In VB.NET 2003 gibt es einen wichtigen Unterschied zwischen den Ereignissen `Resize` und `SizeChanged` eines Formulars (`Form`): **1. Resize-Ereignis (`frm.Resize`):** - Dieses Ereignis wird ausgel&o... [mehr]

Was ist das Gegenteil von Path.Combine(...) in VB.NET 2003?

In VB.NET 2003 ist das Gegenteil von `Path.Combine(...)` das Zerlegen eines zusammengesetzten Dateipfads in seine Einzelteile (Verzeichnisse und Dateiname). Während `Path.Combine` mehrere Teile z... [mehr]

Gibt es ‚Path.GetFileName‘ in VB.NET 2003?

Richtig, in VB.NET 2003 (also .NET Framework 1.1) gibt es die Methode `Path.GetFileName` bereits, aber möglicherweise hast du einen Fehler im Code oder im Import der Namespaces. So funktioniert... [mehr]

Gibt es fertigen Code für einen selbstgebauten FileDialog in VB.NET 2003 und wie lautet dieser?

Für VB.NET 2003 gibt es keinen offiziellen, fertigen Code für einen komplett selbstgebauten FileDialog, da normalerweise der Standarddialog (`OpenFileDialog`, `SaveFileDialog`) verwendet wir... [mehr]

Gibt es einen Weg, die Dateiansicht (View) aus einer VB.NET 2003-App heraus zu ändern?

Ja, es ist möglich, die Dateiansicht (View) eines Datei-Dialogs (z. B. OpenFileDialog oder SaveFileDialog) in einer VB.NET 2003-Anwendung zu ändern – allerdings nur mit Einschränk... [mehr]

Kann man in der IDE von VB.NET 2023 nachträglich den Namen der zu kompilierenden EXE-Datei ändern?

Ja, in der IDE von VB.NET (Visual Studio) kannst du den Namen der zu kompilierenden EXE-Datei nachträglich ändern. Das geht folgendermaßen: 1. **Projektmappen-Explorer öffnen:**... [mehr]

Warum werden ä, ö, ü und ß beim Speichern einer RichTextBox in VB.NET 2003 als type.plaintext nicht korrekt gespeichert?

Das Problem, dass deine `RichTextBox` in VB.NET 2003 beim Speichern als `type.plaintext` die Zeichen **ä, ö, ü** und **ß** „verschluckt“, liegt sehr wahrscheinlich an... [mehr]