Wichtige Systemeigenschaften ermítteln

15.01.2006 von Helma  Spona
Die Windows API ist nicht ganz zu Unrecht als kompliziert und schwierig verschrien. Dennoch gibt es auch Funktionen, die sich einfach und unkompliziert einsetzen lassen. Dazu gehört die Funktion GetSystemMetrics, die vor allem Maße des Systems, aber auch einige andere interessante Systemeigenschaften zurückgibt. Wie Sie die Funktion einsetzen, um wichtige, für Access-Anwendungen relevante Informationen ermitteln, zeigt Ihnen dieser Beitrag.

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.

Bild 1: Ausgabe der Funktion Aufltesten im Direktbereich.
Tabelle 1: Weitere wichtige SystemMetrics-Konstanten.

Wert

Rückgabewert

67

SM:CLEANBOOT

Gibt an, wie das System gestartet wurde:
0 normal
1 abgesicherter Modus
2 abgesicherter Modus mit Netzwerkunterstützung

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.