1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Trolleule1337

Beiträge von Trolleule1337

  • DLL Call - Dism API DismOpenSession

    • Trolleule1337
    • 31. Januar 2013 um 16:13

    Der gibt mir eine 1 aus!

    Hier ein Beispiel, falls du noch nicht dem Link gefolgt bist:

    Zitat

    HRESULT hr = S_OK;
    DismSession Session = DISM_SESSION_DEFAULT;
    hr = DismOpenSession(L"C:\\Mount\\", NULL, NULL, &Session);

    Edit: Schau mal hier: Die API muss erst initialisiert werden. ?(

    http://msdn.microsoft.com/en-us/library/…p/hh824795.aspx

  • DLL Call - Dism API DismOpenSession

    • Trolleule1337
    • 31. Januar 2013 um 15:15

    ohhja stimmt, zugegeben... ich bin nicht fit in dem Bereich. Aber selbst mit einem Struct klappt es nicht, wobei ich ja diesmal nur einen Parameter habe, meine das "UINT DismSession". Hast du ne idee wie ich das hinbekomme??

    Habe nochmal mehrere Versuche gestartet:

    [autoit]

    DismSession("C:\\mounted\\")

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

    Func DismSession($sImagePath, $sWindowsDirectory = 0, $sSystemDrive = 0)

    Global Const $tagSession = "UINT DismSession"
    $dismapi = "C:\Program Files (x86)\Windows Kits\8.0\Assessment and Deployment Kit\Deployment Tools\amd64\DISM\dismapi.dll"
    $test = DllStructCreate($tagSession)
    $bla = DllStructGetPtr($test)

    Local $aResult = DllCall($dismapi, "lresult", "DismOpenSession", _
    "wstr", $sImagePath, _
    "wstr", $sWindowsDirectory, _
    "wchar*", $sSystemDrive, _
    "ptr", $bla _ ;DllStructGetPtr($tagSession) _
    )

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

    ConsoleWrite($tagSession & @CRLF)
    ConsoleWrite($bla & @CRLF)
    ConsoleWrite($aResult & @CRLF)

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

    _ArrayDisplay($aResult)
    EndFunc

    [/autoit]

    Output ist:

    Zitat

    UINT DismSession
    0x040FC090
    0

  • DLL Call - Dism API DismOpenSession

    • Trolleule1337
    • 31. Januar 2013 um 14:56

    Hi,
    hab hier noch nen DLL Call den ich nicht zum Laufen bekomme. Kann bitte wer helfen!

    Zitat

    HRESULT WINAPI DismOpenSession(
    _In_ PCWSTR ImagePath,
    _In_opt_ PCWSTR WindowsDirectory,
    _In_opt_ WCHAR* SystemDrive,
    _Out_ DismSession* Session
    );

    Parameter:

    msdn

    Bisheriger Versuch:

    [autoit]

    DismSession("C:\mounted")

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

    Func DismSession($sImagePath, $sWindowsDirectory = 0, $sSystemDrive = 0)

    Global Const $tagSession = "UINT DismSession"
    $dismapi = "C:\Program Files (x86)\Windows Kits\8.0\Assessment and Deployment Kit\Deployment Tools\amd64\DISM\dismapi.dll"


    Local $aResult = DllCall($dismapi, "lresult", "DismOpenSession", _
    "wstr", $sImagePath, _
    "wstr", $sWindowsDirectory, _
    "wchar*", $sSystemDrive, _
    "ptr", DllStructGetPtr($tagSession) _
    )
    ConsoleWrite($aResult & @CRLF)
    EndFunc

    [/autoit]

    Danke schonmal!

  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • Trolleule1337
    • 31. Januar 2013 um 14:02

    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!

  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • Trolleule1337
    • 29. Januar 2013 um 19:51

    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)

  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • Trolleule1337
    • 29. Januar 2013 um 14:52

    ok sieht schon besser aus, was sagst du dazu?

    UDF code:

    [autoit]

    Func _WIM_GetMountedImages()

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

    Local $WIM_MOUNT_LIST[1][4] ; ReDim later
    Local $tWIM_MOUNT_LIST = DllStructCreate($tagWIM_MOUNT_LIST & ";" & $tagWIM_MOUNT_LIST) ; reserved for two images
    Local $pWIM_MOUNT_LIST = DllStructGetPtr($tWIM_MOUNT_LIST)

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

    $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]

    ; define mount count
    If $aResult[2] = 0 Then Return 0 ; no image mounted
    If $aResult[2] = 1048 Then $pdwImageCount = 1
    If $aResult[2] = 2096 Then $pdwImageCount = 2

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

    ReDim $WIM_MOUNT_LIST[$pdwImageCount][4]

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

    $k = 0 ; cell
    For $i = 1 To $pdwImageCount ; row
    For $j = 1 To Ubound($WIM_MOUNT_LIST, 2) ; 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]
  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • Trolleule1337
    • 29. Januar 2013 um 13:41

    _WIM_GetImageCount gibt nur die Anzahl der im wim enthaltenen Images zurück. Die Funktion hat nichts mit mounted Images zu tun. An ein 2D Array hab ich auch gedacht. Glaubst du das ist besser oder so lassen?

  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • Trolleule1337
    • 29. Januar 2013 um 01:40

    So hab das Ganze mal aufgeräumt und den Return aufbereitet, sodass ich die Informationen in einem Listview darstellen kann.

    Hier der Code für die UDF:

    [autoit]

    Func _WIM_GetMountedImages()

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

    Local $WIM_MOUNT_LIST[3]
    Local $tWIM_MOUNT_LIST = DllStructCreate($tagWIM_MOUNT_LIST & ";" & $tagWIM_MOUNT_LIST) ; reserved for two images
    Local $pWIM_MOUNT_LIST = DllStructGetPtr($tWIM_MOUNT_LIST)

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

    $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][/autoit][autoit]

    ; first structure
    For $i = 1 To 4
    $WIM_MOUNT_LIST[1] &= DllStructGetData($tWIM_MOUNT_LIST, $i)
    If $i = 4 Then ExitLoop
    $WIM_MOUNT_LIST[1] &= "|"
    Next

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

    If $aResult[2] = 1048 Then
    $pdwImageCount = 1
    $WIM_MOUNT_LIST[0] = $pdwImageCount
    ReDim $WIM_MOUNT_LIST[$pdwImageCount+1]
    Return $WIM_MOUNT_LIST
    Else
    $pdwImageCount = 2
    $WIM_MOUNT_LIST[0] = $pdwImageCount
    ReDim $WIM_MOUNT_LIST[$pdwImageCount+1]
    EndIf

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

    ; second structure
    For $i = 5 To 8
    $WIM_MOUNT_LIST[2] &= DllStructGetData($tWIM_MOUNT_LIST, $i)
    If $i = 8 Then ExitLoop
    $WIM_MOUNT_LIST[2] &= "|"
    Next

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

    Return $WIM_MOUNT_LIST
    EndFunc

    [/autoit]

    Hier der Code meines Projekts:

    [autoit]

    Func GetMountedImages()
    $WimMountList = _WIM_GetMountedImages()

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

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

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

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

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

    EndFunc

    [/autoit]

    Leider bin ich nicht zu 100% zufrieden, die Art wie ich es umgesetzt habe fühlt sich unsauber und unflexibel an. Was meint ihr?

    Danke an Alle!

    Dateien

    Bild listview nice.png 4,64 kB – 0 Downloads
  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • Trolleule1337
    • 28. Januar 2013 um 19:38

    ja man habs gerade auch rausgefunden ^^ Danke für deine/eure Mühen!

    Hab wahrscheinlich net kapiert, was du meintest, sorry!

  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • Trolleule1337
    • 28. Januar 2013 um 18:45

    Danke für die Mühe jung, leider geben beiden Varianten 0 zurück. Habe jetzt nicht nachgesehen warum, da funkys Lösung funktioniert.

    ich muss nur noch wissen wie ich das Array of Struct auslese? ?(

    Zitat

    Local $tWIM_MOUNT_LIST = DllStructCreate($tagWIM_MOUNT_LIST & ";" & $tagWIM_MOUNT_LIST)

    Deine Variante:

    Zitat

    Local $tWIM_MOUNT_LIST = DllStructCreate($tagWIM_MOUNT_LIST & $tagWIM_MOUNT_LIST)

    [autoit]

    $aReturn[1] = DllStructGetData($tWIM_MOUNT_LIST, "WimPath")
    $aReturn[2] = DllStructGetData($tWIM_MOUNT_LIST, "MountPath")
    $aReturn[3] = DllStructGetData($tWIM_MOUNT_LIST, "ImageIndex")
    $aReturn[4] = DllStructGetData($tWIM_MOUNT_LIST, "MountedForRW")

    [/autoit]
  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • Trolleule1337
    • 28. Januar 2013 um 18:08

    yeah funkey... du bist funky. Läuft!

    Ich hab nun 2 images "gemountet", damit das klappt, brauchen wir die zeile:

    Zitat

    Local $tWIM_MOUNT_LIST = DllStructCreate($tagWIM_MOUNT_LIST & ";" & $tagWIM_MOUNT_LIST)

    sonst klappt es nicht. Die Daten des ersten images rufe ich so ab:

    [autoit]


    Local $tWIM_MOUNT_LIST = DllStructCreate($tagWIM_MOUNT_LIST & ";" & $tagWIM_MOUNT_LIST)
    Local $pWIM_MOUNT_LIST = DllStructGetPtr($tWIM_MOUNT_LIST)

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

    $aResult = DllCall("wimgapi.dll", "bool", "WIMGetMountedImages", "ptr", $pWIM_MOUNT_LIST, "dword*", DllStructGetSize($tWIM_MOUNT_LIST))

    $aReturn[1] = DllStructGetData($tWIM_MOUNT_LIST, "WimPath")
    $aReturn[2] = DllStructGetData($tWIM_MOUNT_LIST, "MountPath")
    $aReturn[3] = DllStructGetData($tWIM_MOUNT_LIST, "ImageIndex")
    $aReturn[4] = DllStructGetData($tWIM_MOUNT_LIST, "MountedForRW")

    [/autoit]

    Aber wie die des 2ten???

    Danke jung :thumbup:

  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • Trolleule1337
    • 28. Januar 2013 um 17:17

    ja klappt denke ich, bekomme zurück:

    Zitat

    Return value: 1
    $aResult[1]: 0x03B9F628
    Bytes received: 1048

    Hmm, müsste ich nicht auch noch die Daten aus dem struct zurück bekommen, also WimPath, MountPath, ImageIndex undMountedForRW??

    Danke!

  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • Trolleule1337
    • 28. Januar 2013 um 16:21

    ok habe "ptr" mit "dword*" ersetzt.

    Zitat

    Und wahrscheinlich wirst du mehr als nur zwei Strukturen brauchen. Deswegen kommt wahrscheinlich auch die 0 zurück.

    Wie mache ich das jetzt?

    [autoit]

    Local $tWIM_MOUNT_LIST = DllStructCreate($tagWIM_MOUNT_LIST & ";" & $tagWIM_MOUNT_LIST)

    [/autoit]

    also egal wie viele & ";" & $tagWIM_MOUNT_LIST ich noch dran hänge, es ändert nur was am hex wert.

    Output:

    Zitat

    Return value: 0
    $aResult[1]: 0x03BFF580
    Bytes received: 1048

  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • Trolleule1337
    • 28. Januar 2013 um 16:05

    danke, ich hab nochmal bisschen mit den parametern gespielt, aber bekomme nur 0 als return, allerdings auch bytes:

    Zitat

    Return value: 0
    Bytes received: 0x03D1F580

    Zitat


    BOOL
    WINAPI
    WIMGetMountedImages(
    PWIM_MOUNT_LIST pMountList,
    PDWORD pcbMountListLength
    );

    Parameters
    pMountList
    [in opt] A pointer to a buffer that receives the array of WIM_MOUNT_LIST structures. This parameter can be NULL if the data is not required.
    pcbMountListLength
    [in out] Pointer to a variable that receives the size of the buffer pointed to by the pMountList parameter, in bytes. When the function returns, this variable contains the size of the data copied to pMountList.
    Return Value
    If the function succeeds, then the return value is nonzero. If the function fails, then the return value is zero. To obtain extended error information, call the GetLastError function. If the buffer specified by the pcbBufferSize parameter is not large enough to hold the data, the function set LastError to ERROR_INSUFFICIENT_BUFFER and stores the required buffer size in the variable pointed to by pcbBufferSize.

    Alles anzeigen

    Aktuell ist ein image gemounted, also müsste eine Ausgabe möglich sein. Allerdings ist die Funktion veraltet und wurde von dieser ersetzt.
    Die finde ich aber noch schwerer ?(

    Dateien

    WimConstants.au3 11,23 kB – 288 Downloads wimgapi.au3 60,93 kB – 289 Downloads
  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • Trolleule1337
    • 28. Januar 2013 um 14:41

    Danke, aber ich schaffs trotzdem nicht ?(

  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • Trolleule1337
    • 28. Januar 2013 um 03:30

    Hi Leute,
    ich bekomme einfach folgende Funktion nicht aufgerufen:

    Code
    BOOL
    WINAPI
    WIMGetMountedImages(
        PWIM_MOUNT_LIST pMountList,
        PDWORD          pcbMountListLength
        );

    Hier der Link zur Funktion und dessen Parameter:
    hier

    Die DLL die verwendet wird ist wimgapi.dll

    Die Funktion soll prüfen, welche Images "gemounted" sind. Leider macht es keinen Sinn die DLL anzubieten, da man erstmal ein Image mounten muss um überhaupt einen Return zu bekommen und das ist mit etwas Aufwand verbunden.

    Folgendes habe ich versucht:

    [autoit]


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

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

    ; #STRUCTURE# ===================================================================================================================
    ; Name...........: $tagWIM_MOUNT_INFO_LEVEL1
    ; Description ...: Contains information retrieved by the _WIM_GetMountedImageList function.
    ; Fields ........: WimPath - Specifies the full path to the .wim file.
    ; MountPath - Specifies the full path to the directory where the image is mounted.
    ; ImageIndex - Specifies the image index within the .wim file specified in WimPath.
    ; MountFlags - Specifies the current state of the mount point.
    ; | $WIM_MOUNT_FLAG_MOUNTED - The image is actively mounted.
    ; | $WIM_MOUNT_FLAG_MOUNTING - The image is in the process of mounting.
    ; | $WIM_MOUNT_FLAG_REMOUNTABLE - The image is not mounted, but is capable of being remounted.
    ; | $WIM_MOUNT_FLAG_INVALID - The image mount point is no longer valid.
    ; | $WIM_MOUNT_FLAG_NO_WIM - TThe WIM file backing the mount point is missing or inaccessible.
    ; | $WIM_MOUNT_FLAG_NO_MOUNTDIR - The image mount point has been removed or replaced.
    ; | $WIM_MOUNT_FLAG_MOUNTDIR_REPLACED - The mount point has been replaced with by a different mounted image.
    ; | $WIM_MOUNT_FLAG_READWRITE - The image has been mounted with read-write access.
    ; Author ........: Jonathan Holmgren (Homes32)
    ; Remarks .......:
    ; ===============================================================================================================================

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

    _Test()
    Func _Test()

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

    Local $a[2] = [DllStructCreate($tagWIM_MOUNT_LIST),DllStructCreate($tagWIM_MOUNT_LIST)]

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

    Local $aReturn1[10] ; array to hold the return data
    Local $pWimInfo1 = DllStructCreate($tagWIM_MOUNT_LIST)
    Local $test = DllStructGetSize($a)

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

    ;~ MsgBox(0, "safdad", $test)

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

    ;~ $aResult = DllCall($ghwimgapi, "bool", "WIMGetMountedImages", _
    ;~ "ptr", DllStructGetPtr($pWimInfo1), _
    ;~ "dword", DllStructGetSize($pWimInfo1))
    ;~ If @error Then Return SetError(@error, @extended, 0)

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

    $aResult = DllCall($ghwimgapi, "bool", "WIMGetMountedImages", _
    "ptr", DllStructGetPtr($a), _
    "ptr", DllStructGetPtr($test))

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

    $aResult1 = DllCall($ghwimgapi, "bool", "WIMGetMountedImages", _
    "ptr", DllStructGetPtr($pWimInfo1), _
    "ptr", DllStructGetPtr($test))
    ;~ If @error Then
    ;~ MsgBox(0, "safdad", @error & " " & @extended)
    _ArrayDisplay($aResult)
    _ArrayDisplay($aResult1)
    MsgBox(0, "safdad", $aResult & " " & $aResult1)

    ;~ Return $aResult
    ;~ Return SetError(@error, @extended, 0)
    ;~ EndIf

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

    EndFunc

    [/autoit]

    Hat jemand eine Idee wie ich das zum laufen bekomme??

    Danke schonmal!

  • Input Boxen in SubItems eines ListView Controls

    • Trolleule1337
    • 18. Januar 2013 um 19:27

    Hey ich hab jetzt hier ein fertiges C# Projekt gefunden, mit dem man die Controls innerhalb des ListViews ganz einfach austauschen kann.

    Ich hab eine DLL und C# Projektdateien. Verfügt jemand über die Erfahrung, das Ganze in AutoIt einzubinden???

    Hier ist der Link zu dem Projekt:

    http://www.codeproject.com/Articles/6646/…stView-subitems


    Danke schonmal!

    Dateien

    ListViewEx_src.zip 32,02 kB – 257 Downloads
  • Input Boxen in SubItems eines ListView Controls

    • Trolleule1337
    • 14. Januar 2013 um 21:49

    Ich hatte eben genau die gleiche idee: Das mit einem child gui zu machen, allerdings wird das child gui nur das Input Control beinhalten. Ja setz den code mal rein bitte.

    Hmm also wie wärs denn wenn wir dem child gui nur das Input Control geben?

  • Input Boxen in SubItems eines ListView Controls

    • Trolleule1337
    • 14. Januar 2013 um 21:21

    @IPU genial man, wie hast du das so schnell hinbekommen?? sieht ja schon sau gut aus, aber kann doch nicht sein, dass man die Reihen nicht markieren kann ;)

    Das kriegen wir doch sicher noch hin oder?

    Häng doch bitte deinen code an und kommentier auch bitte mal die zeilen, die ich brauche um die input felder auszulesen. Danke :)

    BugFix
    Deine Lösung ist schon ziemlich gut, aber wenn man mehrere Stunden damit verbracht hat eine Lösung herbeizuführen, dann geht es einem danach nicht mehr um die Lösung sondern darum, es irgendwie umzusetzen. Also es geht ums Prinzip! Keine schöne Angewohnheit :huh:

    @Make-Grafik:
    leider nein, habe schon beim Entwickler angefragt aber bisher keine Antwort bekommen. Einer von Ihnen scheint schon seit 3 Jahren inaktiv zu sein...

  • Input Boxen in SubItems eines ListView Controls

    • Trolleule1337
    • 14. Januar 2013 um 15:03

    Danke für den Tipp. Habe bereits eine ähnliche Lösung im englischen Forum gefunden. Aber es ist leider nicht das gleiche.

    Das einzig geniale an dem Programm (ich meine den AddonKopierer) ist, dass sich die Länge der InputBox synchron mit der Länge der Spalte verändert. Es macht also einen soliden Eindruck. Soweit ich weiß wurde das Programm in Visual Basic geschrieben.

    Gibt es keine bekannte Lösung dazu?


    EDIT:

    Also möglich sollte es sein. Ich habe hier mal ein Beipsiel angefertigt, dass zu mindest schon mal ein Edit Control an der richtigen Stelle anzeigt, allerdings vergraut es wenn ich den Focus verliere:

    [autoit]

    #include <GuiEdit.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <WinAPI.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ComboConstants.au3>
    #include <Constants.au3>
    #include <Array.au3>
    #include <String.au3>
    #include <ListViewConstants.au3>
    #include <GuiTab.au3>
    #include <TreeViewConstants.au3>
    #include <GuiListBox.au3>
    #include <StructureConstants.au3>
    #include <GuiListView.au3>
    #include <UpDownConstants.au3>

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

    Opt("GuiCloseOnESC", 0)

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

    Global $hEdit, $hDC, $hBrush, $Item = -1, $SubItem = 0

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

    Global $Style = BitOR($WS_CHILD, $WS_VISIBLE, $ES_AUTOHSCROLL, $ES_LEFT)

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

    $hGUI = GUICreate("ListView Subitems edit in place", 400, 300)

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

    $hListView = _GUICtrlListView_Create($hGUI, "Items|SubItems", 2, 2, 296, 196, BitOR($LVS_EDITLABELS, $LVS_REPORT))
    _GUICtrlListView_SetExtendedListViewStyle($hListView, $LVS_EX_GRIDLINES)

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

    For $i = 1 To 10
    _GUICtrlListView_AddItem($hListView, "Item " & $i)
    _GUICtrlListView_AddSubItem($hListView, $i - 1, "SubItem " & $i, 1)
    Next

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

    $Item = 1
    $SubItem = 1
    Local $iSubItemText = _GUICtrlListView_GetItemText($hListView, $Item, $SubItem)
    Local $iLen = _GUICtrlListView_GetStringWidth($hListView, $iSubItemText)
    Local $aRect = _GUICtrlListView_GetSubItemRect($hListView, $Item, $SubItem)
    $hEdit = _GUICtrlEdit_Create($hGUI, $iSubItemText, $aRect[0] + 6, $aRect[1], $iLen + 10, 17, $Style)
    _GUICtrlEdit_SetSel($hEdit, 0, -1)
    _WinAPI_SetFocus($hEdit)
    $hDC = _WinAPI_GetWindowDC($hEdit)
    $hBrush = _WinAPI_CreateSolidBrush(0)
    FrameRect($hDC, 0, 0, $iLen + 10 , 17, $hBrush)

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

    ;~ GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    ;~ GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    ;~ GUICtrlSetState($hEdit, $GUI_FOCUS)

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

    GUISetState()

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

    Do
    GUICtrlSetState($hEdit, $GUI_FOCUS)
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit]

    Hat jemand eine Idee wie ich das Edit Control aktiv halte, sodass ich es jederzeit bearbeiten kann?

    Danke jungs!

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™