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

  • Koordinaten relativ zu einem bestimmten control

    • Trolleule1337
    • 30. Juni 2013 um 23:18

    Bin leider ein perfektionist, daher die genauigkeit, aber ich habe aktuell eine coole Lösung gefunden und zwar mit CoordMode 2 kann man paar nützliche Sachen anstellen.
    Klar weiß ich wann man ByRef benutzt, sonst würde ich es nicht machen :D

    Wie du siehst verwende ich keine globale Variable...

  • Koordinaten relativ zu einem bestimmten control

    • Trolleule1337
    • 29. Juni 2013 um 21:01

    Jetzt hast du die Büchse der Pandora geöffnet mein Freund :D

    Helfen kann man mir nicht, ist einfach schon zu viel Code und dir fehlen die module.
    [Blockierte Grafik: http://img11.imageshack.us/img11/2909/e37.png]

    Wird ein mega nützliches Programm. Allerdings nicht so schwul wie alle anderen Wim Modifier die noch alle die Batch im Hintergrund benutzen bzw. die Powershell snippets. Meine Funktionen greifen alle direkt auf die jeweiligen apis zu, dazu habe ich die DISM API von Windows 8 in AutoIT geschrieben, die es mir erlaubt direkt updates etc zu integrieren um das nur als Beispiel zu nennen. Die anderen machen das alle noch über die Dism.exe. Layout technisch will ich es an dieser stelle nicht vergleichen :D
    Die UDF zu DISM habe ich vor 4 Monaten unter Projekte hochgeladen, falls jemand Interesse hat!

    Hier mal ein kurzer Auszug vom Main GUI:

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ComboConstants.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>
    #include <File.au3>
    #include <GuiTreeView.au3>

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

    ; #Libraries# ===================================================================================================================
    #include "libs/DISM.au3"
    #include "libs/wimgapi.au3"
    #include "libs/GUICtrlSetOnEventEx.au3"
    #include "libs/OwnTab.au3"
    #include "libs/GUICtrlPic.au3"
    ; ===============================================================================================================================

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

    ; #Modules# =====================================================================================================================
    #include "modules/common.au3"
    #include "modules/metadata.au3"
    #include "modules/features.au3"
    ; ===============================================================================================================================

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

    ; #ToDo# =====================================================================================================================
    ; Alle controls die relativ positioniert sind untereinander. Könnte Probleme mit definierten Variablen geben, das diese dann noch net definiert wurden
    ; =============================================================================================================================

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

    Opt("GUIOnEventMode", 1)

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

    Const $BinaerMode = 0
    Const $TextMode = 1

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

    Local $GUIName = "WIM MetaData Modifier - Batch", $ProgramName = "WIM Modifier", $ResultGUIName = "Imaging Operaion in Progress"
    Local $sWimFile, $srcInput, $hWim, $ImgCount, $ImgName, $aXML, $mdListItemCounter ; path to wim file ; Input control ; handle to wim ; count of wim images ; name of wim images ; metadata buffer ; counter of metadata list items

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

    #Region - initialize APIs
    Local $initAPI = InitializeAPIs()
    If @error Then
    MsgBox(16, $ProgramName, "API report: " & @error)
    Exit
    EndIf
    #EndRegion - initialize APIs

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

    CreateMainGUI($GUIName, $ProgramName, $srcInput, $hWim, $ImgCount, $ImgName, $aXML, $mdListItemCounter) ; create main GUI

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: CreateMainGUI
    ; Description ...: Creates the main GUI
    ; Syntax.........: CreateMainGUI(ByRef $GUIName, ByRef $ProgramName, ByRef $srcInput)
    ; Parameters ....: ByRef $GUIName - Reference to GUI name
    ; ByRef $ProgramName - Reference to porgram name
    ; ByRef $srcInput - Handle of wim source control
    ; Return values .:
    ; Author(s) .....: André Cut
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........:
    ; Example .......:
    ;
    ; ===============================================================================================================================
    Func CreateMainGUI(ByRef $GUIName, ByRef $ProgramName, ByRef $srcInput, ByRef $hWim, ByRef $ImgCount, ByRef $ImgName, ByRef $aXML, ByRef $mdListItemCounter)
    Local $nWidth = 600, $nHeight = 550, $InputWidth = 384, $Pic = @ScriptDir & "\temp\arrow-down.png" ;down-arrow-icon.png"
    Local $CheckboxExOpt[4], $mdCheckBoxStatus[3]
    Local $AList = ObjCreate("System.Collections.ArrayList")

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

    ; register WM_NOTIFY to activate sort function in update listview and support subtabs
    ;~ GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    ; register WM_COMMAND to activate update wim image info label, if image input updown control has changed
    ;~ GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    $mGUI = GUICreate($GUIName, $nWidth, $nHeight, (@DesktopWidth - $nWidth) / 2, (@DesktopHeight - $nHeight) / 2)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents") ; close gui
    $cGUI_Change = GUICreate("Child_Change", 300, 300, 250, 150, BitOR($WS_CHILD, $WS_TABSTOP), -1, $mGUI) ; width height $WS_EX_CLIENTEDGE
    GUISwitch($mGUI)
    $Tab = GUICtrlCreateTab(2, 2, -1, -1) ; params get changed later
    DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", "Explorer", "wstr", 0) ; tab control style definition
    $dCoord = GetCtrlCoordinates($mGUI, $Tab)
    GUICtrlSetPos($Tab, $dCoord.Item("t_left"), $dCoord.Item("t_top"), $dCoord.Item("t_right"), $dCoord.Item("t_bottom"))
    $TabChange = GUICtrlCreateTabItem("Change")
    GUISwitch($cGUI_Change)
    WinMove($cGUI_Change, "", $dCoord.Item("t_left"), $dCoord.Item("TabPos_y") + $dCoord.Item("tt_top"), $dCoord.Item("t_right"), $dCoord.Item("t_bottom")-$dCoord.Item("tt_top"))
    $cTab_Change = GUICtrlCreateTab(0, 0, $dCoord.Item("t_right"), $dCoord.Item("t_bottom")-$dCoord.Item("tt_top"))
    DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", "Explorer", "wstr", 0) ; tab control style definition
    $cTabChange_MetaData = GUICtrlCreateTabItem("MetaData")
    $dCoord = GetCtrlCoordinates($cGUI_Change, $cTab_Change)
    GUICtrlCreateGroup("WIM", $dCoord.Item("g1_left"), $dCoord.Item("g1_top"), $dCoord.Item("g1_width"), 350) ; create wim group control
    Opt("GUICoordMode", 0) ; relative position
    GUICtrlCreateGroup("Options", 0, 350 + $dCoord.Item("ctrl_s2"), $dCoord.Item("g1_width"), 80) ; create options group control
    $mChangeBtn = GUICtrlCreateButton("Change", $dCoord.Item("g1_width") - 76, 80 + $dCoord.Item("ctrl_s2"), 76, 25) ; create change metadata btn control
    Opt("GUICoordMode", 1) ; absolute position
    GUICtrlCreateLabel("Source", $dCoord.Item("g2_left"), $dCoord.Item("g2_top")+4, 38, 18) ; create source label control
    $Selector = GUICtrlCreateButton(">", $dCoord.Item("g1_width") - $dCoord.Item("g2_left"), $dCoord.Item("g2_top"), 20, 22) ; create history archive btn
    Opt("GUICoordMode", 0) ; relative position
    $mdSrcBrowseBtn = GUICtrlCreateButton("Browse...", -82, 0, 80, 22) ; create browse-source control
    $srcInput = GUICtrlCreateInput("", -$InputWidth - $dCoord.Item("ctrl_s2"), 0, $InputWidth, 22) ; create wim-source input control
    Opt("GUICoordMode", 1) ; absolute position
    GUICtrlCreateGroup("Images", $dCoord.Item("g2_left"), 120, 260, 136) ; create image group control
    Opt("GUICoordMode", 0) ; relative position
    $imgTreeView = GUICtrlCreateTreeView($dCoord.Item("g1_left"), $dCoord.Item("ctrl_s1"), 260 - $dCoord.Item("g1_left")*2, 136 - $dCoord.Item("g_bottom"), BitOR($TVS_DISABLEDRAGDROP, $TVS_CHECKBOXES, $WS_GROUP, $WS_TABSTOP)) ; create image treeview control
    Opt("GUICoordMode", 1) ; absolute position
    Local $aPos = ControlGetPos($mGUI, "", $imgTreeView)
    $loadImages = _GUICtrlPic_Create($Pic, $aPos[0] + $aPos[2]-30, $aPos[1]-27, 32, 32, BitOR($SS_CENTERIMAGE, $SS_NOTIFY)) ;, $WS_EX_DLGMODALFRAME) ; create load wim images to treeview control btn
    GUICtrlCreateLabel("New Image Name", $dCoord.Item("g2_left"), 280, 86, 18) ; create new image name label control
    Opt("GUICoordMode", 0) ; relative position
    $nInput = GUICtrlCreateInput("Windows 7", 86 + $dCoord.Item("ctrl_s1"), -4, 178, 22) ; create new image name input control
    $nList = GUICtrlCreateList("", 178 + $dCoord.Item("ctrl_s1"), 0, 258, 98, $WS_TABSTOP, $LBS_NOTIFY) ; create image new name list control
    $DelListItemBtn = GUICtrlCreateButton("Delete", -$dCoord.Item("ctrl_s1") - 76, 35, 76, 25) ; create delete btn control
    $InsListItemBtn = GUICtrlCreateButton("Insert", -$dCoord.Item("ctrl_s2") - 76, 0, 76, 25) ; create insert new image name btn control
    GUICtrlSetState($InsListItemBtn, $GUI_FOCUS)
    Opt("GUICoordMode", 1) ; absolute position
    $exOptCheckbox = GUICtrlCreateCheckbox("Explicit Options", $dCoord.Item("g2_left"), 434, 90, 20) ; create explicit options checkbox control
    $exOptGroup_x = $dCoord.Item("g2_left") + 90 + $dCoord.Item("ctrl_s1") ; create explicit options group control
    GUICtrlCreateGroup("", $exOptGroup_x, 398 + $dCoord.Item("ctrl_s2"), 450, 80 - $dCoord.Item("ctrl_s2")*2)
    Opt("GUICoordMode", 0) ; relative position
    ; create explicit options checkbox controls
    $CheckboxExOpt[0] = GUICtrlCreateCheckbox("Name", $dCoord.Item("g2_x_s"), $dCoord.Item("g2_y_s"), 86, 18)
    $CheckboxExOpt[1] = GUICtrlCreateCheckbox("Description", 86 + $dCoord.Item("ctrl_s2"), 0, 80, 18)
    $CheckboxExOpt[3] = GUICtrlCreateCheckbox("Display Description", 0, 18, 110, 18)
    $CheckboxExOpt[2] = GUICtrlCreateCheckbox("Display Name", -86 - $dCoord.Item("ctrl_s2"), 0, 86, 18)
    #Region - params for assignment
    $AList.add($nInput)
    $AList.add($nList)
    $AList.add($CheckboxExOpt)
    $AList.add($imgTreeView)
    $AList.add($exOptCheckbox)
    #EndRegion - params for assignment
    #Region - user functions
    GUICtrlSetOnEventEx($mdSrcBrowseBtn, "WimBrowseFiles") ; browse for wim files
    GUICtrlSetOnEventEx($loadImages, "LoadImagesToTreeView", $imgTreeView) ; load wim images into treeview
    GUICtrlSetOnEventEx($InsListItemBtn, "InsertListItem", $AList, 1) ; insert name to list
    GUICtrlSetOnEventEx($DelListItemBtn, "DeleteListItem", $AList, 1) ; delete name from list
    GUICtrlSetOnEventEx($exOptCheckbox, "SetExplicitOptionsStatus", $AList, 1) ; activate/ deactivate options
    GUICtrlSetOnEventEx($mChangeBtn, "ChangeMetaData", $AList, 1)
    SetExplicitOptionsStatus($AList) ; disable ctrls on first start
    #EndRegion - user functions
    ; ===== Tab Features =====
    Opt("GUICoordMode", 1) ; absolute position
    $cTabChange_Features = GUICtrlCreateTabItem("Features")
    GUICtrlCreateGroup("WIM", $dCoord.Item("g1_left"), $dCoord.Item("g1_top"), $dCoord.Item("g1_width"), 92) ; create wim group control
    Opt("GUICoordMode", 0) ; relative position
    $fGroupHeight = $dCoord.Item("TabPos_height") - $dCoord.Item("g1_top") - (92 + $dCoord.Item("ctrl_s2")) - 25 - $dCoord.Item("ctrl_s2")*2
    GUICtrlCreateGroup("Features", 0, 92 + $dCoord.Item("ctrl_s2"), $dCoord.Item("g1_width"), $fGroupHeight)
    $fListViewHeight = $fGroupHeight - $dCoord.Item("g1_y_s")*2 - 25 - $dCoord.Item("ctrl_s2")
    $fListView = GUICtrlCreateListView("Feature|State|New State", $dCoord.Item("g2_left"), $dCoord.Item("g1_y_s"), $dCoord.Item("g1_width") - $dCoord.Item("g2_left")*2, $fListViewHeight, $LVS_REPORT, BitOR($WS_EX_CLIENTEDGE,$LVS_EX_CHECKBOXES))
    _GUICtrlListView_SetColumnWidth($fListView, 0, 260)
    $DisableFeatureBtn = GUICtrlCreateButton("Disable", $dCoord.Item("g1_width") - $dCoord.Item("g2_left")*2 - 76, $fListViewHeight + $dCoord.Item("ctrl_s2"), 76, 25) ; create disable feature btn control
    GUICtrlSetOnEvent($DisableFeatureBtn, "DisableFeature")
    $EnableFeatureBtn = GUICtrlCreateButton("Enable", -76 - $dCoord.Item("ctrl_s2"), 0, 76, 25) ; create enable feature btn control
    GUICtrlSetOnEvent($EnableFeatureBtn, "EnableFeature")
    Opt("GUICoordMode", 1) ; absolute position
    GUICtrlCreateLabel("Source", $dCoord.Item("g2_left"), $dCoord.Item("g2_top"), 38, 18) ; create source label control
    Opt("GUICoordMode", 0) ; relative position
    $fSrcInput = GUICtrlCreateInput("", 38 + $dCoord.Item("ctrl_s1"), -4, $InputWidth, 22) ; create wim-source input control
    $fSrcBrowseBtn = GUICtrlCreateButton("Browse...", $InputWidth + $dCoord.Item("ctrl_s1"), 0, 80, 22) ; create browse-source control
    GUICtrlSetOnEventEx($fSrcBrowseBtn, "WimBrowseFiles") ; browse for wim files
    $fSelector = GUICtrlCreateButton(">", 82, 0, 20, 22) ; create history archive btn
    Opt("GUICoordMode", 1) ; absolute position
    GUICtrlCreateLabel("Image", $dCoord.Item("g2_left"), 100, 38, 18) ; create image label control
    Opt("GUICoordMode", 0) ; relative position
    $fImgInput = GUICtrlCreateInput("", 38 + $dCoord.Item("ctrl_s1"), -4, 38, 22)
    $fImgUpDown = GUICtrlCreateUpdown($fImgInput, BitOR($UDS_WRAP, $UDS_NOTHOUSANDS)) ; combines updown and input control
    GUICtrlSetLimit($fImgUpDown, $ImgCount, 1)
    $fWimImageInfo = GUICtrlCreateLabel("", 38 + $dCoord.Item("ctrl_s1"), 4, 210, 18) ; create wim image info label control
    Opt("GUICoordMode", 1) ; absolute position
    $fChangeBtn = GUICtrlCreateButton("Change", $dCoord.Item("g1_left") + $dCoord.Item("g1_width") - 76, $dCoord.Item("g1_top") + 92 + $dCoord.Item("ctrl_s2") + $fGroupHeight + $dCoord.Item("ctrl_s2"), 76, 25)
    GUICtrlSetOnEvent($fChangeBtn, "SetFeatures")
    GUICtrlSetOnEvent($fChangeBtn, "ResultGUI1")


    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW, $cGUI_Change) ; show parent gui
    GUISwitch($mGUI)
    $TabIntegrate = GUICtrlCreateTabItem("Integrate")
    $TabMount = GUICtrlCreateTabItem("Mount")
    GUICtrlCreateTabItem("") ; end tabitem $hTab definition
    GUISetState(@SW_SHOW) ; show parent gui
    EndFunc
    ...

    [/autoit]

    Ich finds halt blöd ständig den CoordMode zu ändern, aber nur absolut zu arbeiten ist auch blöd, da man viel rechnen muss und nachdenken, bin halt sehr penibel.
    Das coole ist, die meisten Prozesse sind schon implementiert, das Layout hält mich auf trab und zwingt mich dazu es ständig zu überdenken...

  • Koordinaten relativ zu einem bestimmten control

    • Trolleule1337
    • 29. Juni 2013 um 20:24

    Schade, ich denke auch, dass es nicht so einfach wäre. Klar reicht simple Mathematik, aber geht alles zu Lasten von Zeit und Code :(

  • Koordinaten relativ zu einem bestimmten control

    • Trolleule1337
    • 29. Juni 2013 um 19:15

    Hi Leute,
    gibt es eine kurze Möglichkeit Controls relativ zu einem bestimmten control auszurichten, also wie Opt("GUICoordMode", 0), nur eben nicht zum letzten sondern zu einem bestimmten Control. Das würde einiges an Code und absoluten X,Y Werte einsparen.

    Man könnte es mit ControlGetPos() lösen, aber so spart man keinen Code und bequemer wirds dadurch auch nicht.

    Weiß jemand wo die Funktion Opt definiert ist, vllt. ist es möglich sie zu erweitern?
    Danke!

  • get control ids von TreeVieItems

    • Trolleule1337
    • 29. Juni 2013 um 02:31

    Super klappt, dankeschön! Wie dumm, da ich es bereits so versucht hatte:

    [autoit]

    Local $hItem = _GUICtrlTreeView_GetFirstItem($TreeView)
    $hItem = _GUICtrlTreeView_GetNextSibling($TreeView, $hItem)
    MsgBox(0, $hItem, _WinAPI_GetDlgCtrlID($hItem))

    [/autoit]

    Ich weiß, das die ID's von den Items von $handle[0-3] = GUICtrlCreateTreeViewItem(...)
    45, 46, 47 und 48 waren und demnach müsste ich bei "MsgBox(0, $hItem, _WinAPI_GetDlgCtrlID($hItem))" einer der 4 ID's erhalten. Bekam aber immer 0 und dachte daher das es nicht funktioniert, aber wenn ich es mit

    [autoit]

    _GUICtrlTreeView_GetChecked($TreeView, $hItem)

    [/autoit]

    prüfen lasse, ob es gecheckt ist, klappts. Schon sinnlos, vermutlich ist die Funktion _WinAPI_GetDlgCtrlID($hItem) hier einfach ungeeignet.
    Danke für eure Hilfe! :thumbup:

  • get control ids von TreeVieItems

    • Trolleule1337
    • 29. Juni 2013 um 01:35

    Nein ich brauch es in einer anderen Funktion die ich mit GuiCtrlOnEvent aufrufe. Tja warum Local... so ists besser programmiert und für mich auch übersichtlicher. Aber an der Stelle muss man ja nicht drehen, muss doch möglich sein handle oder id von Items zu erfassen ?(

  • get control ids von TreeVieItems

    • Trolleule1337
    • 29. Juni 2013 um 00:43

    Das hilft mir nichts weil in jedem Beispiel einfach der handle vom GUICtrlCreateTreeViewItem verwendet wird, also Global $handle = GUICtrlCreateTreeViewItem(...). Jetzt arbeite ich aber nicht global sondern Local $handle = GUICtrlCreateTreeViewItem(...). Ich brauche aber die handles bzw. die Id's der Items um das machen zu können:

    [autoit]

    If BitAnd(GUICtrlRead($handle[$j-1]), $GUI_CHECKED) = $GUI_CHECKED Then

    [/autoit]

    Danke für eure Hilfe!

  • get control ids von TreeVieItems

    • Trolleule1337
    • 29. Juni 2013 um 00:12

    Hmm, dafür benötige ich doch als 2ten Param "Handle to the item", was ich ja nicht habe und zurückgegeben haben möchte, aber nicht nur vom 1ten Item sondern von allen.?

  • get control ids von TreeVieItems

    • Trolleule1337
    • 28. Juni 2013 um 23:57

    ok, also ich hab ein Treeview control. Diesem füge ich 4 Items hinzu und zwar so.

    [autoit]

    Local $imgTreeViewItem[$ImgCount]
    For $i = 1 To $ImgCount
    $imgTreeViewItem[$i-1] = GUICtrlCreateTreeViewItem($ImgName[$i-1], $imgTreeView)
    ;MsgBox(0, $imgTreeView, $imgTreeViewItem[$i-1])
    Next

    [/autoit]

    $ImgCount = 4

    Im Array $imgTreeViewItem stehen die ID's der Items. Diese brauche ich, da ich nicht mit globalen Variablen arbeite. Ich habe also nur $imgTreeView, also die id des TreeViews.

    Danke für deine Hilfe!

  • get control ids von TreeVieItems

    • Trolleule1337
    • 28. Juni 2013 um 23:34

    Dafür benötigt man den handle der Items, welche ich nicht habe. Ich suche ja nach dem handle oder ids der 4 Items?

  • get control ids von TreeVieItems

    • Trolleule1337
    • 28. Juni 2013 um 20:57

    Hi Leute,
    ich bekomms einfach nicht hin die ids der Treeview items die ich mit GUICtrlCreateTreeViewItem erstellt habe auszulesen.
    Ich habe nur die id des Treeview, da ich nicht mit globalen Variablen arbeite und möchte nur die ids der 4 Items dieses Treviews zurückgegeben bekommen, da diese 4 Items wie checkboxen anklickbar sind und ich prüfen möchte ob diese angeklickt wurden oder nicht.
    Wenn ich mir _GUICtrlTreeView_GetItemParam($treeview) ausgeben lasse, bekomme ich kein array sondern nur die id des 1ten Items.

    Bei _GUICtrlTreeView_GetItemParam($treeview, 0) bekomm ich False
    Bei _GUICtrlTreeView_GetItemParam($treeview, 1) bekomm ich auch False

    Hat jemand bitte eine Idee?
    Danke

  • Dictionary Problem mit Globaler Definition (action with this object has failed)

    • Trolleule1337
    • 28. Juni 2013 um 02:14

    Hi Leute,
    ich versteh nicht wieso ich in Zeile 34 untenstehende Fehlermeldung bekomme:

    [autoit]

    Global $oOnEventDict = ObjCreate("Scripting.Dictionary")
    $oOnEventDict.CompareMode = 1 ; set to textmode

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: GUICtrlSetOnEventEx
    ; Description ...: Calls a user-defined function with parameter, if control was clicked
    ; Syntax.........: GUICtrlSetOnEventEx($controlID, $Function = Default, $aParameter = Default)
    ; Parameters ....: $controlID - control id
    ; $Function - function name as string
    ; $aParameter - parameter as one dimensional array, list or variable
    ; Author ........: Zeitriss
    ; ===============================================================================================================================
    Func GUICtrlSetOnEventEx($controlID, $Function = Default, $aParam = Default, $OutputFormat = 0)
    If $Function <> Default Then
    Local $Data[2]
    If $aParam = Default Then
    $Data[1] = ""
    Else
    If IsObj($aParam) Then Local $aParameter = $aParam.ToArray ; convert list to array
    If Not IsArray($aParam) And Not IsObj($aParam) Then ;Local $aParameter[1] = [$aParam] ; if param is var
    Local $aParameter[1] = [$aParam]
    EndIf
    ReDim $aParameter[Ubound($aParameter)+1]
    For $i = Ubound($aParameter)-2 to 0 step -1
    $aParameter[$i+1] = $aParameter[$i]
    Next
    $aParameter[0] = "CallArgArray"
    $Data[1] = $aParameter
    EndIf
    $Data[0] = $Function
    If $oOnEventDict.Exists(String($controlID)) Then $oOnEventDict.remove(String($controlID))
    $oOnEventDict.add(String($controlID), $Data)
    ;Global $oOnEventDict = ObjCreate("Scripting.Dictionary"); wenn ich hier auskommentiere, dann gehts
    $oOnEventDict.add("test", "1")
    ; if no parameter is assigned
    If $aParam = Default Then
    GUICtrlSetOnEvent($controlID, $Data[0])
    Return
    EndIf
    GUICtrlSetOnEvent($controlID, "GUICtrlSetOnEventBuffer")
    Else
    If $oOnEventDict.Exists(String($controlID)) Then $oOnEventDict.remove(String($controlID))
    EndIf
    EndFunc

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

    Func GUICtrlSetOnEventBuffer()
    MsgBox(0, "dfgd", "sdfsf")
    If Not $oOnEventDict.Exists(String(@GUI_CtrlId)) Then Return

    Local $Data = $oOnEventDict(String(@GUI_CtrlId))
    ;~ _ArrayDisplay($Data[1])
    ;~ MsgBox(0, "dfgd", VarGetType($Data))
    ;~ If $oOnEventDict.Item("Format") = 1 Then
    ;~ For $elem In $Data[1]
    ;~ $AList.Add($elem)
    ;~ ;~ MsgBox(0, "dsafsf", $elem)
    ;~ Next
    ;~ $AList.RemoveAt(0)
    ;~ Return Call($Data[0], $AList)
    ;~ EndIf
    Call($Data[0], $Data[1])
    EndFunc

    [/autoit]

    Das ist eine Erweiterung der GuiCtrlSetOnEvent Funktion.Ich möchte nur ein Schlüssel/Wert Paar zum Dictionary hinzufügen, aber ich bekomme den Fehler:
    "The requested action with this object has failed"
    Wenn ich Zeile 33 auskommentiere geht es!

    Hat jemand ne idee?

    Danke!

  • GUIOnEvent mit Parametern

    • Trolleule1337
    • 15. Juni 2013 um 17:48

    Kleine Korrektur in der Funktion "GUICtrlSetOnEventEx"

    [autoit]


    ; Ersetzt
    $oOnEventDict.Contains
    ; durch
    $oOnEventDict.Exists

    [/autoit]
  • WM_Notify per Funktion

    • Trolleule1337
    • 14. Juni 2013 um 00:24

    Hi Leute,
    ich bekomme unmittelbar nach Ausführen und kurzem bewegen des Zeigers folgenden Fehler:

    Code
    ParentGUI : 0x0008023C
    ParentGUI : 0x000701EC
    ParentGUI : 0x000701EC
    ParentGUI : 0x000701EC
    ParentGUI : 0x000701EC
    ParentGUI : 0x000701EC
    C:\Program Files\AutoIt3\Include\RegisterNotify_UDF.au3 (199) : ==> The requested action with this object has failed.:
    If $oTemp.Exists($iCode) Then
    If $oTemp.Exists($iCode) ^ ERROR

    Zeile 199 ist der auslösende Faktor:

    [autoit]

    Func UDF_NOTIFY_HANDLER($hWnd, $Msg, $wParam, $lParam)
    If Not $oRegisteredGUI.Exists(String($hWnd)) Then Return 'GUI_RUNDEFMSG'; Wenn GUIHandle nicht registriert Func verlassen
    Local $hWndFrom, $iCode, $tNMHDR, $oTemp
    $tNMHDR = DllStructCreate($UDF_tagNMHDR, $lParam)
    $hWndFrom = String(DllStructGetData($tNMHDR, "hWndFrom"))
    If Not $oRegisteredControl.Exists($hWndFrom) Then Return 'GUI_RUNDEFMSG'; Wenn ControlHandle nicht registriert Func verlassen
    $iCode = DllStructGetData($tNMHDR, "Code")
    $oTemp = $aNotify[$oRegisteredControl.Item($hWndFrom)][1]
    If Not IsObj($oTemp) Then ConsoleWrite("Object existriert nicht 2" & @CRLF)
    If $oTemp.Exists("Func") Then
    Call($oTemp.Item("Func"), $hWndFrom, DllStructGetData($tNMHDR, "IDFrom"), $iCode, $wParam, $lParam)
    If @error = 0xDEAD And @extended = 0xBEEF Then ConsoleWrite("Function does not exist or invalid number of parameters" & @CRLF)
    Return 'GUI_RUNDEFMSG'
    ;~ Else
    ;~ If $oTemp.Exists($iCode) Then
    ;~ Call($oTemp.Item($iCode), $hWndFrom, DllStructGetData($tNMHDR, "IDFrom"), $iCode, $wParam, $lParam)
    ;~ If @error = 0xDEAD And @extended = 0xBEEF Then ConsoleWrite("Function does not exist or invalid number of parameters" & @CRLF)
    ;~ Return 'GUI_RUNDEFMSG'
    ;~ Else
    ;~ Return 'GUI_RUNDEFMSG'
    ;~ EndIf
    EndIf
    Return 'GUI_RUNDEFMSG'
    EndFunc ;==>UDF_NOTIFY_HANDLER

    [/autoit]

    Also "If $oTemp.Exists($iCode) Then". Hat jemand dazu eine Idee?

    Danke!

  • Tribut an die Community - DISM UDF

    • Trolleule1337
    • 1. März 2013 um 10:31

    Stimmt, Dankeschön ;)

  • Tribut an die Community - DISM UDF

    • Trolleule1337
    • 1. März 2013 um 02:55

    Ahoi Leute,
    habe endlich meine DISM UDF fertiggestellt. DISM (Deployment Image Servicing Management) gehört zu den Deployment Tools des Windows Assessment and Deployment Kit (ADK), welches für Windows 8 bereitgestellt wird. Es löst ImageX ab und die im AIK enthaltene DISM Version 6.1.7600.16385. Leider werden wir zukünftig die wimgapi UDF nicht damit ablösen können, da die DISM API das splitten, capturen und appenden von images nicht unterstützt. Lediglich das Kommandozeilen Tool DISM.exe wiegt mit den neuen Funktionen seit 6.2.9200.16384 auf, welches auch die aktuelle Version darstellt.

    Wenn ich das richtig verstanden habe sind PowerShell Cmdlets für die "Extra"-Funktionen verantwortlich. Wenn möglich versuche ich die Funktionen noch auszulagern. Wer dazu mehr weiß, bitte melden!

    Voraussetzung: Windows ADK - Deployment Tools -> Download

    Example:

    [autoit]

    #include "G:\dism2.8.7.8.au3"

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

    Local $sMountPath = "C:\mount"
    Local $sLogFilePath = "C:\dism.log"
    Local $sScratchDirectory = "C:\scratchDir"

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

    ; #VARIABLES# ===================================================================================================================
    ConsoleWrite("--------------------------------" & "DismInitialize" & @CRLF)
    $init = _DISM_Initialize($DismLogErrorsWarningsInfo)
    ConsoleWrite("DismInitialize error: " & @error & @CRLF)
    ConsoleWrite("DismInitialize returns: " & $init & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismCleanupMountpoints" & @CRLF)
    $cleanup = _DISM_CleanupMountpoints()
    ConsoleWrite("DismCleanupMountpoints error: " & @error & @CRLF)
    ConsoleWrite("DismCleanupMountpoints returns: " & $cleanup & @CRLF)
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismMountImage" & @CRLF)
    ;~ $return = _DISM_MountImage("C:\win7_images\x64\sources\install.wim", $sMountPath, 3, 0, $DismImageIndex, $DISM_MOUNT_READWRITE)
    ;~ ConsoleWrite("_DISM_MountImage error: " & @error & @CRLF)
    ;~ ConsoleWrite("_DISM_MountImage return: " & $return & @CRLF)
    ;~ Exit
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismOpenSession" & @CRLF)
    $session = _DISM_OpenSession($sMountPath)
    ConsoleWrite("DismOpenSession returns: " & $session & @CRLF)
    ConsoleWrite("Session: " & $session & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismAddDriver" & @CRLF)
    $add = _DISM_AddDriver($session, "C:\HDx64\viahdb.inf", False)
    ConsoleWrite("DismAddDriver error: " & @error & @CRLF)
    ConsoleWrite("DismAddDriver returns: " & $add & @CRLF)
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismCloseSession" & @CRLF)
    ;~ $close = _DISM_CloseSession($session)
    ;~ ConsoleWrite("DismCloseSession error:" & @error & @CRLF)
    ;~ ConsoleWrite("DismCloseSession returns: " & $close & @CRLF)
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismOpenSession" & @CRLF)
    ;~ $session = _DISM_OpenSession($sMountPath)
    ;~ ConsoleWrite("DismOpenSession returns: " & $session & @CRLF)
    ;~ ConsoleWrite("Session: " & $session & @CRLF)
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismAddPackage" & @CRLF)
    ;~ $addpackage = _DISM_AddPackage($session, "C:\lp_en.cab")
    ;~ ConsoleWrite("DismAddPackage error: " & @error & @CRLF)
    ;~ ConsoleWrite("DismAddPackage returns: " & $addpackage & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismApplyUnattend" & @CRLF)
    $apply = _DISM_ApplyUnattend($session, "C:\win7_unattended\AutoUnattend.xml")
    ConsoleWrite("DismApplyUnattend error: " & @error & @CRLF)
    ConsoleWrite("DismApplyUnattend returns: " & $apply & @CRLF)
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismCloseSession" & @CRLF)
    ;~ $close = _DISM_CloseSession($session)
    ;~ ConsoleWrite("DismCloseSession error:" & @error & @CRLF)
    ;~ ConsoleWrite("DismCloseSession returns: " & $close & @CRLF)
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismOpenSession" & @CRLF)
    ;~ $session = _DISM_OpenSession($sMountPath)
    ;~ ConsoleWrite("DismOpenSession returns: " & $session & @CRLF)
    ;~ ConsoleWrite("Session: " & $session & @CRLF)
    ; ===============================================================================================================================
    ;~ ; CommitImage
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismDisableFeature" & @CRLF)
    ;~ $disable = _DISM_DisableFeature($session, "TelnetClient")
    ;~ ConsoleWrite("DismDisableFeature error: " & @error & @CRLF)
    ;~ ConsoleWrite("DismDisableFeature returns: " & $disable & @CRLF)
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismCloseSession" & @CRLF)
    ;~ $close = _DISM_CloseSession($session)
    ;~ ConsoleWrite("DismCloseSession error:" & @error & @CRLF)
    ;~ ConsoleWrite("DismCloseSession returns: " & $close & @CRLF)
    ;~ ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismOpenSession" & @CRLF)
    ;~ $session = _DISM_OpenSession($sMountPath)
    ;~ ConsoleWrite("DismOpenSession returns: " & $session & @CRLF)
    ;~ ConsoleWrite("Session: " & $session & @CRLF)
    ;~ ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismEnableFeature" & @CRLF)
    ;~ $enable = _DISM_EnableFeature($session, "TelnetClient")
    ;~ ConsoleWrite("DismEnableFeature error: " & @error & @CRLF)
    ;~ ConsoleWrite("DismEnableFeature returns: " & $enable & @CRLF)
    ;~ ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismCloseSession" & @CRLF)
    ;~ $close = _DISM_CloseSession($session)
    ;~ ConsoleWrite("DismCloseSession error:" & @error & @CRLF)
    ;~ ConsoleWrite("DismCloseSession returns: " & $close & @CRLF)
    ;~ ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismOpenSession" & @CRLF)
    ;~ $session = _DISM_OpenSession($sMountPath)
    ;~ ConsoleWrite("DismOpenSession returns: " & $session & @CRLF)
    ;~ ConsoleWrite("Session: " & $session & @CRLF)
    ;~ ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetDriverInfo" & @CRLF)
    Local $DriverPackage
    $getdriverinfo = _DISM_GetDriverInfo($session, "wvmbushid.inf", $DriverPackage, True)
    ConsoleWrite("DismGetDriverInfo error: " & @error & @CRLF)
    ConsoleWrite("DismGetDriverInfo returns: " & $getdriverinfo & @CRLF)
    _ArrayDisplay($getdriverinfo, "DriverInfo")
    _ArrayDisplay($DriverPackage, "DriverPackage (Extended)")
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetDrivers" & @CRLF)
    $getdriver = _DISM_GetDrivers($session, True)
    ConsoleWrite("DismGetDrivers error: " & @error & @CRLF)
    ConsoleWrite("DismGetDrivers returns: " & $getdriver & @CRLF)
    _ArrayDisplay($getdriver)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetFeatureInfo" & @CRLF)
    Local $CustomProperties
    $featureinfo = _DISM_GetFeatureInfo($session, "WindowsMediaPlayer", $CustomProperties)
    ConsoleWrite("DismGetFeatureInfo error: " & @error & @CRLF)
    ConsoleWrite("DismGetFeatureInfo returns: " & $featureinfo & @CRLF)
    _ArrayDisplay($featureinfo, "FeatureInfo")
    _ArrayDisplay($CustomProperties, "CustomProperties")
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetFeatureParent" & @CRLF)
    $featureparent = _DISM_GetFeatureParent($session, "WindowsMediaPlayer")
    ConsoleWrite("DismGetFeatureParent error: " & @error & @CRLF)
    ConsoleWrite("DismGetFeatureParent returns: " & $featureparent & @CRLF)
    _ArrayDisplay($featureparent, "FeatureParent")
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetFeatures" & @CRLF)
    $getf = _DISM_GetFeatures($session)
    ConsoleWrite("DismGetFeatures error: " & @error & @CRLF)
    ConsoleWrite("DismGetFeatures returns: " & $getf & @CRLF)
    _ArrayDisplay($getf, "Features")
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetImageInfo" & @CRLF)
    $imageinfo = _DISM_GetImageInfo("C:\win7_images\x64\sources\install.wim")
    ConsoleWrite("DismGetImageInfo error: " & @error & @CRLF)
    ConsoleWrite("DismGetImageInfo returns: " & $imageinfo & @CRLF)
    _ArrayDisplay($imageinfo, "ImageInfo")
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetMountedImageInfo" & @CRLF)
    $mountedimages = _DISM_GetMountedImageInfo()
    ConsoleWrite("_DISM_GetMountedImageInfo error: " & @error & @CRLF)
    ConsoleWrite("_DISM_GetMountedImageInfo return: " & $mountedimages & @CRLF)
    _ArrayDisplay($mountedimages, "MountedImageInfo")
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetPackageInfo" & @CRLF)
    Local $CustomProperties
    Local $Features
    $packageinfo = _DISM_GetPackageInfo($session, "Microsoft-Windows-Foundation-Package~31bf3856ad364e35~amd64~~6.1.7601.17514", $CustomProperties, $Features)
    ConsoleWrite("DismGetPackageInfo error: " & @error & @CRLF)
    ConsoleWrite("DismGetPackageInfo returns: " & $packageinfo & @CRLF)
    _ArrayDisplay($CustomProperties, "CustomProperties")
    _ArrayDisplay($Features, "Features")
    _ArrayDisplay($packageinfo, "PackageInfo")
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetPackages" & @CRLF)
    $getpackage = _DISM_GetPackages($session)
    ConsoleWrite("DismGetPackages error: " & @error & @CRLF)
    ConsoleWrite("DismGetPackages returns: " & $getpackage & @CRLF)
    _ArrayDisplay($getpackage, "GetPackages")
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismRemountImage" & @CRLF)
    ;~ $remount = _DISM_RemountImage($sMountPath)
    ;~ ConsoleWrite("DismRemountImage error: " & @error & @CRLF)
    ;~ ConsoleWrite("DismRemountImage returns: " & $remount & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismRemoveDriver" & @CRLF)
    $remove = _DISM_RemoveDriver($session, "oem1.inf")
    ConsoleWrite("DismRemoveDriver error: " & @error & @CRLF)
    ConsoleWrite("DismRemoveDriver returns: " & $remove & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismRemovePackage" & @CRLF)
    $removepackage = _DISM_RemovePackage($session, "Package_for_KB2446710~31bf3856ad364e35~amd64~~6.1.1.3")
    ConsoleWrite("DismRemovePackage error: " & @error & @CRLF)
    ConsoleWrite("DismRemovePackage returns: " & $removepackage & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismCommitImage" & @CRLF)
    $commit = _DISM_CommitImage($session)
    ConsoleWrite("DismCommitImage error: " & @error & @CRLF)
    ConsoleWrite("DismCommitImage returns: " & $commit & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismCloseSession" & @CRLF)
    $close = _DISM_CloseSession($session)
    ConsoleWrite("DismCloseSession error: " & @error & @CRLF)
    ConsoleWrite("DismCloseSession returns: " & $close & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismUnmountImage" & @CRLF)
    $unmount = _DISM_UnmountImage($sMountPath, $DISM_DISCARD_IMAGE)
    ConsoleWrite("DismUnmountImage error: " & @error & @CRLF)
    ConsoleWrite("DismUnmountImage returns: " & $unmount & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismShutdown" & @CRLF)
    $shut = _DISM_Shutdown()
    ConsoleWrite("DismShutdown error: " & @error & @CRLF)
    ConsoleWrite("DismShutdown returns: " & $shut & @CRLF)
    ; ===============================================================================================================================

    [/autoit]

    Es wurden nicht immer alle Paramter ausgereizt, aber ich behaupte mal, so sieht die gewöhnliche Anwendung aus.

    Freue mich über Verbesserungsvorschläge...

    Dateien

    DismConstants1.2.au3 15,93 kB – 300 Downloads dism2.8.7.8.au3 148,8 kB – 302 Downloads
  • If...Then Mehrere Statements per Zeile

    • Trolleule1337
    • 16. Februar 2013 um 14:08

    Du hast schon recht, ich mags auch lieber sauber programmiert.
    So funktioniert es übrigens auch:

    [autoit]

    If $curElement = "" Then ContinueLoop Assign('e', $e+1)

    [/autoit]

    Für mich eine mögliche Lösung. Werde aber doch beim Standard bleiben.

  • If...Then Mehrere Statements per Zeile

    • Trolleule1337
    • 16. Februar 2013 um 00:54

    Danke für den Tipp, mach ich. Sehr vorbildlich von dir jung ;)

  • If...Then Mehrere Statements per Zeile

    • Trolleule1337
    • 16. Februar 2013 um 00:49

    An Alle:

    minx hat das Spiel gewonnen!

    Hatte eine Klammer im Assign vergessen. Ergo: Das nach dem ContinueLoop ausgeführte Statement muss richtig sein, sonst funktioniert weder das eine noch das andere!

    PainTain:

    Danke, aber leider verloren. :D

  • If...Then Mehrere Statements per Zeile

    • Trolleule1337
    • 16. Februar 2013 um 00:38

    Bei mir macht er das Execute aber nicht das ContinueLoop. Ich bekomme trotzdem noch die Message vob "draußen":

    [autoit]

    If $curElement = "" Then
    MsgBox(0, "drinne", $e)
    ContinueLoop Execute("Assign('e', Eval('e')+1) ConsoleWrite('col: ' & $col & @crlf)")

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

    EndIf
    MsgBox(0, "draußen", $e)

    [/autoit]

    Ne Idee?

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™