_GetCOMObjectControls - COM-Objekte für die Gui suchen

  • Hier wieder mal eine kleine Funktion, um COM-Objekte zu finden, welche dann in einer Gui dargestellt werden können.
    Hab leider noch wenig Zeit gehabt, um die Controls zu testen, hoffe aber, dass das eine oder andere nützliche Control zum Vorschein kommt.

    mfg funkey


    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $aCOMObjects = _GetCOMObjectControls()
    _ArrayDisplay($aCOMObjects, "All")

    [/autoit] [autoit][/autoit] [autoit]

    $aCOMObjects = _GetCOMObjectControls("Control0")
    _ArrayDisplay($aCOMObjects, "Control0")

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("COM-Test", 620, 500)
    $oFileSearch = ObjCreate("CompatUI.SelectFile.1")
    $oSlider1 = ObjCreate("MSComctlLib.Slider.2")
    $oSlider2 = ObjCreate("Control0.Slider.1")
    $oCurve = ObjCreate("Control0.CurveEdit.1")
    $oStop = ObjCreate("Control0.StopButton.1")
    $oUndo = ObjCreate("Control0.UndoButton.1")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateObj($oFileSearch, 10, 10, 600, 25)
    GUICtrlCreateObj($oSlider1, 10, 40, 200, 25)
    GUICtrlCreateObj($oSlider2, 10, 70, 20, 350)
    GUICtrlCreateObj($oCurve, 40, 70, 200, 200)
    GUICtrlCreateObj($oStop, 250, 70, 20, 20)
    GUICtrlCreateObj($oUndo, 280, 70, 20, 20)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Sleep(10)
    Until GUIGetMsg() = -3

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _GetCOMObjectControls($sFilter = "")
    ;funkey
    Local $objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
    Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ClassicCOMClassSetting where Control = True AND ProgId Like '%" & $sFilter & "%'", "WQL", 48)
    If Not IsObj($colItems) Then Return SetError(1, 0, "")
    Local $sRet
    For $objItem In $colItems
    $sRet &= $objItem.ProgId & @TAB
    $sRet &= $objItem.Caption & @CR
    Next
    Local $aTemp = StringSplit($sRet, @CR, 2)
    Local $aRet[UBound($aTemp) - 1][2]
    For $i = 0 To UBound($aTemp) - 2
    $aRet[$i][0] = StringLeft($aTemp[$i], StringInStr($aTemp[$i], @TAB, 0, -1) - 1)
    $aRet[$i][1] = StringTrimLeft($aTemp[$i], StringInStr($aTemp[$i], @TAB, 0, -1))
    Next
    Return $aRet
    EndFunc ;==>_GetCOMObjectControls

    [/autoit]
    • Offizieller Beitrag

    Dein Script ist leider unter Windows7/64Bit nicht lauffähig.
    Es bricht mit (43) : ==> Array variable subscript badly formatted.: nach ausführen von

    [autoit]

    $aCOMObjects = _GetCOMObjectControls("Control0")

    [/autoit]

    ab.

    Wenn man den Teil auskommentiert

    [autoit]

    $aCOMObjects = _GetCOMObjectControls()
    _ArrayDisplay($aCOMObjects, "All")

    [/autoit][autoit][/autoit][autoit]

    $aCOMObjects = _GetCOMObjectControls("Control0")
    _ArrayDisplay($aCOMObjects, "Control0")

    [/autoit]


    wird die GUI zwar initialisiert aber kein Object angezeigt.

  • In der Funktion _GetCOMObjectControls("Control0") kommt mit dem Paramter "Control0" bei $sRet nichts an.
    Und da kein Fehler abgefangen wird zieht sich das dann durch bis zur Deklaration des Arrays.

    Ohne das Objekt näher zu kennen ist da nichts zu machen :)

    Einmal editiert, zuletzt von nuts (7. Dezember 2010 um 09:49)