Wie immer beim Einsatz von API-Routinen müssen Sie auch diese Funktion zunächst mit der Declare-Anweisung deklarieren. Allen nachfolgenden Beispielen liegt die Deklaration in Listing 1 (siehe nächste Seite) zugrunde. Der Wert, den Sie als Parameter nIndex an die Funktion übergeben, legt fest, welche Bedeutung der Rückgabewert hat.
Bildschirmauflösung ermitteln
Die Bildschirmauflösung wird normalerweise in der Form Breite x Höhe angegeben. Die Funktion getSystemMetrics liefert aber immer nur einen Wert zurück. Sie müssen sie also zweimal aufrufen, um Höhe und Breite zu ermitteln. Daher empfiehlt sich eine Funktion, die dies erledigt und die Auflösung zurückgibt. Optimal ist als Rückgabewert ein benutzerdefinierter Datentyp, der Breite und Höhe als Long-Werte beinhaltet. Neben dem Datentyp müssen Sie dazu auf Modulebene zwei SystemMetrics-Konstanten definieren, die bestimmen, dass Höhe und Breite des Desktops zurückgegeben werden sollen (Listing 2 auf der folgenden Seite).
Wenn Sie die Funktion getAufl testen möchten, weisen Sie deren Rückgabewert einfach einer Variablen des Typs typAufloesung zu und können dann auf Breite und Höhe der Auflösung über den benutzerdefinierten Typ zugreifen.
Prüfen, ob eine Maus angeschlossen ist
Ebenso einfach können Sie prüfen, ob eine Maus angeschlossen ist. Dazu gibt es sogar mehrere
Möglichkeiten.
Mit der Konstanten SM_CMOUSEBUTTONS beziehungsweise dem Wert 43 ermitteln Sie mit Hilfe der Funktion GetSystemMetrics die Anzahl der Mausbuttons. Ist keine Maus installiert, gibt die Funktion stattdessen 0 zurück. Sie müssen also nur prüfen, ob der Rückgabewert unter Angabe des Werts 43 größer ist als 0.
Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Const SM_CXSCREEN = 0 'Bildschirmbreite
Const SM_CYSCREEN = 1 'Bildschirmhöhe
Type typAufloesung
Breite As Long
Hoehe As Long
End Type
Function getAufl() As typAufloesung
Dim typTemp As typAufloesung
Dim lngTemp As Long
typTemp.Breite = GetSystemMetrics(SM_CXSCREEN)
typTemp.Hoehe = GetSystemMetrics(SM_CYSCREEN)
getAufl = typTemp
End Function
Sub Aufltesten()
Dim typAufl As typAufloesung
typAufl = getAufl()
Debug.Print "Auflösung: " & typAufl.Breite & " x " & typAufl.Hoehe
End Sub
'Maus
Const SM_CMOUSEBUTTONS = 43 'Anzahl der Mausbuttons
Const SM_MOUSEWHEELPRESENT = 19 'Maus mit Rad vorhanden
Function boolMaus() As Boolean
If (GetSystemMetrics(SM_CMOUSEBUTTONS) > 0) Or _
(GetSystemMetrics(SM_MOUSEWHEELPRESENT) > 0) Then
boolMaus = True
Else
boolMaus = False
End If
End Function
Sub Maustesten()
Debug.Print "Maus vorhanden? " & boolMaus()
End Sub
Const SM_CLEANBOOT = 67 'Startoption
Const CLEANBOOT_Normal = 0 'normaler Start
Const CLEANBOOT_Abgesichert = 1 'abgesicherter Modus
Const CLEANBOOT_AbgesichertNetz = 2 'abgesicherter Modus mit Netzwerk
Function getStarttyp() As String
Dim bytBoot As Byte
bytBoot = GetSystemMetrics(SM_CLEANBOOT)
Select Case bytBoot
Case CLEANBOOT_Normal:
getStarttyp = "normal"
Case CLEANBOOT_Abgesichert:
getStarttyp = "abgesichert"
Case CLEANBOOT_AbgesichertNetz:
getStarttyp = "abgesichert mit Netzwerk"
End Select
End Function
Sub StarttypTesten()
Debug.Print "Starttyp: " & getStarttyp()
End Sub
Alternativ können Sie die Konstante SM_MOUSEWHEELPRESENT oder den Wert 19 verwenden. Sie gibt einen Wert ungleich 0 zurück, wenn eine Maus mit Rad installiert ist. Die Funktion boolMaus in Listing 3 verwendet beide Ergebnisse und setzt den Rückgabewert auf true, wenn entweder der Aufruf mit dem Wert 43 oder der Aufruf mit dem Wert 19 einen Wert größer als 0 liefern.
Starteigenschaften prüfen
Genauso lässt sich auch prüfen, wie Windows gestartet wurde. Dazu übergeben Sie an die Funktion die Konstante SM_CLEANBOOT beziehungsweise den Wert 67. Als Rückgabewerte erhalten Sie 0, 1 oder 2. Bei 0 wurde Windows normal gestartet, bei 1 im abgesicherten Modus und bei 2 im abgesicherten Modus mit Netzwerkunterstützung.
Wenn Sie also wissen möchten, wie Windows gestartet wurde, müssen Sie nur den Wert 67 übergeben und den Rückgabewert entsprechend auswerten. Die Funktion getStarttyp nutzt dazu eine Select-Case-Verzweigung.
Wert |
Rückgabewert | |
67 |
SM:CLEANBOOT |
Gibt an, wie das System gestartet wurde: |
43 |
SM_CMOUSEBUTTONS |
Anzahl der Mausbuttons. |
13 |
SM_CXCURSOR |
Breite des Cursors in Pixel. |
16 |
SM_CXFULLSCREEN |
Breite, die für ein maximiertes Fenster zur Verfügung steht. |
21 |
SM_CXHSCROLL |
Breite der Pfeilschaltfläche einer horizontalen Scrolleiste. |
11 |
SM_CXICON |
Die Standardbreite eines Icons in Pixel. |
28 |
SM_CXMIN |
Die minimale Breite eines Fensters in Pixel. |
57 |
SM_CXMINIMIZED |
Die Breite eines minimierten Fensters in Pixel. |
0 |
SM_CXSCREEN |
Die Breite des primären Displays. |
20 |
SM_CXVSCROLL |
Die Breite einer vertikalen Scrollleiste. |
14 |
SM_CYCURSOR |
Die Höhe des Cursors in Pixel. |
17 |
SM_CYFULLSCREEN |
Die Höhe, die für ein maximiertes Fenster zur Verfügung steht. |
3 |
SM_CYHSCROLL |
Die Höhe einer horizontalen Scrollleiste in Pixel. |
12 |
SM_CYICON |
Die Standardhöhe eines Icons. |
29 |
SM_CYMIN |
Die minimale Höhe eines Fensters in Pixel. |
58 |
SM_CYMINIMIZED |
Die Höhe eines minimierten Fensters in Pixel. |
1 |
SM_CYSCREEN |
Die Höhe des primären Displays. |
50 |
SM_CYSMICON |
Die empfohlene Höhe eines kleinen Icons. |
20 |
SM_CYVSCROLL |
Die Höhe einer Pfeilschaltfläche in einer vertikalen Scrollleiste. |
87 |
SM_MEDIACENTER |
Ein Wert ungleich 0, wenn es sich um die Windows Media CenterEdition handelt. |
Wichtige SystemMetrics-Konstanten
Neben den hier vorgestellten Konstanten noch einige mehr. Eine Auswahl der relevanten Werte zeigt Tabelle 1.