Es gibt einige Systeminformationen, die man mit Umgebungsvariablen und somit ganz ohne APIs ermitteln kann. Die folgende Tabelle enthält Umgebungsvariablen, die so manchen API-Aufruf, den man im Netz finden kann, überflüssig machen.
Umgebungsvariablen | |
---|---|
Variable | Beispiel |
COMPUTERNAME | MeinPC |
PATH | C:\Windows\system32;C:\Windows |
ProgramW6432 | C:\Program Files |
SystemRoot | C:\Windows |
TEMP | C:\Users\Maier\AppData\Local\Temp |
USERNAME | Maier |
ProgramW6432
ist nur auf 64-Bit Windows vorhanden und kann daher
zur Unterscheidung von 32- und 64-Bit Windows genutzt werden:
Public Function isWin64Bit() As Boolean isWin64Bit = Len(Environ("ProgramW6432")) End Function
Liefert zahlreiche verschiedene Informationen zu einem Gebietsschema. Der Rückgabewert
wird in den Parameter LCType
geschrieben. Der eigentliche Rückgabewert
der Funktion gibt die Anzahl der Zeichen von LCType
an bzw. 0, wenn
die Funktion nichts zurückgegeben hat.
Im Parameter LocaleName
muss ein Gebietsschema angegeben werden.
Möglich sind Sprachangaben nach ISO 639
oder Länderangaben nach ISO 3166,
die auch kombiniert werden können, also beispielsweise:
Es ist auch ein Leerstring bzw. vbNullString
möglich. Dann wird
von einem „unveränderlichen Land“ ausgegangen.
Sowohl LocaleName
als auch der Rückgabewert lpLCData
sind Unicode-Strings. Für die Verwendung mit VBA müssen sie umgewandelt werden.
Welche Information zurückgegeben wird, hängt vom Parameter LCType
ab. Fängt LCType
mit LOCALE_I
an, ist der Rückgabewert
lpLCData
ein String, der ausschließlich aus Ziffern besteht.
#If VBA7 Then Private Declare PtrSafe Function GetLocaleInfoEx Lib "kernel32" _ (ByVal LocaleName As String, ByVal LCType As eLCType, _ ByVal lpLCData As String, ByVal cchData As Long) As Long #Else Private Declare Function GetLocaleInfoEx Lib "kernel32" _ (ByVal LocaleName As String, ByVal LCType As eLCType, _ ByVal lpLCData As String, ByVal cchData As Long) As Long #End If Public Enum eLCType LOCALE_SLOCALIZEDDISPLAYNAME = &H2 'Sprachname (evtl mit Land) des Gebietsschemas LOCALE_SENGLISHDISPLAYNAME = &H72 'Sprachname (evtl mit Land) in Englisch LOCALE_SNATIVEDISPLAYNAME = &H73 'Sprachname (evtl mit Land) in lokaler Sprache LOCALE_SLOCALIZEDLANGUAGENAME = &H6F 'Sprachname des Gebietsschemas LOCALE_SENGLISHLANGUAGENAME = &H1001 'Sprachname in Englisch LOCALE_SNATIVELANGUAGENAME = &H4 'Sprachname in lokaler Sprache LOCALE_SLOCALIZEDCOUNTRYNAME = &H6 'Landesname des Gebietsschemas LOCALE_SENGLISHCOUNTRYNAME = &H1002 'Landesname in Englisch LOCALE_SNATIVECOUNTRYNAME = &H8 'Landesname in lokaler Sprache LOCALE_SISO639LANGNAME = &H59 'Sprachname nach ISO639 LOCALE_SISO3166CTRYNAME = &H5A 'Landesname nach ISO3166 (2 Stellen) LOCALE_SISO3166CTRYNAME2 = &H68 'Landesname nach ISO3166 (3 Stellen) LOCALE_SNAME = &H5C 'Sprachname nach RFC4646 (zB: de-DE_phoneb) LOCALE_SSCRIPTS = &H6C 'üblicher Zeichensatz LOCALE_SABBREVLANGNAME = &H3 '3stelliger Sprachname (2 Stellen: ISO639/1, 1 Stelle: 1.Zchn der Subsprache) LOCALE_IDIALINGCODE = &H5 'internationale Telefonvorwahl LOCALE_SABBREVCTRYNAME = &H7 'Abgekürzer Sprachname (ISO3166) LOCALE_IGEOID = &H5B 'geografische ID eines Landes LOCALE_IDEFAULTCODEPAGE = &HB 'Standard Codepage LOCALE_IDEFAULTANSICODEPAGE = &H1004 'ANSI Codepage für Anwendungen, die kein UTF können LOCALE_IDEFAULTMACCODEPAGE = &H1011 'Macintosh Codepage für Anwendungen, die kein UTF können LOCALE_IDEFAULTEBCDICCODEPAGE = &H1012 'EBCDIC Codepage für Anwendungen, die kein UTF können LOCALE_SPOSITIVESIGN = &H50 'positives Vorzeichen LOCALE_SNEGATIVESIGN = &H51 'negatives Vorzeichen LOCALE_IPOSSIGNPOSN = &H52 'Wo positives Vorzeichen: 1:vor, 2=hinter, 3=vor Währung, 4=hinter Währung LOCALE_INEGSIGNPOSN = &H53 'Wo negatives Vorzeichen: wie IPOSSIGNPOSN, plus 0:in Klammern LOCALE_SNAN = &H69 'Bezeichnung für nicht definiert (Not a Number) LOCALE_SPOSINFINITY = &H6A 'Bezeichnung für +unendlich LOCALE_SNEGINFINITY = &H6B 'Bezeichnung für -unendlich LOCALE_SLIST = &HC 'Listentrennzeichen LOCALE_IMEASURE = &HD '0=Metrisch, 1=US LOCALE_SDECIMAL = &HE 'Dezimaltrennzeichen LOCALE_STHOUSAND = &HF 'Tausendertrennzeichen LOCALE_SGROUPING = &H10 'Gruppierungsregel für Tausendertrennzeichen LOCALE_IDIGITS = &H11 'Anzahl Nachkommastellen LOCALE_ILZERO = &H12 '0=keine führende Nullen, 1=führende Nullen, LOCALE_INEGNUMBER = &H1010 'Darstellung negativer Zahlen: 0="(1)", 1="-1", 2="- 1", 3="1-", 4="1 -" LOCALE_SNATIVEDIGITS = &H13 'Äquivalente für "0123456789" in bestimmten Sprachen LOCALE_IDIGITSUBSTITUTION = &H1014 'Bestimmung der Äquivalente: 0=Kontext, 1=Keine, 2=abhängig von SNATIVEDIGITS LOCALE_SCURRENCY = &H14 'Währungssymbol LOCALE_SINTLSYMBOL = &H15 'Internationaler Währungsbezeichner LOCALE_SMONDECIMALSEP = &H16 'Dezimaltrennzeichen für Währung LOCALE_SMONTHOUSANDSEP = &H17 'Tausendertrennzeichen für Währung LOCALE_SMONGROUPING = &H18 'Gruppierungsregel für Tausendertrennzeichen für Währung LOCALE_ICURRDIGITS = &H19 'Anzahl Nachkommastellen für Währung LOCALE_ICURRENCY = &H1B 'Position Währungssymbol: 0="$1", 1="1$", 2="$ 1", 3="1 $" LOCALE_IPOSSYMPRECEDES = &H54 'Währungssymbol vor Betrag? 1=Ja, 0=Nein LOCALE_IPOSSEPBYSPACE = &H55 'Währungssymbol mit Leerzeichen: 1=Ja, 0=Nein LOCALE_INEGCURR = &H1C 'Darstellung negativer Währungsbeträge LOCALE_INEGSYMPRECEDES = &H56 'negatives Währungssymbol vor Betrag? 1=Ja, 0=Nein LOCALE_INEGSEPBYSPACE = &H57 'negatives Währungssymbol mit Leerzeichen: 1=Ja, 0=Nein LOCALE_SENGCURRNAME = &H1007 'Währungsbezeichnung in englisch LOCALE_SNATIVECURRNAME = &H1008 'Währungsbezeichnung in lokaler Sprache LOCALE_SSHORTDATE = &H1F 'Formatstring für kurzes Datum LOCALE_SLONGDATE = &H20 'Formatstring für langes Datum LOCALE_STIMEFORMAT = &H1003 'Formatstring für Zeit LOCALE_SYEARMONTH = &H1006 'Formatstring für Jahr und Monat LOCALE_SDURATION = &H5D 'Formatstring für Zeitdauer LOCALE_S1159 = &H28 'AM Anzeige LOCALE_S2359 = &H29 'PM Anzeige LOCALE_ICALENDARTYPE = &H1009 'Verwendeter Kalender LOCALE_IOPTIONALCALENDAR = &H100B 'Zusätzlich verwendeter Kalender LOCALE_IFIRSTDAYOFWEEK = &H100C 'Erster Tag der Woche: 0=Montag, 1=Dienstag, ... 6=Sonntag LOCALE_IFIRSTWEEKOFYEAR = &H100D 'Erste Woche des Jahres: '0=Woche mit 1.Jan, 1=1.volle Woche nach 1.Jan, 2=1.Woche mit min 4 Tagen LOCALE_IPAPERSIZE = &H100A 'übliches Papierformat: 1=Letter, 5=Legal, 8=A3, 9=A4 LOCALE_SKEYBOARDSTOINSTALL = &H5E 'Liste potentiell installierbarer Tastaturen LOCALE_SSORTNAME = &H1013 'Name des Sortieralgorhythmus LOCALE_SDAYNAME1 = &H2A 'Bezeichnung für Montag LOCALE_SDAYNAME2 = &H2B 'Bezeichnung für Dienstag LOCALE_SDAYNAME3 = &H2C 'Bezeichnung für Mittwoch LOCALE_SDAYNAME4 = &H2D 'Bezeichnung für Donnerstag LOCALE_SDAYNAME5 = &H2E 'Bezeichnung für Freitag LOCALE_SDAYNAME6 = &H2F 'Bezeichnung für Samstag LOCALE_SDAYNAME7 = &H30 'Bezeichnung für Sonntag LOCALE_SABBREVDAYNAME1 = &H31 'Abkürzung für Montag LOCALE_SABBREVDAYNAME2 = &H32 'Abkürzung für Dienstag LOCALE_SABBREVDAYNAME3 = &H33 'Abkürzung für Mittwoch LOCALE_SABBREVDAYNAME4 = &H34 'Abkürzung für Donnerstag LOCALE_SABBREVDAYNAME5 = &H35 'Abkürzung für Freitag LOCALE_SABBREVDAYNAME6 = &H36 'Abkürzung für Samstag LOCALE_SABBREVDAYNAME7 = &H37 'Abkürzung für Sonntag LOCALE_SSHORTESTDAYNAME1 = &H60 'Noch kürzer für Montag LOCALE_SSHORTESTDAYNAME2 = &H61 'Noch kürzer für Dienstag LOCALE_SSHORTESTDAYNAME3 = &H62 'Noch kürzer für Mittwoch LOCALE_SSHORTESTDAYNAME4 = &H63 'Noch kürzer für Donnerstag LOCALE_SSHORTESTDAYNAME5 = &H64 'Noch kürzer für Freitag LOCALE_SSHORTESTDAYNAME6 = &H65 'Noch kürzer für Samstag LOCALE_SSHORTESTDAYNAME7 = &H66 'Noch kürzer für Sonntag LOCALE_SMONTHNAME1 = &H38 'Bezeichnung für Januar LOCALE_SMONTHNAME2 = &H39 'Bezeichnung für Februar LOCALE_SMONTHNAME3 = &H3A 'Bezeichnung für März LOCALE_SMONTHNAME4 = &H3B 'Bezeichnung für April LOCALE_SMONTHNAME5 = &H3C 'Bezeichnung für Mai LOCALE_SMONTHNAME6 = &H3D 'Bezeichnung für Juni LOCALE_SMONTHNAME7 = &H3E 'Bezeichnung für Juli LOCALE_SMONTHNAME8 = &H3F 'Bezeichnung für August LOCALE_SMONTHNAME9 = &H40 'Bezeichnung für September LOCALE_SMONTHNAME10 = &H41 'Bezeichnung für Oktober LOCALE_SMONTHNAME11 = &H42 'Bezeichnung für November LOCALE_SMONTHNAME12 = &H43 'Bezeichnung für Dezember LOCALE_SMONTHNAME13 = &H100E 'Bezeichnung für 13ten Monat (falls es ihn gibt) LOCALE_SABBREVMONTHNAME1 = &H44 'Abkürzung für Januar LOCALE_SABBREVMONTHNAME2 = &H45 'Abkürzung für Februar LOCALE_SABBREVMONTHNAME3 = &H46 'Abkürzung für März LOCALE_SABBREVMONTHNAME4 = &H47 'Abkürzung für April LOCALE_SABBREVMONTHNAME5 = &H48 'Abkürzung für Mai LOCALE_SABBREVMONTHNAME6 = &H49 'Abkürzung für Juni LOCALE_SABBREVMONTHNAME7 = &H4A 'Abkürzung für Juli LOCALE_SABBREVMONTHNAME8 = &H4B 'Abkürzung für August LOCALE_SABBREVMONTHNAME9 = &H4C 'Abkürzung für September LOCALE_SABBREVMONTHNAME10 = &H4D 'Abkürzung für Oktober LOCALE_SABBREVMONTHNAME11 = &H4E 'Abkürzung für November LOCALE_SABBREVMONTHNAME12 = &H4F 'Abkürzung für Dezember LOCALE_SABBREVMONTHNAME13 = &H100F 'Abkürzung für 13ten Monat (falls es ihn gibt) 'Ab Windows 7: LOCALE_IREADINGLAYOUT = &H70 'Schreibrichtung: 0=Links-Rechts, 1=Rechts-Links, 2=Oben-Unten, 3=Unten-Oben LOCALE_INEGATIVEPERCENT = &H74 'Position Prozentzeichen und Minus bei negativen Werten LOCALE_IPOSITIVEPERCENT = &H75 'Position Prozentzeichen: 0="1 %", 1="1%", 2="%1", 3="% 1" LOCALE_SPERCENT = &H76 'Das Prozentsymbol LOCALE_SPERMILLE = &H77 'Das Promillesymbol LOCALE_SMONTHDAY = &H78 'Formatstring für Tag und Monat LOCALE_SSHORTTIME = &H79 'Formatstring für kurzes Zeitformat (idR ohne Sekunden) LOCALE_RETURN_GENITIVE_NAMES = &H10000000 'mit "Or LOCALE_SMONTHNAME1-13": 'Genitivform des Monats (nur manche Sprachen) End Enum
Public Function apiGetLocaleInfoEx(lngLCType As eLCType, Optional LocaleName As String = "de") As String Dim lngLocale As Long Dim strLCData As String Dim lngX As Long Dim lngSize As Long lngSize = 255 strLCData = String(lngSize, vbNullChar) lngX = GetLocaleInfoEx(StrConv(LocaleName, vbUnicode), lngLCType, strLCData, lngSize) If lngX <> 0 Then apiGetLocaleInfoEx = Replace(StrConv(strLCData, vbFromUnicode), vbNullChar, "") Else apiGetLocaleInfoEx = "" End If End Function
Public Sub demoLocale() Dim strCtry(1) As String, i As Long strCtry(0) = "ar" strCtry(1) = "de-at" For i = 0 To 1 Debug.Print "In "; apiGetLocaleInfoEx(LOCALE_SLOCALIZEDCOUNTRYNAME, strCtry(i)); _ " ("; apiGetLocaleInfoEx(LOCALE_SISO3166CTRYNAME, strCtry(i)); _ ") spricht man "; apiGetLocaleInfoEx(LOCALE_SLOCALIZEDLANGUAGENAME, strCtry(i)) Next Debug.Print vbNewLine; "Die Sortierreihenfolge "; apiGetLocaleInfoEx(LOCALE_SNAME, "de-de_phoneb"); _ " nennt man "; apiGetLocaleInfoEx(LOCALE_SSORTNAME, "de-de_phoneb") Debug.Print vbNewLine; apiGetLocaleInfoEx(LOCALE_SMONTHNAME1, "de"); " heißt in "; _ apiGetLocaleInfoEx(LOCALE_SLOCALIZEDCOUNTRYNAME, "de-at"); " "; _ apiGetLocaleInfoEx(LOCALE_SMONTHNAME1, "de-at") Debug. Print "In "; apiGetLocaleInfoEx(LOCALE_SLOCALIZEDCOUNTRYNAME, "hr"); " heißt er "; _ apiGetLocaleInfoEx(LOCALE_SMONTHNAME1, "hr"); ", und der Monatserste ist dann '1. "; _ apiGetLocaleInfoEx(LOCALE_SMONTHNAME1 Or LOCALE_RETURN_GENITIVE_NAMES, "hr"); "'" End Sub
Die Demofunktion zeigt nur einige der so ermittelbaren Informationen an.
demoLocale In Saudi-Arabien (SA) spricht man Arabisch In Österreich (AT) spricht man Deutsch Die Sortierreihenfolge de-DE_phoneb nennt man Telefonbuch (DIN) Januar heißt in Österreich Jänner In Kroatien heißt er sijecanj, und der Monatserste ist dann '1. sijecnja'
Ermittelt den Pfad des Windows-Systemverzeichnisses, also etwas wie
C:\Windows\system32
. Der Rückgabewert zeigt die Länge des in der Variable
lpBuffer
zurückgegebenen Strings an.
#If VBA7 Then Private Declare PtrSafe Function GetSystemDirectoryA Lib "kernel32" _ (ByVal lpBuffer As String, ByVal nSize As Long) As Long #Else Private Declare Function GetSystemDirectoryA Lib "kernel32" _ (ByVal lpBuffer As String, ByVal nSize As Long) As Long #End If
Public Function apiGetSystemDirectory() As String Dim lngLen As Long, lpBuffer As String, nSize As Long nSize = 255 lpBuffer = String(nSize, vbNullChar) lngLen = GetSystemDirectoryA(lpBuffer, nSize) apiGetSystemDirectory = Left(lpBuffer, lngLen) End Function
Liefert zahlreiche verschiedene Informationen über die Größe des Bildschirms, verschiedener Fensterelemente, Mindest- oder Maximalgrößen von Fenstern, aber auch einige Infos zur Maus oder dazu, wie Windows gestartet wurde.
#If VBA7 Then Public Declare PtrSafe Function GetSystemMetrics Lib "user32" _ (ByVal nIndex As eIndex) As Integer #Else Public Declare Function GetSystemMetrics Lib "user32" _ (ByVal nIndex As eIndex) As Integer #End If 'Rückgabewerte: 'für "Breite", "Höhe": in Pixel 'für "Boolean": False = 0, Wahr = irgendein Wert <> 0 Public Enum eIndex SM_CXSCREEN = 0 'Breite des Bildschirms SM_CYSCREEN = 1 'Höhe des Bildschirms SM_CXVSCROLL = 2 'Breite einer vertikalen Bildlaufleiste SM_CYHSCROLL = 3 'Höhe einer horizontalen Bildlaufleiste SM_CYCAPTION = 4 'Höhe einer Titelleiste SM_CXBORDER = 5 'Breite eines Fensterrahmens SM_CYBORDER = 6 'Höhe eines Fensterrahmens SM_CXFIXEDFRAME = 7 'Breite eines Fensterrahmens im Stil "Dialog" SM_CYDLGFRAME = 8 'veraltet (identisch mit SM_CXFIXEDFRAME) SM_CYVTHUMB = 9 'Höhe der Positionsanzeige einer vertikalen Bildlaufleiste SM_CXHTHUMB = 10 'Breite der Positionsanzeige einer horizontalen Bildlaufleiste SM_CXICON = 11 'Breite eines normalen Icons (siehe auch SM_CXSMICON) SM_CYICON = 12 'Höhe eines normalen Icons (siehe auch SM_CYSMICON) SM_CXCURSOR = 13 'Breite des Cursors SM_CYCURSOR = 14 'Höhe des Cursors SM_CYMENU = 15 'Höhe einer einzeiligen Menüleiste SM_CXFULLSCREEN = 16 'Breite des Arbeitsbereiches eines maximierten Fensters SM_CYFULLSCREEN = 17 'Höhe des Arbeitsbereiches eines maximierten Fensters SM_CYKANJIWINDOW = 18 'Für japanische (Kanji) Schrift SM_MOUSEPRESENT = 19 'Boolean: Maus installiert SM_CYVSCROLL = 20 'Höhe der Pfeil-Bitmap einer horizontalen Bildlaufleiste SM_CXHSCROLL = 21 'Breite der Pfeil-Bitmap einer horizontalen Bildlaufleiste SM_DEBUG = 22 'Boolean: Debugging-Version von User.exe installiert SM_SWAPBUTTON = 23 'Boolean: Maustasten vertauscht SM_CXMIN = 28 'Mindestbreite eines Fensters SM_CYMIN = 29 'Mindesthöhe eines Fensters SM_CXSIZE = 30 'Breite der Schaltflächen in der Titelleiste SM_CYSIZE = 31 'Höhe der Schaltflächen in der Titelleiste SM_CXSIZEFRAME = 32 'Breite eines anpassbaren Fensters SM_CYSIZEFRAME = 33 'Höhe eines anpassbaren Fensters SM_CXMINTRACK = 34 'Mindestbreite eines greifbaren Fensters SM_CYMINTRACK = 35 'Mindesthöhe eines greifbaren Fensters SM_CXDOUBLECLK = 36 'Breite des Rechtecks, in der ein Doppelklick erkannt wird SM_CYDOUBLECLK = 37 'Höhe des Rechtecks, in der ein Doppelklick erkannt wird SM_CXICONSPACING = 38 'Breite einer Zelle, um Icons auszurichten SM_CYICONSPACING = 39 'Höhe einer Zelle, um Icons auszurichten SM_MENUDROPALIGNMENT = 40 'Boolean: PopUps in der Menüleiste rechts ausgerichtet SM_PENWINDOWS = 41 'Boolean: MS Windows Pen-Programmier-Erweiterungen installiert SM_DBCSENABLED = 42 'Boolean: Doppel-Byte Version von "User.exe" installiert SM_CMOUSEBUTTONS = 43 'Anzahl Maustasten. 0=Keine Maus installiert SM_SECURE = 44 'Veraltet (nur Win95/98) SM_CXEDGE = 45 'Breite der Fensterecken SM_CYEDGE = 46 'Höhe der Fensterecken SM_CXMINSPACING = 47 'Breite einer Gitterzelle für minimierte Fenster SM_CYMINSPACING = 48 'Höhe einer Gitterzelle für minimierte Fenster SM_CXSMICON = 49 'Breite eines kleinen Icons SM_CYSMICON = 50 'Höhe eines kleinen Icons SM_CYSMCAPTION = 51 'Höhe einer kleinen Titelleiste SM_CXSMSIZE = 52 'Breite kleiner Schaltflächen in der Titelleiste SM_CYSMSIZE = 53 'Höhe kleiner Schaltflächen in der Titelleiste SM_CXMENUSIZE = 54 'Breite der Schaltflächen in der Menüleiste SM_CYMENUSIZE = 55 'Höhe der Schaltflächen in der Menüleiste SM_ARRANGE = 56 'Gibt zurück, wie minimierte Fenster angeordnet werden SM_CXMINIMIZED = 57 'Breite eines minimierten Fensters SM_CYMINIMIZED = 58 'Höhe eines minimierten Fensters SM_CXMAXTRACK = 59 'Maximale Breite, auf die User ein Fenster vergrößern darf SM_CYMAXTRACK = 60 'Maximale Höhe, auf die User ein Fenster vergrößern darf SM_CXMAXIMIZED = 61 'Standardbreite eines maximierten Fensters SM_CyMAXIMIZED = 62 'Standardhöhe eines maximierten Fensters SM_NETWORK = 63 'ungerade Zahl=Netzwerk vorhanden, 0=kein Netzwerk vorhanden SM_CLEANBOOT = 67 'Windows-Start: 0=Normal, 1=abgesichert, 2=abgesichert mit Netzwerk SM_CXDRAG = 68 'Breite, um die die Maus bewegt werden kann, ohne Ziehen auszulösen SM_CYDRAG = 69 'Höhe, um die die Maus bewegt werden kann, ohne Ziehen auszulösen SM_SHOWSOUNDS = 70 'Boolean: Windows Soundstichwörter werden angezeigt SM_CXMENUCHECK = 71 'Breite der Markierungs-Bitmap SM_CYMENUCHECK = 72 'Höhe der Markierungs-Bitmap SM_SLOWMACHINE = 73 'Boolean: Low-End Computer (veraltet) SM_MIDEASTENABLED = 74 'Boolean: Hebräisch und Arabisch im System aktiviert SM_MOUSEWHEELPRESENT = 75 'Boolean: Maus mit Mausrad ist installiert SM_XVIRTUALSCREEN = 76 'linke Kante des virtuellen Bildschirms SM_YVIRTUALSCREEN = 77 'obere Kante des virtuellen Bildschirms SM_CXVIRTUALSCREEN = 78 'Breite des virtuellen Bildschirms SM_CYVIRTUALSCREEN = 79 'Höhe des virtuellen Bildschirms SM_CMONITORS = 80 'Anzahl sichtbarer Monitore SM_SAMEDISPLAYFORMAT = 81 'Boolean: Gleiches Farbformat bei allen angeschlossenen Monitoren End Enum
Public Sub demoMetrics() Debug.Print "Bildschirmauflösung:", Debug.Print GetSystemMetrics(SM_CXSCREEN) & "x" & GetSystemMetrics(SM_CYSCREEN) Debug.Print "Fenstergröße im Vollbild:", Debug.Print GetSystemMetrics(SM_CXFULLSCREEN) & "x" & GetSystemMetrics(SM_CYFULLSCREEN) Debug.Print "Sichtbare Monitore:", GetSystemMetrics(SM_CMONITORS) If GetSystemMetrics(SM_MOUSEPRESENT) Then Debug.Print "Mindestens eine Maus "; If GetSystemMetrics(SM_MOUSEWHEELPRESENT) Then Debug.Print "(mit Rad) "; Debug.Print "ist vorhanden (" & GetSystemMetrics(SM_CMOUSEBUTTONS) & " Tasten). Die Tasten sind "; If Not GetSystemMetrics(SM_SWAPBUTTON) Then Debug.Print "nicht "; Debug.Print "vertauscht." End If Select Case GetSystemMetrics(SM_CLEANBOOT) Case 0: Debug.Print "Windows wurde normal gestartet." Case 1: Debug.Print "Windows wurde abgesichert gestartet." Case 2: Debug.Print "Windows wurde abgesichert im Netzwerk gestartet." End Select End Sub
Die Demofunktion zeigt nur einige der so ermittelbaren Informationen an. Für VBA dürften viele der sonstigen Informationen auch kaum je relevant sein.
demoMetrics Bildschirmauflösung: 1920x1200 Fenstergröße im Vollbild: 1920x1125 Sichtbare Monitore: 1 Mindestens eine Maus (mit Rad) ist vorhanden (5 Tasten). Die Tasten sind nicht vertauscht. Windows wurde normal gestartet.