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

  • Tab-Items sperren und bei Bedarf enablen

    • BugFix
    • 2. Juni 2012 um 20:40

    Hi,
    ich habs mal noch etwas umgebaut und eine Funktion eingefügt (_GuiCtrlTab_ItemStateAble) zum wahlweisen Enablen/Disablen eines (mehrerer) beliebigen Tab-Items.

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <GuiTab.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <StructureConstants.au3>

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

    OnAutoItExitRegister('OnAutoItExit')
    AdlibRegister('_Check', 50)

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

    Global Const $HC_ACTION = 0

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

    Global $hStub_MouseProc = DllCallbackRegister("_MouseProc", "long", "int;wparam;lparam")
    Global $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
    Global $hmod = _WinAPI_GetModuleHandle(0)
    Global $hHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($hStub_MouseProc), $hmod)
    Global $hHook2 = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
    Global $check = False, $IndexMouseOver
    Global $aDisableItem[1] = [0] ; == Array zum Speichern der Disable-Item

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

    $Form1 = GUICreate("Testfenster", 297, 341, 210, 144)
    $Tab = GUICtrlCreateTab(8, 8, 280, 304)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
    $tab1 = GUICtrlCreateTabItem("Tab1")
    $tab2 = GUICtrlCreateTabItem("Tab2")
    $tab3 = GUICtrlCreateTabItem("Tab3")
    $tab4 = GUICtrlCreateTabItem("Tab4")
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)

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

    Global $hookGUI = $Form1, $hookID = $Tab

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

    $countTimer = 0
    $fTimer = True
    $timer = TimerInit()
    While 1
    If $fTimer And TimerDiff($timer) >= 5000 Then
    $countTimer += 1
    $fTimer = False
    Switch $countTimer
    Case 1
    MsgBox(0, '', 'Disable Tab2 für 5 Sekunden')
    _GuiCtrlTab_ItemStateAble($Tab, 1, $GUI_DISABLE)
    $timer = TimerInit()
    $fTimer = True
    Case 2
    MsgBox(0, '', 'Enable Tab2 wieder')
    _GuiCtrlTab_ItemStateAble($Tab, 1, $GUI_ENABLE)
    EndSwitch
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func _GuiCtrlTab_ItemStateAble($_hWnd, $_iIndex, $_iState) ; == $_iState: $GUI_ENABLE / $GUI_DISABLE
    If Not IsHWnd($_hWnd) Then $_hWnd = GUICtrlGetHandle($_hWnd)
    Local $iCount = _GUICtrlTab_GetItemCount($_hWnd)
    If $_iIndex < 0 Or $_iIndex > $iCount -1 Then Return
    If $_iState <> $GUI_ENABLE Then $_iState = $GUI_DISABLE
    Switch $_iState
    Case $GUI_ENABLE
    Local $found = False
    For $i = 1 To $aDisableItem[0]
    If $aDisableItem[$i] = $i Then
    $found = True
    ExitLoop
    EndIf
    Next
    If Not $found Then Return
    Local $k = 0, $aTmp[$aDisableItem[0]] = [$aDisableItem[0] -1]
    For $j = 1 To $aDisableItem[0]
    If $j = $i Then ContinueLoop
    $k += 1
    $aTmp[$k] = $aDisableItem[$j]
    Next
    $aDisableItem = $aTmp
    Case $GUI_DISABLE
    For $i = 1 To $aDisableItem[0]
    If $aDisableItem[$i] = $_iIndex Then Return
    Next
    $aDisableItem[0] += 1
    ReDim $aDisableItem[$aDisableItem[0]+1]
    $aDisableItem[$aDisableItem[0]] = $_iIndex
    EndSwitch
    EndFunc

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

    Func _MouseProc($nCode, $wParam, $lParam)
    Select
    Case $nCode < 0
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    Case Not _MouseOverTabItem($hookGUI, $hookID)
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    Case $wParam = $WM_LBUTTONDOWN
    If $nCode = $HC_ACTION Then
    $check = True ; Überprüfung aktivieren
    Return -1 ; Mausklick wird ignoriert ==> TabItem noch nicht aktiviert
    EndIf
    EndSelect
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc ;==>_MouseProc

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

    Func _KeyProc($nCode, $wParam, $lParam)
    Local $tKEYHOOKS, $vkCode
    $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    If ControlGetFocus($Form1) <> 'SysTabControl321' Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    $vkCode = DllStructGetData($tKEYHOOKS, "vkCode")
    If $wParam = $WM_KEYDOWN Then
    Switch $vkCode
    Case 0x25, 0x27
    $check = True
    Return -1
    EndSwitch
    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc ;==>_KeyProc

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

    Func _Check()
    If Not $check Then Return
    For $i = 1 To $aDisableItem[0]
    If $IndexMouseOver = $i Then
    $check = False
    Return
    EndIf
    Next
    _GUICtrlTab_SetCurSel(GUICtrlGetHandle($Tab), $IndexMouseOver)
    $check = False
    EndFunc ;==>_Check

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

    Func _MouseOverTabItem($GUI, $TabID) ; == True wenn Maus über einem der TabItem
    If Not BitAND(WinGetState($GUI), 8) Then Return False
    Local $old = Opt('MouseCoordMode', 2)
    Local $posM = MouseGetPos(), $tMouse = DllStructCreate($tagPOINT)
    DllStructSetData($tMouse, 1, $posM[0])
    DllStructSetData($tMouse, 2, $posM[1])
    Opt('MouseCoordMode', $old)
    Local $tTabItem, $iCountItem = _GUICtrlTab_GetItemCount(GUICtrlGetHandle($TabID))
    $IndexMouseOver = -1
    For $i = 0 To $iCountItem -1
    $tTabItem = _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $i, 1)
    If _WinAPI_PtInRect($tTabItem, $tMouse) Then
    $IndexMouseOver = $i
    Return True
    EndIf
    Next
    Return False
    EndFunc ;==>_MouseOverTabItem

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

    ;===============================================================================
    ; Function Name: _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem, $iReturnType=0)
    ; Description: Returns the co-ordinates of a TabItem relatively to the GUI co-ordinates
    ; Parameter(s): $GUI - window handle
    ; $TabID - Tab ID (not handle!)
    ; $iTabItem - TabItem index
    ; $iReturnType - Return type array=0 (default), RECT-structure=1
    ; Return Value(s): Array or structure with co-ordinates of a TabItem (left, top, right, bottom)
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem, $iReturnType=0)
    Local $hWnd = GUICtrlGetHandle($TabID)
    Local $TabPos = ControlGetPos($GUI, '', $TabID)
    Local $tRECT = DllStructCreate("int Left;int Top;int Right;int Bottom")
    Local $pRect = DllStructGetPtr($tRECT)
    GUICtrlSendMsg($TabID, $TCM_GETITEMRECT, $iTabItem, $pRect)
    Local $posLeft = $TabPos[0]+2, $posTop = $TabPos[1]+2
    Local $width = (DllStructGetData($tRECT,3) - DllStructGetData($tRECT,1))
    Local $height = DllStructGetData($tRECT,4) - DllStructGetData($tRECT,2)
    If $iTabItem > 0 Then
    For $i = 0 To $iTabItem -1
    GUICtrlSendMsg($TabID, $TCM_GETITEMRECT, $iTabItem, $pRect)
    $posLeft += (DllStructGetData($tRECT,3) - DllStructGetData($tRECT,1))
    Next
    EndIf
    If $iReturnType Then
    DllCall("user32", 'long', 'SetRect', 'ptr', $pRECT, 'long', $posLeft, _
    'long', $posTop, 'long', $posLeft+$width, 'long', $posTop +$height)
    Return $tRECT
    Else
    Local $aOut[4] = [$posLeft, $posTop, $posLeft +$width, $posTop +$height]
    Return $aOut
    EndIf
    EndFunc ;==>_GUICtrlTab_GetItemRectRelativ

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

    Func OnAutoItExit()
    _WinAPI_UnhookWindowsHookEx($hHook)
    DllCallbackFree($hStub_MouseProc)
    _WinAPI_UnhookWindowsHookEx($hHook2)
    DllCallbackFree($hStub_KeyProc)
    EndFunc ;==>OnAutoItExit

    [/autoit]
  • Tab-Items sperren und bei Bedarf enablen

    • BugFix
    • 2. Juni 2012 um 18:55

    Ich hatte das, wie folgt gelöst. Im Bsp. ist TAB-Item3 Passwort-geschützt (pass)

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <GuiTab.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <StructureConstants.au3>

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

    OnAutoItExitRegister('OnAutoItExit')
    AdlibRegister('_CheckPass', 50)

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

    Global Const $HC_ACTION = 0

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

    Global $hStub_MouseProc = DllCallbackRegister("_MouseProc", "long", "int;wparam;lparam")
    Global $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
    Global $hmod = _WinAPI_GetModuleHandle(0)
    Global $hHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($hStub_MouseProc), $hmod)
    Global $hHook2 = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
    Global $hTab, $lastTab = 0, $checkPass = False

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

    Global $Passwort = 'pass', $passItem = 2 ; <== 0-basierter Index des PW-geschützten TabItems

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

    $Form1 = GUICreate("Testfenster", 297, 341, 210, 144)
    $Tab = GUICtrlCreateTab(8, 8, 280, 304)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
    $tab1 = GUICtrlCreateTabItem("Tab1")
    $tab2 = GUICtrlCreateTabItem("Tab2")
    $tab3 = GUICtrlCreateTabItem("Tab3")
    $tab4 = GUICtrlCreateTabItem("Tab4")
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)

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

    Global $hookGUI = $Form1, $hookID = $Tab

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Tab
    Switch GUICtrlRead($Tab)
    Case 0
    WinSetTitle($Form1, '', ' >> Tab1 aktiviert <<')
    Case 1
    WinSetTitle($Form1, '', ' >> Tab2 aktiviert <<')
    Case 2
    WinSetTitle($Form1, '', ' >> Tab3 aktiviert <<')
    Case 3
    WinSetTitle($Form1, '', ' >> Tab4 aktiviert <<')
    EndSwitch
    Sleep(1000)
    WinSetTitle($Form1, '', 'Testfenster')
    EndSwitch
    WEnd

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

    Func _MouseProc($nCode, $wParam, $lParam)
    Select
    Case $nCode < 0
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    Case Not _MouseOverTabItem($hookGUI, $hookID, $passItem)
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    Case $wParam = $WM_LBUTTONDOWN
    If $nCode = $HC_ACTION Then
    $checkPass = True ; Überprüfung aktivieren
    Return -1 ; Mausklick wird ignoriert ==> TabItem noch nicht aktiviert
    EndIf
    EndSelect
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc ;==>_MouseProc

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

    Func _KeyProc($nCode, $wParam, $lParam)
    Local $tKEYHOOKS, $vkCode
    $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    If ControlGetFocus($Form1) <> 'SysTabControl321' Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    $vkCode = DllStructGetData($tKEYHOOKS, "vkCode")
    If $wParam = $WM_KEYDOWN Then
    Switch $vkCode
    Case 0x25 ; ==> Pfeil li.
    If GUICtrlRead($hookID) - 1 = $passItem Then
    $checkPass = True ; Überprüfung aktivieren
    Return -1 ; Tastendruck wird ignoriert ==> TabItem noch nicht aktiviert
    EndIf
    Case 0x27 ; ==> Pfeil re.
    If GUICtrlRead($hookID) + 1 = $passItem Then
    $checkPass = True ; Überprüfung aktivieren
    Return -1 ; Tastendruck wird ignoriert ==> TabItem noch nicht aktiviert
    EndIf
    EndSwitch
    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc ;==>_KeyProc

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

    Func _CheckPass()
    If Not $checkPass Then Return
    If InputBox('Passwort', 'Bitte Passwort eingeben:') == $Passwort Then
    _GUICtrlTab_SetCurSel(GUICtrlGetHandle($Tab), $passItem)
    Else
    MsgBox(0, 'Fehler', 'Falsches Passwort!')
    EndIf
    $checkPass = 0
    EndFunc ;==>_CheckPass

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

    Func _MouseOverTabItem($GUI, $TabID, $iTabItem)
    If Not BitAND(WinGetState($GUI), 8) Then Return False
    Local $old = Opt('MouseCoordMode', 2)
    Local $posM = MouseGetPos(), $tMouse = DllStructCreate($tagPOINT)
    DllStructSetData($tMouse, 1, $posM[0])
    DllStructSetData($tMouse, 2, $posM[1])
    Opt('MouseCoordMode', $old)
    Local $tTabItem = _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem, 1)
    If _WinAPI_PtInRect($tTabItem, $tMouse) Then
    Return True
    Else
    Return False
    EndIf
    EndFunc ;==>_MouseOverTabItem

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

    ;===============================================================================
    ; Function Name: _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem, $iReturnType=0)
    ; Description: Returns the co-ordinates of a TabItem relatively to the GUI co-ordinates
    ; Parameter(s): $GUI - window handle
    ; $TabID - Tab ID (not handle!)
    ; $iTabItem - TabItem index
    ; $iReturnType - Return type array=0 (default), RECT-structure=1
    ; Return Value(s): Array or structure with co-ordinates of a TabItem (left, top, right, bottom)
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem, $iReturnType=0)
    Local $hWnd = GUICtrlGetHandle($TabID)
    Local $TabPos = ControlGetPos($GUI, '', $TabID)
    Local $tRECT = DllStructCreate("int Left;int Top;int Right;int Bottom")
    Local $pRect = DllStructGetPtr($tRECT)
    GUICtrlSendMsg($TabID, $TCM_GETITEMRECT, $iTabItem, $pRect)
    Local $posLeft = $TabPos[0]+2, $posTop = $TabPos[1]+2
    Local $width = (DllStructGetData($tRECT,3) - DllStructGetData($tRECT,1))
    Local $height = DllStructGetData($tRECT,4) - DllStructGetData($tRECT,2)
    If $iTabItem > 0 Then
    For $i = 0 To $iTabItem -1
    GUICtrlSendMsg($TabID, $TCM_GETITEMRECT, $iTabItem, $pRect)
    $posLeft += (DllStructGetData($tRECT,3) - DllStructGetData($tRECT,1))
    Next
    EndIf
    If $iReturnType Then
    DllCall("user32", 'long', 'SetRect', 'ptr', $pRECT, 'long', $posLeft, _
    'long', $posTop, 'long', $posLeft+$width, 'long', $posTop +$height)
    Return $tRECT
    Else
    Local $aOut[4] = [$posLeft, $posTop, $posLeft +$width, $posTop +$height]
    Return $aOut
    EndIf
    EndFunc ;==>_GUICtrlTab_GetItemRectRelativ

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

    Func OnAutoItExit()
    _WinAPI_UnhookWindowsHookEx($hHook)
    DllCallbackFree($hStub_MouseProc)
    _WinAPI_UnhookWindowsHookEx($hHook2)
    DllCallbackFree($hStub_KeyProc)
    EndFunc ;==>OnAutoItExit

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Zahlen aus der momentanigen Bildschirmanzeige lesen

    • BugFix
    • 2. Juni 2012 um 17:30

    OK, nun reicht es.
    Wir alle wissen spätestens nach dem krampfhaften Bemühen des TE sein Vorhaben schönzureden, dass es sich um ein Captcha-Auslesen handelt.
    Verstoß gegen die Forenregeln --- [CLOSED]

  • Zahlen aus der momentanigen Bildschirmanzeige lesen

    • BugFix
    • 2. Juni 2012 um 10:48
    Zitat von Spielie

    in der Schule arbeiten wir in Informatik derzeit mit AutoIt und wir sollen nun ein Programm schreiben, welches 4 Zahlen (größe usw. ist bekannt)


    Sorry, aber das halte ich für wenig wahrscheinlich. Ich vermute hier eine umschriebene Form um Hilfestellung beim Capture-Lesen zu erhalten. Denn solch eine Aufgabe von einem Informatiklehrer?? Auch dem wird die Problematik der Captures bekannt sein.

    Sollte ich mich irren.. OK.
    Irre ich mich? :whistling:

  • Listview Alternativen ??

    • BugFix
    • 1. Juni 2012 um 22:11

    Du wirst keine Lösung finden, in der das "ohne weiteres" machbar ist. Es lassen sich verschiedene Controls zu solch einem Gebilde verknüpfen, aber ein nicht unerheblicher Aufwand für die Koordination ist notwendig.

  • Vorgaben in Input-Felder mit Enter übernehmen

    • BugFix
    • 28. Mai 2012 um 20:16

    Schau mal in diesen Post: https://autoit.de/index.php?page…4347#post254347
    Analog kannst du vorgehen, ENTER ist in der WM_COMMAND-Funktion der $iCode = 0x0
    Bei der Abfrage von ENTER darfst du aber NICHT das Fensterhandle mit abfragen, denn dieses ist bei ENTER immer 0!

  • Überweisung nach China. Erfahrungen?

    • BugFix
    • 27. Mai 2012 um 10:08
    Zitat von peethebee

    Was zur Hölle kaufst du dir da zum Geburtstag?


    Na hoffentlich nicht den China-Tablet-Klon. :pinch:
    Habe das Teil schon live erlebt - den Touchpad-Effekt erreicht man da nur mit gezieltem Schlag eines Gummi-Hammers. :rofl:
    Und der Preis von 130 (?) Euro rechtfertigt auch keine Erwartungen an hochentwickelte Technik. :D

  • Send Firefox (Shortcut)

    • BugFix
    • 26. Mai 2012 um 13:33
    Zitat von Ilse

    Das V ist unterstrichen, aber Alt + V geht nicht.


    Wenn das Kontextmenü aktiviert wurde, brauchst du kein Alt, sondern nur den unterstrichenen Buchstaben um den Shortcut auszuführen. ;)

  • Pixel eines Icons einfärben

    • BugFix
    • 26. Mai 2012 um 08:17

    Nur mal im Bezug zur Aufwandsoptimierung betrachtet:
    Wäre es nicht wesentlich einfacher, wenn man die (begrenzte) Anzahl an Iconvarianten vorab erstellt und bei Bedarf wechselt?

  • Text Link funktioniert nicht richtig

    • BugFix
    • 26. Mai 2012 um 08:11

    Füge eine Fehlerabfrage in die Funktion _link ein:

    [autoit]

    $ret = GUIGetCursorInfo()
    If Not IsArray($ret) Then Return ; <== wenn CursorInfo fehlschlägt, wird die Funktion verlassen

    [/autoit]
  • Automatisierter und beinahe sicherer Zugang zum Internet-Banking

    • BugFix
    • 25. Mai 2012 um 21:04

    HalleMike
    Als erstes Herzlich Willkommen im Forum ( du bist übrigens ca. 80 km Luftlinie von mir entfernt ;) )
    Sei bitte nicht zu dünnhäutig. Niemand will dich hier von oben abbügeln oder Ähnliches. Wärs dir lieber, wenn man die vorhandenen Kritikpunkte ( die du ja einforderst ) in einem Zuckerteig einbackt, damit es süß zu verdauen ist. :whistling:
    Wir sind direkt, ehrlich und bis auf seltene Ausahmen korrekt im Ton. ( Wenn sich da jemand stark daneben benimmt, greifen wir auch ein )
    Wer hier postet, läßt i.A. etwas aus seinem Wissensstand und seinen Erfahrungen einfließen. Das macht die Arbeit eines Forums aus - es entsteht eine Art kollektives Wissen ( aber wir sind keine Borg :rofl: )
    Also greife Hinweise ruhig auf und versuche daraus für deine Projekte einen Gewinn zu erzielen.

    Viel Spaß noch bei uns im Forum.

  • Ordner in einer bestimmten Verzeichnisebenentiefe relativ zum Startordner ermitteln

    • BugFix
    • 24. Mai 2012 um 22:50

    Also mal etwas genauer erklärt:

    Du hast einen Startpfad und möchtest alle Ordner die 2 Ebenen unterhalb dieses Pfades liegen auslesen.
    z.B. folgende Struktur:

    Code
    STARTPFAD         EBENE_1         EBENE_2
    C:\Projekte\      Projekt1\       Source1
                                      Images1
    C:\Projekte\      Projekt2\       Source2
                                      Images2
    [autoit]

    $aFolder = _GetFolderInRelativeDepth("C:\Projekte", 2)
    ; Inhalt $aFolder:
    ; Source1, Images1, Source2, Images2

    [/autoit]

    Gewöhnlich legt man Dateien zu einem bestimmten Programm in Verzeichnisbäumen ab. Wenn du aber nach Dateien suchst, hangelst du dich immer durch einen gesamten Zweig, kehrst dann zurück zum Root und suchst im nächsten Zweig. Hiermit erhälst du sofort alle Ordner einer bestimmten Tiefe und kannst dann ganz gezielt dort suchen.
    Als andere Einsatzmöglichkeit wäre auch das Zusammenstellen von Ordnern/Dateien für Datensicherungen denkbar, da liegen die Userdaten oft auch unterhalb eines Root in bestimmter Tiefe.

  • _Multi_FileListToArray == _FileListToArray extended

    • BugFix
    • 23. Mai 2012 um 18:45

    Die Funktion _FileListToArray hat einige Nachteile:
    - bei gesetztem Dateifilter werden keine Ordner ausgegeben
    - es ist nur ein Dateifilter möglich
    - der Dateifilter arbeitet ungenau ("*.log" erkennt auch "*.log_1" etc.)

    Meine Funktion _Multi_FileListToArray ist von der Grundstruktur und den ersten Parametern, sowie den Fehlerausgaben der Funktion _FileListToArray angepasst.
    Die Unterschiede:
    - bei gesetztem Filter können wahlweise auch die Ordner mit ausgegeben werden
    - der Filter kann mit mehreren Suffixen bestückt werden (z.B. "jpg,jpeg,gif,png,bmp"), Syntax ohne "*."!
    - als Wildcard gilt "*"
    - die Dateiendung wird auf genaue Übereinstimmung geprüft (ausgenommen Groß- /Kleinschreibung)
    - wahlweise kann der gesamte Pfad zurückgegeben werden (nützlich, wenn man mit Dateioperationen weiterarbeiten möchte)
    - um bei gemeinsamer Ausgabe von Ordnern und Dateien diese deutlich unterscheiden zu können, kann wahlweise ein Präfix vor die Ausgabe der Ordner gesetzt werden (z.B. "[D] ")

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

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

    $s = @ScriptDir
    $a = _Multi_FileListToArray($s, 'au3', 0, 0, '[D] ') ; == au3-Dateien und Ordner
    _ArrayDisplay($a, "au3-Dateien und Ordner")

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

    $a = _Multi_FileListToArray($s, 'au3', 1) ; == au3-Dateien ohne Ordner
    _ArrayDisplay($a, "au3-Dateien ohne Ordner")

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

    $a = _Multi_FileListToArray($s, 'au3', 0, 1, '[D] ') ; == au3-Dateien und Ordner, FullPath
    _ArrayDisplay($a, "au3-Dateien und Ordner, FullPath")

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

    $a = _Multi_FileListToArray($s, '*', 0, 0, '[D] ') ; == alle Dateien und Ordner
    _ArrayDisplay($a, "alle Dateien und Ordner")

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

    $a = _Multi_FileListToArray($s, 'jpg,jpeg,gif,png,bmp') ; == alle Bild-Dateien
    _ArrayDisplay($a, "alle Bild-Dateien ")

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

    ;===============================================================================
    ; Function Name....: _Multi_FileListToArray
    ; Description......: Dateien und/oder Ordner eines Pfades auflisten, mehrere Wildcards möglich
    ; Parameter(s).....: $_sPath Pfad für Auflistung
    ; .................: $_sFilter Filter für Dateityp(en), Wildcard ist "*" (Standard), mehrere Filter möglich, trennen mit "," z.B. "jpg,jpeg,gif,png,bmp"
    ; .................: $_iFlag 0 (Standard) = Dateien u. Ordner, 1 = nur Dateien, 2 = nur Ordner
    ; .................: $_fFullPath 0 (Standard) = nur Datei/Ordnername, 1 = kpl. Pfad
    ; .......optional..: $_sDirChar Standard "", Zeichen(folge), die einer Ordnerausgabe vorangestellt werden kann (z.B. "[D] ")
    ; Return Value(s)..: Erfolg Array mit den Dateien/Ordnern, Anzahl an $a[0]
    ; .................: Fehler 0 @error: 1-Pfad existiert nicht; 2-Filter fehlerhaft; 3-Flag fehlerhaft; 4-nichts gefunden
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;===============================================================================
    Func _Multi_FileListToArray($_sPath, $_sFilter='*', $_iFlag=0, $_fFullPath=0, $_sDirChar='')
    If Not FileExists($_sPath) Then Return SetError(1,0,0)
    If StringRegExp($_sFilter, '[.;\s]') Then Return SetError(2,0,0)
    If $_iFlag < 0 Or $_iFlag > 2 Then Return SetError(3,0,0)
    If StringRight($_sPath, 1) <> '\' Then $_sPath &= '\'
    Local $fAll = False, $sFiles = '', $aFilter[2] = [1,'*'], $hSearch, $sFound, $aRet, $sSuffix, $sPath = ''
    If $_fFullPath Then $sPath = $_sPath
    If $_sFilter = '*' Then $fAll = True
    If Not $fAll Then $aFilter = StringSplit($_sFilter, ',')
    $hSearch = FileFindFirstFile($_sPath & '*.*')
    While True
    $sFound = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    Switch $_iFlag
    Case 0
    If StringInStr(FileGetAttrib($_sPath & $sFound), 'D') Then ; == alle Ordner
    $sFiles &= $_sDirChar & $sPath & $sFound & Chr(0)
    Else ; == Dateien Filtern
    If $fAll Then
    $sFiles &= $sPath & $sFound & Chr(0) ; == alle Dateien
    Else
    For $i = 1 To $aFilter[0] ; == Dateien aus Filter
    $sSuffix = StringTrimLeft($sFound, StringInStr($sFound, '.', 1, -1))
    If $aFilter[$i] = $sSuffix Then
    $sFiles &= $sPath & $sFound & Chr(0)
    ExitLoop
    EndIf
    Next
    EndIf
    EndIf
    Case 1 ; == Dateien
    If StringInStr(FileGetAttrib($_sPath & $sFound), 'D') Then ContinueLoop
    If $fAll Then
    $sFiles &= $sPath & $sFound & Chr(0) ; == alle Dateien
    Else
    For $i = 1 To $aFilter[0] ; == Dateien aus Filter
    $sSuffix = StringTrimLeft($sFound, StringInStr($sFound, '.', 1, -1))
    If $aFilter[$i] = $sSuffix Then
    $sFiles &= $sPath & $sFound & Chr(0)
    ExitLoop
    EndIf
    Next
    EndIf
    Case 2 ; == Ordner
    If Not StringInStr(FileGetAttrib($_sPath & $sFound), 'D') Then ContinueLoop
    $sFiles &= $_sDirChar & $sPath & $sFound & Chr(0)
    EndSwitch
    WEnd
    $aRet = StringSplit(StringTrimRight($sFiles, 1), Chr(0))
    If @error Then Return SetError(4,0,0)
    Return $aRet
    EndFunc ;==> _Multi_FileListToArray

    [/autoit]
  • Zeilen im Script löschen

    • BugFix
    • 23. Mai 2012 um 18:32

    Wenn ich das richtig verstanden habe möchtest du Kommentarzeilen löschen?
    Dann schau mal hier: https://autoit.de/index.php?page…3195#post243195

  • Diskussion zu "TV - Stream aufnehmen und speichern"

    • BugFix
    • 23. Mai 2012 um 08:29
    Zitat von ProblemUser

    Dieser sagte, das das aufnehmen von TV-Sendungen, Radio Sendungen legal sind.


    Das ist auch korrekt. Jedoch ist diese Aufzeichnung schon passiert, wenn du den Stream siehst, die Daten werden ja gepuffert, bevor dein Player sie anzeigen kann (auch wenn du später keinen Zugriff mehr darauf hast). Schon allein deshalb ist jede weitere Form der Aufzeichnung weder authorisiert noch zulässig. Es sei denn, der Anbieter gestattet es ausdrücklich, dann werden gewöhnlich die Daten aber direkt zum Download angeboten (s. Mediathek).

  • Taschenrechner will nicht wirklich

    • BugFix
    • 22. Mai 2012 um 17:58
    [autoit]

    If BitAND(GUICtrlRead($radio1), $GUI_CHECKED) = $GUI_CHECKED Then

    [/autoit]

    Das ist unnötig, da BitAND, wenn es $GUI_CHECKED nicht im Status findet, "0" liefert. Somit reicht völlig:

    [autoit]

    If BitAND(GUICtrlRead($radio1), $GUI_CHECKED) Then

    [/autoit]

    ;)

  • Diskussion zu "TV - Stream aufnehmen und speichern"

    • BugFix
    • 22. Mai 2012 um 12:45

    Das, was du meinst was Recht ist, muss nicht zwangsläufig auch der geltenden Rechtssprechung genügen.
    Wir sind hier ein Forum und müssen versuchen "unantastbar" zu sein. D.h. alle potentiell illegalen Inhalte sollten tunlichst vermieden werden.
    Das Aufzeichnen von TV-Streams ist nach meiner Lesart der deutschen Gesetze ganz eindeutig illegal! Und somit werde ich auch ganz rigoros jeden Thread, der sich dieses Inhalts annimmt ins Nirvana befördern.
    Hier gilt nicht "Im Zweifel für den Angeklagten", sondern immer "Im Zweifel gegen den Angeklagten". Nur so können wir uns selbst schützen.

  • ISN AutoIt Studio

    • BugFix
    • 22. Mai 2012 um 09:13
    Zitat von DaX

    Vielleicht kann er ja, sobald eine Zeile abgeschlossen ist, den Syntax mit Au3Check.exe überprüfen.


    Eine OnTheFly-Syntaxüberprüfung halte ich für wenig sinnvoll. Wer jemals in VB / VBA gecodet hat kennt dieses rotzige Verhalten:
    Man schreibt einen Befehl, möchte schnell in einer anderen Zeile etwas abändern und prompt erhält man den Hinweis auf Syntaxfehler. Auch das einfache Unterbrechen des Schreibens um mal schnell einen Parameter nachzuschlagen oder eine Konstante zu suchen wird dabei nett mit rotgefärbten Meldungen begleitet. DAS macht definitiv keine Freude und ist u.A. ein Grund warum ich VB habe links liegen lassen.

  • Script funktioniert nicht, wenn noch eine IE-Instanz bereits läuft

    • BugFix
    • 21. Mai 2012 um 20:59

    Arbeite doch mit der IE.au3 (in der Hilfe: UDF - IE Management)
    Mit _IEAttach kannst du auf eine existierende Instance zugreifen.

  • Transparenz bei MouseOver switchen

    • BugFix
    • 21. Mai 2012 um 19:47

    Ersetze einfach in der Step-Berechnung Int mit Ceiling. Klappt auch. ;)

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™