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. BugFix

Beiträge von BugFix

  • µit Light Thread

    • BugFix
    • 2. April 2009 um 17:41
    Zitat von L3viathan2142

    9 Leute, die umbedingt mitmachen möchten - das reicht mir.
    ...


    Solltest du das nicht besser im Konsens mit den Admins klären? Alleingänge in dieser Richtung finde ich nicht erstrebenswert.

  • Anwendungspfad anhand der PID ermitteln

    • BugFix
    • 1. April 2009 um 19:18

    Hi,
    hier mal eine Möglichkeit mit der PID den Pfad der Anwendung zu ermitteln.
    Wird keine PID übergeben, gibt die Funktion den Pfad für die Anwendung des aktiven Fensters zurück.

    _GetPathByPID()
    [autoit]


    ; Wenn keine PID übergeben, wird der Pfad der aktuellen Anwendung anhand der PID ermittelt
    ConsoleWrite(_GetPathByPID() & @CRLF)

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

    ;===============================================================================
    ; Function Name: _GetPathByPID($PID=-1)
    ; Description:: Get full path of an running application by using PID
    ; Parameter(s): $PID - PID, if not set will used PID from active Window
    ; Requirement(s): #include <WinAPI.au3>
    ; Return Value(s): Success Full ApplicationPath
    ; Failure set @error 1 - process handle failed
    ; 2 - process image failed
    ; 3 - query dosdevice failed
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    #include-once
    #include <WinAPI.au3>
    Func _GetPathByPID($PID=-1)
    If $PID = -1 Then $PID = WinGetProcess(WinGetTitle("[active]"))
    $hProcess = _WinAPI_OpenProcess(0x00000400, True, $PID, True)
    If Not $hProcess Then Return SetError(1,0,0)
    Local $ret, $path, $DevicePath, $DeviceLetter, $strPath = DllStructCreate("char path[256]")
    DllCall(@SystemDir & '\Psapi.dll', "uint64", "GetProcessImageFileNameA", _
    "hwnd", $hProcess, "ptr", DllStructGetPtr($strPath), "int", 256)
    If @error Then Return SetError(2,0,0)
    $path = DllStructGetData($strPath, 'path')
    $DevicePath = StringRegExp($path, "\\Device\\\w*\\[\w\d\+\-()]*", 1)
    Local $lpTargetPath, $aDrive = DriveGetDrive("ALL")
    For $i = 1 To UBound($aDrive) -1
    $ret = DllCall("kernel32.dll", "long", "QueryDosDeviceA", "str", $aDrive[$i], "str", $lpTargetPath, "long", 256)
    If @error Then Return SetError(3,0,0)
    If $ret[2] = $DevicePath[0] Then
    $DeviceLetter = $aDrive[$i]
    ExitLoop
    EndIf
    Next
    DllCall("kernel32.dll", "long", "CloseHandle", "long", $hProcess)
    Return StringReplace($path, $DevicePath[0], StringUpper($DeviceLetter))
    EndFunc ;==>_GetPathByPID

    [/autoit]

    Edit: Es gibt ja kaum was, was nicht schon jemand getan hat ;(
    Habe gerade eine ähnliche Lösung (1 Monat alt) im EN-Forum gefunden. Link
    Naja, ich habs als Zweiter getan - der andere als Vorletzter. :rofl:

  • Dateien ausschließen

    • BugFix
    • 1. April 2009 um 09:16
    Zitat von gorgo1984

    Ich habe einen Ordner den ich durchsuche möchte

    Womit möchtest du durchsuchen? - Mit einer Lupe? :evil:
    Ist es denn so schwer zu schreiben z.B.: ...Ich möchte mit FileOpenDialog Dateien zum Öffnen anbieten außer *.dat
    Woher sollen wir wissen, mit welcher Funktion du "durchsuchen" willst, geschweige denn was du darunter verstehst?!

  • Problem mit StringSplit

    • BugFix
    • 1. April 2009 um 09:12
    Zitat von Der_Doc

    vieleicht sollte man wirklich öfter mal die Hilfe nutzen und schauen was man mit der Funktion machen kann.

    :D Meist reicht es (um einen Überblick zu haben) bei einer neuen AutoIt-Version die Changes anzuschauen. Ich glaub, die StringSplit-Anpassung ist seit 3.3.0.0 .

  • Problem mit StringSplit

    • BugFix
    • 31. März 2009 um 23:34
    Zitat von Der_Doc

    Bei Split ist ja die 0 der Counter.

    Nicht mehr zwingend. Mit Flag 2 wird ein Nullbasiertes Array erstellt. ;)

  • On Event Haken / Debuggen

    • BugFix
    • 31. März 2009 um 22:25

    zu 1.
    Da kannst du mit WM_MESSAGES arbeiten. Die WM_CODES findest du in der Hilfe. In einigen Bsp. siehst du auch die Art der Anwendung (GUIRegisterMessage).

    zu 2.
    Den AutoIt-Debugger hane ich bisher noch nie erfolgreich nutzen können. Aus meiner Sicht etwas buggy.

  • Push regel fehlt

    • BugFix
    • 31. März 2009 um 21:58
    Zitat von Greek

    Find halt nur blöd wenn Leute deswegen verärgert sind, aber es keine Regel dafür gibt.


    Also wenn deswegen jemand verärgert ist, dann ist derjenige sicher nicht lange im Forum dabei. Sonst wüßte er, zumindest vom Mitlesen, dass hier sehr zügig reagiert wird.
    Ich denke nicht, dass wir da etwas ändern müssen.

  • Gui-Problem :(

    • BugFix
    • 31. März 2009 um 21:32

    Wirf mal einen Blick in die ListView-UDF in der Hilfe. Da findest du ausreichend Bsp.
    Grundsätzlich: Ein angeklicktes Item ist "selected" - die Funktion, die das feststellt gibt den Index des Item zurück. Mit diesem kannst du den Text des Item (SubItem) zurückgeben lassen.

  • GUIRegisterMsg($WM_MOUSEHOVER,"Hover") erklären?!

    • BugFix
    • 30. März 2009 um 23:09
    Zitat von Icynator

    das z.b. wenn man über einen button fährt und dort drauf bleibt ohne zu klicken das dann n tooltip kommt...

    Dazu brauchst du doch nicht MOUSEHOVER. Verwende einfach: GUICtrlSetTip ( controlID, tiptext [, "title" [, icon [, options]]]]] )

  • Das in Arrays umwandeln

    • BugFix
    • 30. März 2009 um 21:55

    Hi,
    ja mit einem Array kannst du kürzen. Erstelle alle Button-ID's in einem Array.
    In der While-Schleife verwendest du dann eine Schleife durch das Array um auf die Button-ID's zu prüfen.

    Spoiler anzeigen
    [autoit]

    ; Die ID's der Button in einem Array erstellen
    Global $aButton[17] = [ _
    GUICtrlCreateButton("1", 16, 48, 25, 25, 0), _
    GUICtrlCreateButton("2", 48, 48, 25, 25, 0), _
    GUICtrlCreateButton("3", 80, 48, 25, 25, 0), _
    GUICtrlCreateButton("4", 16, 80, 25, 25, 0), _
    GUICtrlCreateButton("5", 48, 80, 25, 25, 0), _
    GUICtrlCreateButton("6", 80, 80, 25, 25, 0), _
    GUICtrlCreateButton("7", 16, 112, 25, 25, 0), _
    GUICtrlCreateButton("8", 48, 112, 25, 25, 0), _
    GUICtrlCreateButton("9", 80, 112, 25, 25, 0), _
    GUICtrlCreateButton("0", 48, 144, 25, 25, 0), _
    GUICtrlCreateButton(".", 16, 144, 25, 25, 0), _
    GUICtrlCreateButton("+", 120, 48, 41, 25, 0), _
    GUICtrlCreateButton("-", 120, 80, 41, 25, 0), _
    GUICtrlCreateButton("*", 120, 112, 41, 25, 0), _
    GUICtrlCreateButton("/", 120, 144, 41, 25, 0), _
    GUICtrlCreateButton("=", 80, 144, 25, 25, 0), _
    GUICtrlCreateButton("Clear", 128, 16, 33, 20)]

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $aButton[15]
    GUICtrlSetData ($Input6, Execute (GUICtrlRead ($Input6)))
    Case $aButton[16]
    GUICtrlSetData ($Input6, "")
    EndSwitch
    ; in einer Schleife prüfen, welches Arrayelement mit $nMsg übereinstimmt
    For $i = 0 To UBound($aButton) -3 ; die letzten beiden brauchen nicht abgefragt werden
    If $nMsg = $aButton[$i] Then
    ControlCommand ($Form1_1, "", $Input6, "EditPaste", ControlGetText($Form1_1, "", $aButton[$i]))
    ExitLoop
    EndIf
    Next
    WEnd

    [/autoit]
  • Im minimirtem Chatfenster z.b. schreiben.

    • BugFix
    • 30. März 2009 um 11:02
    Zitat von master_mind

    aber dennoch sollen die nachrichten im hintergrund (dem chat) abgerufen werden können!

    Zitat von master_mind

    mit controlsettext geht es wohl noch ... aber controlsend wird so wohl niemals gehen ?! gibts da ne alternative ???

    ??? - Das widerspricht sich aber. Was möchtest du wirklich?
    - Neu eingehenden Nachrichten im Hintergrund auslesen, oder
    - in das Chatfenster automatisch schreiben (Spamverdächtig)

    Ersteres ist eigentlich unnütz, da die Messenger ja eine entsprechende Funktion zur automatischen Benachrichtigung besitzen.
    Und das Zweite gibt auch keinen rechten Sinn - es sei denn ich möchte spammen. 8|

  • TreeView

    • BugFix
    • 29. März 2009 um 20:23
    Zitat von Jam00

    Was ist Expand?


    = Ausklappen

    Bsp.:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiTreeView.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    Opt("MustDeclareVars", 1)
    Opt("GuiOnEventMode", 1)

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

    Global $gui, $hImage, $hTV, $aID_Sub[5], $ID_Table, $item

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

    $gui = GUICreate('Test TreeView')
    GUISetOnEvent($GUI_EVENT_CLOSE, '_end')
    $hTV = GUICtrlCreateTreeView(10,10,300,150,BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, _
    $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)

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

    $hImage = _GUIImageList_Create(16, 16, 5, 3)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 98)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 96)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 36)
    _GUICtrlTreeView_SetNormalImageList($hTV, $hImage)

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

    _GUICtrlTreeView_BeginUpdate($hTV)
    $ID_Table = _GUICtrlTreeView_Add($hTV, 0, 'Table', 0, 0)
    For $i = 1 To 5
    $aID_Sub[$i-1] = _GUICtrlTreeView_AddChild($hTV, $ID_Table, 'Sub' & $i, 1, 1)
    For $j = 1 To 3
    $item = _GUICtrlTreeView_AddChild($hTV, $aID_Sub[$i-1], 'Sub_Sub' & $j, 2, 2)
    Next
    Next
    _GUICtrlTreeView_EndUpdate($hTV)
    _GUICtrlTreeView_Expand($hTV, $ID_Table)

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

    GUISetState()
    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')

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

    While 1
    Sleep(100)
    WEnd

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

    Func _end()
    Exit
    EndFunc

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

    Func _GetExpanded()
    Local $sExpanded = 'Ausgeklappt: '
    For $i = 0 To UBound($aID_Sub) -1
    If _GUICtrlTreeView_GetExpanded(GUICtrlGetHandle($hTV), $aID_Sub[$i]) Then _
    $sExpanded &= _GUICtrlTreeView_GetText(GUICtrlGetHandle($hTV), $aID_Sub[$i]) & ', '
    Next
    WinSetTitle($gui, '', StringTrimRight($sExpanded, 2))
    EndFunc

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTreeview
    $hWndTreeview = $hTV
    If Not IsHWnd($hTV) Then $hWndTreeview = GUICtrlGetHandle($hTV)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndTreeview
    Switch $iCode
    Case $TVN_ITEMEXPANDEDW
    _GetExpanded()
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • REGISTRIE EINTRAG ÄNDERN ??

    • BugFix
    • 29. März 2009 um 20:03
    Zitat von mazo

    Ich brauche ein beispiel um nähre rein zu kommnenn.
    kannst du mir da eins posten

    Das ist anmaßend frech, was du hier abziehst! Du hast nicht einen Blick in die Hilfe geworfen - denn dort sind Beispiele vorhanden!!
    Du bist auf dem besten Weg, dir die nächste Warnung einzufangen.

  • TreeView

    • BugFix
    • 29. März 2009 um 19:55

    Verwende das Event $TVN_ITEMEXPANDEDW - dann erhältst du eine Nachricht wenn ein Expand ausgeführt wird.

  • TreeView

    • BugFix
    • 29. März 2009 um 19:33

    Hier ein Bsp. - die gelesenen Werte werden als Fenstertitel gesetzt:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiTreeView.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    Opt("MustDeclareVars", 1)
    Opt("GuiOnEventMode", 1)

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

    Global $gui, $hImage, $hTV, $aID_Sub[5], $ID_Table, $item

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

    $gui = GUICreate('Test TreeView')
    GUISetOnEvent($GUI_EVENT_CLOSE, '_end')
    $hTV = GUICtrlCreateTreeView(10,10,300,150,BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, _
    $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
    Global $WM_NOTIFY_DUMMY = GUICtrlCreateDummy()
    GUICtrlSetOnEvent($WM_NOTIFY_DUMMY,"click_TV")

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

    $hImage = _GUIImageList_Create(16, 16, 5, 3)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 98)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 96)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 36)
    _GUICtrlTreeView_SetNormalImageList($hTV, $hImage)

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

    _GUICtrlTreeView_BeginUpdate($hTV)
    $ID_Table = _GUICtrlTreeView_Add($hTV, 0, 'Table', 0, 0)
    For $i = 1 To 5
    $aID_Sub[$i-1] = _GUICtrlTreeView_AddChild($hTV, $ID_Table, 'Sub' & $i, 1, 1)
    For $j = 1 To 3
    $item = _GUICtrlTreeView_AddChild($hTV, $aID_Sub[$i-1], 'Sub_Sub' & $j, 2, 2)
    Next
    Next
    _GUICtrlTreeView_EndUpdate($hTV)
    _GUICtrlTreeView_Expand($hTV, $ID_Table)

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

    GUISetState()
    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')

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

    While 1
    Sleep(100)
    WEnd

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

    Func _end()
    Exit
    EndFunc

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

    Func click_TV()
    Local $hTVItem = _GUICtrlTreeView_GetSelection($hTV)
    Local $hParent = _GUICtrlTreeView_GetParentHandle($hTV, $hTVItem)
    Local $title = ''
    If $hParent Then $title = _GUICtrlTreeView_GetText($hTV,$hParent) & ' / '
    WinSetTitle($gui, '', $title & _GUICtrlTreeView_GetText($hTV,$hTVItem))
    EndFunc

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTreeview
    $hWndTreeview = $hTV
    If Not IsHWnd($hTV) Then $hWndTreeview = GUICtrlGetHandle($hTV)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndTreeview
    Switch $iCode
    Case $NM_CLICK
    GUICtrlSendToDummy($WM_NOTIFY_DUMMY)
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • Problem beim Umsetzen von CopyFileEx

    • BugFix
    • 29. März 2009 um 18:27

    OK, Danke - dann brauch ich mir ja nicht weiter den Kopf zerbrechen :D

  • Problem beim Umsetzen von CopyFileEx

    • BugFix
    • 29. März 2009 um 18:10

    Ich wollte auf Objekte verzichten, und da es die Funktion CopyFileEx nunmal gibt, versuchen diese zu nutzen.
    Aber da haperts noch etwas mit dem Umsetzen der Strukturen.
    Hier der jetzige Status, jetzt wird nicht mal mehr kopiert . :S

    Spoiler anzeigen
    [autoit]

    Global Const $PROGRESS_CANCEL = 1
    Global Const $PROGRESS_CONTINUE = 0
    Global Const $PROGRESS_QUIET = 3
    Global Const $PROGRESS_STOP = 2
    Global Const $COPY_FILE_FAIL_IF_EXISTS = 0x1
    Global Const $COPY_FILE_RESTARTABLE = 0x2

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

    $sOldFile = 'C:\sehr_grosse_Datei'
    $sNewFile ='C:\kopie_sehr_grosse_Datei'

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

    Global $strucData = DllStructCreate("long")
    Global $tagLPPROGRESS_ROUTINE = _
    'int TotalFileSize;int TotalBytesTransferred;int StreamSize;int StreamBytesTransferred;' & _
    'dword dwStreamNumber;dword dwCallbackReason;hwnd hSourceFile;hwnd hDestinationFile;' & DllStructGetPtr($strucData)
    Global $strucPROGRESS_ROUTINE = DllStructCreate($tagLPPROGRESS_ROUTINE)

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

    Local $ProgressRoutine = _
    DLLCallbackRegister ("CopyProgressRoutine", $tagLPPROGRESS_ROUTINE, _
    "int;int;int;int;dword;dword;hwnd;hwnd;ptr")

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

    $Ret = CopyFileEx($sOldFile, $sNewFile, DllCallbackGetPtr($ProgressRoutine), 0, 0, $COPY_FILE_RESTARTABLE)
    If $Ret Then
    MsgBox(0, 'CopyFileEx', 'Erfolgreich')
    Else
    MsgBox(0, 'CopyFileEx', 'Fehler!')
    EndIf
    DllCallbackFree($ProgressRoutine)

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

    Func CopyFileEx($sOldFile, $sNewFile, $lpProgressRoutine, $lpData, $pbCancel, $dwCopyFlags)
    Local $ret = DllCall("kernel32.dll", "long", "CopyFileExA", _
    'str', $sOldFile, 'str', $sNewFile, 'ptr', $lpProgressRoutine, 'long', $lpData, 'long', $pbCancel, 'long', $dwCopyFlags)
    Return $ret[0]
    EndFunc

    Func CopyProgressRoutine($TotalFileSize, $TotalBytesTransferred, $StreamSize, $StreamBytesTransferred, $dwStreamNumber, $dwCallbackReason, $hSourceFile, $hDestinationFile, $lpData)
    ConsoleWrite(Int(($TotalBytesTransferred * 10000) / ($TotalFileSize * 10000) * 100) & "% complete..." & @CRLF)
    Return $PROGRESS_CONTINUE
    EndFunc

    [/autoit]
  • Problem beim Umsetzen von CopyFileEx

    • BugFix
    • 29. März 2009 um 17:36

    Hi,
    ich möchte gern die WIN-API Funktion CopyFileEx in AutoIt umsetzen. Im API-Guide habe ich eine VB-Version gefunden.
    Hier kurz die Beschreibung:

    Zitat

    The CopyFileEx function copies an existing file to a new file. This function preserves extended attributes, OLE structured storage, NTFS alternate data streams, and file attributes. Security attributes for the existing file are not copied to the new file.

    Declare Function CopyFileEx Lib "kernel32.dll" Alias "CopyFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal lpProgressRoutine As Long, lpData As Any, ByRef pbCancel As Long, ByVal dwCopyFlags As Long) As Long


    Besonders interessant ist der Parameter:
    · lpProgressRoutine
    Specifies the address of a callback function of type LPPROGRESS_ROUTINE that is called each time another portion of the file has been copied. This parameter can be NULL. For more information on the progress callback function, see CopyProgressRoutine.

    Die Callbackfunktion wird aufgerufen, jederzeit wenn ein Teil der Datei kopiert wurde. Somit ließe sich das gut für ein Status-Anzeige nutzen.
    Leider passiert das bei mir bisher noch nicht. Die Datei wird zwar kopiert, aber die Callbackfunktion nicht aufgerufen. Der Pointer auf die Callbackroutine wird erstellt, hab ich getestet. Momentan weiß ich erst mal nicht weiter. Der Dll-Call gibt mir auch nix zurück, AutoIt endet dort mit: AutoIT3.exe ended.rc:-1073741819
    Hier der Code:

    Spoiler anzeigen
    [autoit]


    Global Const $PROGRESS_CANCEL = 1
    Global Const $PROGRESS_CONTINUE = 0
    Global Const $PROGRESS_QUIET = 3
    Global Const $PROGRESS_STOP = 2
    Global Const $COPY_FILE_FAIL_IF_EXISTS = 0x1
    Global Const $COPY_FILE_RESTARTABLE = 0x2

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

    $sOldFile = 'C:\sehr_grosse_Datei'
    $sNewFile = 'C:\kopie_sehr_grosse_Datei'

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

    Local $ProgressRoutine = DLLCallbackRegister ("CopyProgressRoutine", "long", "str;str")

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

    $Ret = CopyFileEx($sOldFile, $sNewFile, DllCallbackGetPtr($ProgressRoutine), 0, 0, $COPY_FILE_RESTARTABLE)
    If $Ret Then
    MsgBox(0, 'CopyFileEx', 'Erfolgreich')
    Else
    MsgBox(0, 'CopyFileEx', 'Fehler!')
    EndIf
    DllCallbackFree($ProgressRoutine)

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

    Func CopyFileEx($sOldFile, $sNewFile, $lpProgressRoutine, $lpData, $pbCancel, $dwCopyFlags)
    Local $ret = DllCall("kernel32.dll", "long", "CopyFileExA", _
    'str', $sOldFile, 'str', $sNewFile, 'ptr', $lpProgressRoutine, 'long', $lpData, 'long', $pbCancel, 'long', $dwCopyFlags)
    Return $ret[0]
    EndFunc

    Func CopyProgressRoutine($sOldFile, $sNewFile)
    ConsoleWrite($sNewFile & ': ' & Floor(FileGetSize($sNewFile)/FileGetSize($sOldFile)*100) & '%' & @CRLF)
    Return $PROGRESS_CONTINUE
    EndFunc

    [/autoit]


    Edit:
    Hab was überlesen :S , die Callbackfunktion muß die Struktur LPPROGRESS_ROUTINE aufweisen. Naja, dann werd ich mal versuchen das noch zu vervollständigen. Wenn es klappt melde ich mich wieder. ;)

  • UDF ändern

    • BugFix
    • 29. März 2009 um 13:15

    Könnte es sein, dass du folgendes meinst:
    "Die Funktion HotStringSet soll so angepaßt werden, dass sie einen Hotkey generiert, der ausschließlich für den übergebenen Fenster-Titel gültig ist."

    Wäre echt toll, wenn die deutsche Sprache benutzt wird. Sie ist sehr vielfältig und erlaubt es Probleme so zu beschreiben, dass auch andere diese verstehen. X(

  • UDF ändern

    • BugFix
    • 29. März 2009 um 12:03

    Wende dich doch mal an den Ersteller der UDF. Aber ich verstehe auch nicht, was du willst. Rechtschreib- und Grammatikhilfe einsetzen könnte schon etwas Licht in das Dunkel bringen. :whistling:

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™