ComObjType() [AHK_L 53+]

Ruft Typinformationen eines COM-Objekts ab.

VarType := ComObjType(ComObject)           ; Benötigt [v1.0.91+]
IName   := ComObjType(ComObject, "Name")
IID     := ComObjType(ComObject, "IID")
CName   := ComObjType(ComObject, "Class")  ; Benötigt [v1.1.26+]
CLSID   := ComObjType(ComObject, "CLSID")  ; Benötigt [v1.1.26+]

Parameter

ComObject

Ein Wrapper-Objekt, das ein COM-Objekt oder einen typisierten Wert enthält.

Param2

Der zweite Parameter ist eine Zeichenkette, die kennzeichnet, welche Typinformation abgerufen werden soll.

Rückgabewert

Der Rückgabewert ist vom Param2-Wert abhängig:

Param2Rückgabewert
Weggelassen[v1.0.91+]: Ein ganzzahliger Variantentypcode, der den Typ des im COM-Wrapper-Objekt enthaltenen Wertes kennzeichnet.
"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-Key registriert.

Es wird eine leere Zeichenkette zurückgegeben, wenn der Parameter ungültig ist oder wenn die angeforderte Typinformation nicht abgerufen werden konnte.

Variantentyp-Konstanten

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.
*/

Allgemeine Bemerkungen

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 den 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 Param2 "Name" oder "IID" ist, wird die Typinformation über die Interface-Methode IDispatch::GetTypeInfo abgerufen. Der Variantentyp von ComObject muss VT_DISPATCH sein.

Wenn Param2 "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 es nicht).

Siehe auch

ComObjValue(), ComObjCreate(), ComObjGet(), ComObjActive()

Beispiele

#1

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