DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

  • nice, du bist gut! Das funktioniert! Wie kann ich denn das struct geschickt in eine schleife packen.Counter ist die anzahl der mounted images:

    [autoit]

    Local $tWIM_MOUNT_LIST = DllStructCreate($tagWIM_MOUNT_LIST & ";" & $tagWIM_MOUNT_LIST) ; reserved for two images

    [/autoit]

    vllt. so?

    For $i = 1 To $Counter
    $tagWIM_MOUNT_LIST &= ";" & $tagWIM_MOUNT_LIST
    Next

    $tWIM_MOUNT_LIST = DllStructCreate($tagWIM_MOUNT_LIST)

  • So:

    [autoit]

    Global Const $tagWIM_MOUNT_LIST = "WCHAR WimPath[260];WCHAR MountPath[260];DWORD ImageIndex;BOOL MountedForRW"

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

    Global $tagWIM_Temp
    Global $Counter = 4

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

    For $i = 1 To $Counter
    $tagWIM_Temp &= $tagWIM_MOUNT_LIST & ";"
    Next

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

    ConsoleWrite($tagWIM_Temp & @CRLF)

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Sehr gut Danke. So schmeckt's:

    UDF code:

    [autoit]

    Func _WIM_GetMountedImageCount()

    Local $aResult = DllCall("wimgapi.dll", "bool", "WIMGetMountedImages", "ptr", 0, "dword*", 0)
    If @error Or $aResult[2] = 0 Then Return SetError(@error, @extended, 0)

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

    Local $pdwImageCount = $aResult[2] / 1048

    Return $pdwImageCount
    EndFunc

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

    Func _WIM_GetMountedImages()

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

    Local $pdwImageCount = _WIM_GetMountedImageCount()
    If @error Or $pdwImageCount = 0 Then Return SetError(@error, @extended, 0)

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

    Local $tagWIM_TEMP
    Local $rParams = 4 ; count of return parameter

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

    For $i = 1 To $pdwImageCount
    $tagWIM_TEMP &= $tagWIM_MOUNT_LIST
    If $i = $pdwImageCount Then ExitLoop
    $tagWIM_TEMP &= ";"
    Next

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

    Local $WIM_MOUNT_LIST[$pdwImageCount][$rParams]
    Local $tWIM_MOUNT_LIST = DllStructCreate($tagWIM_TEMP)
    Local $pWIM_MOUNT_LIST = DllStructGetPtr($tWIM_MOUNT_LIST)

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

    Local $aResult = DllCall("wimgapi.dll", "bool", "WIMGetMountedImages", _
    "ptr", $pWIM_MOUNT_LIST, _
    "dword*", DllStructGetSize($tWIM_MOUNT_LIST) _
    )
    If @error Then Return SetError(@error, @extended, 0)

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

    $k = 0 ; cell
    For $i = 1 To $pdwImageCount ; row
    For $j = 1 To $rParams ; column
    $k += 1
    $WIM_MOUNT_LIST[$i-1][$j-1] &= DllStructGetData($tWIM_MOUNT_LIST, $k)
    Next
    Next

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

    Return $WIM_MOUNT_LIST
    EndFunc

    [/autoit]

    Projekt code:

    [autoit]

    Func GetMountedImages(ByRef $controlID)
    $WimMountList = _WIM_GetMountedImages()
    If $WimMountList = 0 Then Return

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

    For $i = 1 To Ubound($WimMountList, 1)
    $MountedForRW = "R/W"
    If $WimMountList[$i-1][3] = 0 Then $MountedForRW = "R"
    _GUICtrlListView_AddItem($controlID, $MountedForRW, $i-1)
    _GUICtrlListView_AddSubItem($controlID, $i-1, $WimMountList[$i-1][1], 1, 1)
    _GUICtrlListView_AddSubItem($controlID, $i-1, $WimMountList[$i-1][0], 2, 2)
    _GUICtrlListView_AddSubItem($controlID, $i-1, $WimMountList[$i-1][2], 3, 3)
    Next

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

    ; autosize column header
    _GUICtrlListView_SetColumnWidth($controlID, 0, $LVSCW_AUTOSIZE_USEHEADER)
    _GUICtrlListView_SetColumnWidth($controlID, 1, $LVSCW_AUTOSIZE_USEHEADER)
    _GUICtrlListView_SetColumnWidth($controlID, 2, $LVSCW_AUTOSIZE_USEHEADER)
    _GUICtrlListView_SetColumnWidth($controlID, 3, $LVSCW_AUTOSIZE_USEHEADER)

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

    EndFunc

    [/autoit]

    Habe es sowohl mit 1 auch 2 mounted images getestet. Funktioniert nice! :thumbup:

    Edit: Fehlende Fehlerüberprüfung hinzugefügt. Fertig!

    Einmal editiert, zuletzt von Trolleule1337 (5. Februar 2013 um 15:34)