Ruft Typinformationen eines COM-Objekts ab.
Info := ComObjType(ComObject , InfoTyp)
Ein Wrapper-Objekt, das ein COM-Objekt oder einen typisierten Wert enthält.
[v1.0.91+]: Wenn weggelassen, wird ein ganzzahliger Variantentypcode abgerufen, der den Typ des im COM-Wrapper-Objekt enthaltenen Wertes wiedergibt.
Andernfalls geben Sie eine der folgenden Zeichenketten an, die die abzurufenden Typinformation wiedergibt:
Name: Der Name des Standard-Interface des Objekts.
IID: Der globale eindeutige Identifikator (GUID) des Standard-Interface des Objekts.
Class [v1.1.26+]: Der Klassenname des Objekts. Beachten Sie, dass dies nicht dasselbe ist wie eine Prog-ID (eine Prog-ID ist ein Name, der zur Identifizierung der Klasse in der System-Registry oder für ComObjCreate verwendet wird).
CLSID [v1.1.26+]: Der globale eindeutige Identifikator (GUID) der Klasse des Objekts. Klassen sind oft via CLSID im HKCR\CLSID
-Registry-Schlüssel registriert.
Der Rückgabewert ist vom InfoTyp-Wert abhängig. Es wird eine leere Zeichenkette zurückgegeben, wenn der Parameter ungültig ist oder wenn die angeforderten Typinformationen nicht abgerufen werden konnten.
VT_EMPTY := 0 ; Kein Wert VT_NULL := 1 ; SQL-artige Null VT_I2 := 2 ; vorzeichenfähiger 16-Bit-Integer VT_I4 := 3 ; vorzeichenfähiger 32-Bit-Integer VT_R4 := 4 ; 32-Bit-Floating-Point-Zahl VT_R8 := 5 ; 64-Bit-Floating-Point-Zahl VT_CY := 6 ; Währung VT_DATE := 7 ; Datum VT_BSTR := 8 ; COM-Zeichenkette (Unicode mit Längenpräfix) VT_DISPATCH := 9 ; COM-Objekt VT_ERROR := 0xA ; Fehlercode (32-Bit-Integer) VT_BOOL := 0xB ; Boolesches True (-1) oder False (0) VT_VARIANT := 0xC ; VARIANT (in Kombination mit VT_ARRAY oder VT_BYREF) VT_UNKNOWN := 0xD ; IUnknown-Interface-Pointer VT_DECIMAL := 0xE ; (nicht unterstützt) VT_I1 := 0x10 ; vorzeichenfähiger 8-Bit-Integer VT_UI1 := 0x11 ; vorzeichenloser 8-Bit-Integer VT_UI2 := 0x12 ; vorzeichenloser 16-Bit-Integer VT_UI4 := 0x13 ; vorzeichenloser 32-Bit-Integer VT_I8 := 0x14 ; vorzeichenfähiger 64-Bit-Integer VT_UI8 := 0x15 ; vorzeichenloser 64-Bit-Integer VT_INT := 0x16 ; vorzeichenfähiger Maschinen-Integer VT_UINT := 0x17 ; vorzeichenloser Maschinen-Integer VT_RECORD := 0x24 ; Benutzerdefinierter Typ -- NICHT UNTERSTÜTZT VT_ARRAY := 0x2000 ; SAFEARRAY VT_BYREF := 0x4000 ; Pointer, der auf einen anderen Wertetyp verweist /* VT_ARRAY und VT_BYREF müssen mit anderen Werten kombiniert werden (via bitweisem OR), um den exakten Typ anzugeben. Zum Beispiel ist 0x2003 ein SAFEARRAY mit vorzeichenfähigen 32-Bit-Integern und 0x400C ein Pointer, der auf ein VARIANT verweist. */
In den meisten Fällen werden Werte, die von einer Methode oder Eigenschaft eines COM-Objekts zurückgegeben werden, in einen für AutoHotkey geeigneten Datentyp umgewandelt. Unbehandelte Typen werden via VariantChangeType in Zeichenketten gezwängt; wenn das fehlschlägt oder der Variantentyp das VT_ARRAY- oder VT_BYREF-Flag enthält, wird stattdessen ein Objekt zurückgegeben, das sowohl den Wert als auch dessen Typ enthält.
Wenn ComObjType(x)
einen Integer zurückgibt, enthält x einen COM-Objekt-Wrapper.
Wenn InfoTyp "Name"
oder "IID"
ist, wird die Typinformation über die Interface-Methode IDispatch::GetTypeInfo abgerufen. Der Variantentyp von ComObject muss VT_DISPATCH sein.
Wenn InfoTyp "Class"
oder "CLSID"
ist, wird die Typinformation über die Interface-Methode IProvideClassInfo::GetClassInfo abgerufen. Der Variantentyp von ComObject muss VT_DISPATCH oder VT_UNKNOWN sein, und das Objekt muss das IProvideClassInfo-Interface implementieren (einige Objekte tun das nicht).
ComObjValue(), ComObjCreate(), ComObjGet(), ComObjActive()
Meldet verschiedene Typinformationen eines COM-Objekts.
d := ComObjCreate("Scripting.Dictionary") VarType := ComObjType(d) IName := ComObjType(d, "Name") IID := ComObjType(d, "IID") CName := ComObjType(d, "Class") ; Benötigt [v1.1.26+] CLSID := ComObjType(d, "CLSID") ; Benötigt [v1.1.26+] MsgBox % "Variantentyp:`t" VarType . "`nInterfacename:`t" IName "`nInterface-ID:`t" IID . "`nKlassenname:`t" CName "`nKlassen-ID (CLSID):`t" CLSID