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

  • Update funktion?

    • BugFix
    • 9. Juni 2008 um 12:40

    Also "will des nich" ist ja nunmal eine wirklich exakte Fehlerbeschreibung ;)

  • Update funktion?

    • BugFix
    • 9. Juni 2008 um 12:17

    Jo, in dem Link ist meine Session-ID ;)
    Also schreib in die SuFu: "update" und ferddisch :D

  • .Png in Guictrlcreatepic verwenden ?

    • BugFix
    • 9. Juni 2008 um 12:13

    Banale Frage: Wenn du nicht mal weißt, was ein Control ist, warum schaust du nicht einfach in die Hilfe ?

    [OT]
    Auch wenn es nicht alle betrifft, aber ich habe immer mehr den Eindruck, dass in der jungen Generation der Hang zum Nichts-selber-machen größer ist, als das Streben nach eigenen Erkenntnissen.
    Immer schön bei Mutti wohnen und man ja keinen Finger krumm machen. Aber gebratene Tauben möchten doch bitte schön in ausreichender Zahl in den Mund fliegen!
    Echt, da kommt mir glatt die Galle hoch. :cursing:
    [/OT]

  • Update funktion?

    • BugFix
    • 9. Juni 2008 um 12:03

    Suchfunktion nutzen? http://www.autoit.de/index.php?form=Search&searchID=50192&highlight=update

  • Benutzer suchen

    • BugFix
    • 9. Juni 2008 um 11:28

    Na klar :)

    [autoit]

    ; Generated by AutoIt Scriptomatic

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

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"
    $ACC_2_Search = 'Accountname'

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

    $Output=""
    $Output = $Output & "Computer: " & $strComputer & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

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

    If IsObj($colItems) then
    For $objItem In $colItems
    If $objItem.Name = $ACC_2_Search Then
    MsgBox(0, 'Gefunden', $ACC_2_Search & ' auf PC vorhanden.')
    ExitLoop
    EndIf
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_UserAccount" )
    Endif

    [/autoit]

    Edit: Du kannst auch im Netzwerk abfragen, für $strComputer = "localhost" dann die IP übergeben.

  • Benutzer suchen

    • BugFix
    • 9. Juni 2008 um 11:17
    User Accounts
    [autoit]

    ; Generated by AutoIt Scriptomatic

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

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

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

    $Output=""
    $Output = $Output & "Computer: " & $strComputer & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

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

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $Output & "AccountType: " & $objItem.AccountType & @CRLF
    $Output = $Output & "Caption: " & $objItem.Caption & @CRLF
    $Output = $Output & "Description: " & $objItem.Description & @CRLF
    $Output = $Output & "Disabled: " & $objItem.Disabled & @CRLF
    $Output = $Output & "Domain: " & $objItem.Domain & @CRLF
    $Output = $Output & "FullName: " & $objItem.FullName & @CRLF
    $Output = $Output & "InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF
    $Output = $Output & "LocalAccount: " & $objItem.LocalAccount & @CRLF
    $Output = $Output & "Lockout: " & $objItem.Lockout & @CRLF
    $Output = $Output & "Name: " & $objItem.Name & @CRLF
    $Output = $Output & "PasswordChangeable: " & $objItem.PasswordChangeable & @CRLF
    $Output = $Output & "PasswordExpires: " & $objItem.PasswordExpires & @CRLF
    $Output = $Output & "PasswordRequired: " & $objItem.PasswordRequired & @CRLF
    $Output = $Output & "SID: " & $objItem.SID & @CRLF
    $Output = $Output & "SIDType: " & $objItem.SIDType & @CRLF
    $Output = $Output & "Status: " & $objItem.Status & @CRLF
    if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
    $Output=""
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_UserAccount" )
    Endif

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

    Func WMIDateStringToDate($dtmDate)
    Return (StringMid($dtmDate, 5, 2) & "/" & _
    StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
    & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
    EndFunc

    [/autoit]
  • GUICtrlTreeView: alle Child-Item eines Parent-Item rekursiv Aus-/ Einklappen

    • BugFix
    • 9. Juni 2008 um 10:55

    Ich befürchte, ich werde wirklich alt ;( .
    Da hatte ich doch mein eigenes Testskript falsch bestückt und kam dadurch zu der Annahme, dass rekursiv standarmäßig nicht geht, stattdessen aber ein Level tief.
    Tatsächlich ist es genau umgekehrt :S
    Mit Angabe des ItemHandle werden alle Subs Aus-/Eingeklappt ( _GUICtrlTreeView_Expand($hTreeView, $hItem) ). Also genau das, was ich mit obiger Funktion mühevoll nachgebaut habe :D.

    Nun gut, da ein Level Ausklappen (per Maus: Klick auf '+') per Funktion nicht geht (oder soll ich vorsichtshalber sagen, dass meine altersschwachen Augen es bis jetzt vielleicht übersehen haben ? ;) ), reiche ich somit diese Funktion nach.
    Hierbei geht es nur um das Ausklappen, da mit der Standard Expand-Funktion eingeklappt werden kann:

    _GUICtrlTreeView_ExpandOneLevel()
    [autoit]

    ;==================================================================================================
    ; Function Name: _GUICtrlTreeView_ExpandOneLevel($hTreeView [, $hParentItem=0])
    ; Description:: Ausklappen nur EINER Ebene eines Items, analog zum Mausklick auf '+'
    ; Parameter(s): $hTreeView Handle des TreeView
    ; $hParentItem Handle des Auszuklappenden Parent-Items
    ; Standard 0 ==> Handle des ersten Item im TreeView
    ; Return: Erfolg nichts
    ; Fehler @error 1 - TreeView enthält kein Item
    ; @error 2 - Item hat keine Child-Item
    ; Note: Die Funktion sollte zwischen _GUICtrlTreeView_BeginUpdate() und _GUICtrlTreeView_EndUpdate()
    ; ausgeführt werden um ein Flackern zu verhindern
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GUICtrlTreeView_ExpandOneLevel($hTreeView, $hParentItem=0)
    If $hParentItem < 1 Then
    Local $hCurrentItem = _GUICtrlTreeView_GetFirstItem($hTreeView)
    Else
    Local $hCurrentItem = $hParentItem
    EndIf
    If $hCurrentItem = 0 Then Return SetError(1)
    Local $hChild
    Local $countChild = _GUICtrlTreeView_GetChildCount($hTreeView, $hCurrentItem)
    If $countChild = 0 Then Return SetError(2)
    _GUICtrlTreeView_Expand($hTreeView, $hCurrentItem)
    For $i = 1 To $countChild
    If $i = 1 Then
    $hChild = _GUICtrlTreeView_GetFirstChild($hTreeView, $hCurrentItem)
    Else
    $hChild = _GUICtrlTreeView_GetNextSibling($hTreeView, $hChild)
    EndIf
    If _GUICtrlTreeView_GetChildren($hTreeView, $hChild) Then _GUICtrlTreeView_Expand($hTreeView, $hChild, False)
    Next
    EndFunc ;==>_GUICtrlTreeView_ExpandOneLevel

    [/autoit]
  • MoinMoin

    • BugFix
    • 9. Juni 2008 um 00:43

    Auch von mir ein Herzliches Willkommen und Happy Skripting. :thumbup:

  • GUICtrlCreateList aktualisieren?

    • BugFix
    • 8. Juni 2008 um 22:57

    Erstelle eine Funktion zum Befüllen der ListBox.
    Diese rufst du zum ersten mal nach Erstellen der GUI auf (also wenn die ListBox existiert).
    In der Funktion:
    - alle Einträge der ListBox löschen ( _GUICtrlListBox_ResetContent($hWnd) )
    - INI-Einträge auslesen und mit _GUICtrlListBox_AddString($hWnd, $sText) in die ListBox schreiben

    Diese Funktion rufst du dann immer auf, wenn sich Einträge verändern.
    Wichtig:
    Du benötigst das Handle der ListBox. Also entweder gleich mit _GUICtrlListBox_Create() erzeugen (gibt das Handle zurück), oder:
    $IDList = GUICtrlCreateList()
    $hList = GUICtrlGetHandle($IDList)

  • Outlook Express - abrufen wenn versteckt

    • BugFix
    • 8. Juni 2008 um 11:51

    Vielleicht hilft dir das weiter: http://www.autoitscript.com/forum/index.php?showtopic=50122&hl=outlook++express

  • GUICtrlTreeView: alle Child-Item eines Parent-Item rekursiv Aus-/ Einklappen

    • BugFix
    • 7. Juni 2008 um 22:46

    Hi,
    standardmäßig kann ich entweder alle Item eines Treeview inkl. aller Sub-Item oder nur eine Ebene tiefer zum aktuellen Item Aus-/Einklappen.

    Die folgende Funktion ermöglicht es, rekursiv alle Child-Item eines Parents Aus- bzw. Einzuklappen.
    Im Bsp. kann per Kontextmenü der markierte Zweig des Treeview Aus- und Eingeklappt werden.
    Die Warnung beim Skriptstart ignorieren, betrifft eine Variable, die innerhalb der Funktion erstellt wird.

    _GUICtrlTreeView_ExpandItemRekursiv()
    [autoit]

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

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

    _Main()

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

    Func _Main()
    Local $hItem, $hImage, $iImage, $hTreeView
    Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)

    $gui = GUICreate("TreeView Expand One Sub-Level", 400, 300)
    $hTreeView = GUICtrlCreateTreeView(2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE)
    $ContextMenu = GUICtrlCreateContextMenu($hTreeView)
    $mnuExpand = GUICtrlCreateMenuItem('Zweig kpl. Ausklappen', $ContextMenu)
    $mnuCollapse = GUICtrlCreateMenuItem('Zweig kpl. Einklappen', $ContextMenu)
    GUISetState()

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

    $hImage = _GUIImageList_Create(16, 16, 5, 3)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 110)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 131)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 165)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 168)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 137)
    _GUIImageList_AddIcon($hImage, "shell32.dll", 146)
    _GUICtrlTreeView_SetNormalImageList($hTreeView, $hImage)

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

    _GUICtrlTreeView_BeginUpdate($hTreeView)
    For $x = 1 To Random(3, 4, 1)
    $iImage = Random(0, 5, 1)
    $hItem = _GUICtrlTreeView_Add($hTreeView, 0, StringFormat("[%02d] New Item", $x), $iImage, $iImage)
    For $y = 1 To Random(3, 4, 1)
    $iImage = Random(0, 5, 1)
    $hChild = _GUICtrlTreeView_AddChild($hTreeView, $hItem, StringFormat("[%02d] New Child", $y), $iImage, $iImage)
    For $z = 1 To Random(3, 4, 1)
    $iImage = Random(0, 5, 1)
    _GUICtrlTreeView_AddChild($hTreeView, $hChild, StringFormat("[%02d] New Child", $y), $iImage, $iImage)
    Next
    Next
    Next
    _GUICtrlTreeView_EndUpdate($hTreeView)
    Do
    $msg = GUIGetMsg()
    Switch $msg
    Case $mnuExpand
    _GUICtrlTreeView_ExpandItemRekursiv($hTreeView)
    Case $mnuCollapse
    _GUICtrlTreeView_ExpandItemRekursiv($hTreeView, -1, False)
    EndSwitch
    Until $msg = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Main

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

    ;==================================================================================================
    ; Function Name: _GUICtrlTreeView_ExpandItemRekursiv($hTreeView [, $hParentItem=-1 [, $bExpand=True]])
    ; Description:: Aus- oder Einklappen aller Child-Items eines Item und deren Child-Items
    ; Parameter(s): $hTreeView Handle des TreeView
    ; $hParentItem Handle des Aus/Einzuklappenden Parent-Items
    ; Standard -1 ==> Handle des markierten Item
    ; $bExpand Ausklappen (Standard) = True, Einklappen = False
    ; Return: Erfolg nichts
    ; Fehler @error 1 - ItemHandle nicht übergeben und kein Item markiert
    ; Requirement(s): GetAllParents()
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GUICtrlTreeView_ExpandItemRekursiv($hTreeView, $hParentItem=-1, $bExpand=True)
    If $hParentItem < 1 Then
    Local $hCurrentItem = _GUICtrlTreeView_GetSelection($hTreeView)
    Else
    Local $hCurrentItem = $hParentItem
    EndIf
    If $hCurrentItem = 0 Then Return SetError(1)
    Global $aParentItem[1] = [0]
    GetAllParents($hTreeView, $hCurrentItem)
    For $i = 0 To UBound($aParentItem) -1
    If $bExpand Then
    _GUICtrlTreeView_Expand($hTreeView, $aParentItem[$i])
    Else
    _GUICtrlTreeView_Expand($hTreeView, $aParentItem[$i], False)
    EndIf
    Next
    ReDim $aParentItem[1]
    $aParentItem[0] = 0
    EndFunc ;==>_GUICtrlTreeView_ExpandItemRekursiv

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

    Func GetAllParents($hTreeView, $hItem)
    Local $hChild
    Local $countChild = _GUICtrlTreeView_GetChildCount($hTreeView, $hItem)
    If $countChild = 0 Then Return
    If $aParentItem[UBound($aParentItem)-1] <> 0 Then ReDim $aParentItem[UBound($aParentItem)+1]
    $aParentItem[UBound($aParentItem)-1] = $hItem
    For $i = 1 To $countChild
    If $i = 1 Then
    $hChild = _GUICtrlTreeView_GetFirstChild($hTreeView, $hItem)
    Else
    $hChild = _GUICtrlTreeView_GetNextSibling($hTreeView, $hChild)
    EndIf
    If _GUICtrlTreeView_GetChildren($hTreeView, $hChild) Then GetAllParents($hTreeView, $hChild)
    Next
    EndFunc ;==>GetAllParents

    [/autoit]

    Edit 09.06.08: Die Funktion klappt einwandfrei ... aber völlig überflüssig :S , s. Post 3

  • AutoIt Zukunftssicher?

    • BugFix
    • 7. Juni 2008 um 15:16

    Ja, es lohnt auf jeden Fall. AutoIt hat einen recht großen Funktionsumfang und ermöglicht die Realisierung vielfältiger Aufgaben.
    Wenn du mit AutoIt umgehen kannst, wird es dir eine Hilfe für das spätere Verständnis anderer Programmiersprachen sein.
    Empfehlen würde ich auch, von Anbeginn mit Opt('MustDeclareVars',1) zu arbeiten.
    Das zwingt dich eine Übersicht über deine Variablen und deren Namespace zu haben.

  • auf und ab xD

    • BugFix
    • 7. Juni 2008 um 08:14
    Zitat von Eistee

    Ich habe es zwar gemacht aber ich habe dafür nie die Hilfe diese Forums in Anspruch genommen das war meine Idee und ich habe sie umgesetzt ich habe uíhn jetzt auch nur gepostet weil hier jemand etwas ähnliches vorhatte es heist ja nicht das er es so hätte übernehmen müssen

    Welche Relevanz hat es, ob du für eine blöde Idee Hilfe in Anspruch genommen hast oder nicht?
    Hoffentlich sind dir die Folgen bewußt, wenn dein Tun in der Schule auffliegt? Minimal ein Schulverweis, wahrscheinlicher noch dazu ein Hausverbot für den Computerraum (was deinen Schulabschluß zum Kippen bringen kann), nicht unmöglich ein Schulrausschmiß.
    In Abwandlung eines alten Sprichwortes: Vor Beginn des Skriptens - Gehirn einschalten!

    Zitat von Eistee

    P.S. sag mir doch mal ein paar tipps was du sonst mit autoit machen willst mir fällt nichts mehr ein...

    Dir fällt nix ein??
    Ich bin mir sicher, dass du kaum die Hälfte der in AutoIt enthaltenen Funktionsvielfalt kennst oder verstanden hast. (Überzeuge mich eines Besseren!)
    Schau dir allein die UDF-Sammlung an. Nimm dir Kapitel für Kapitel vor und gestalte die Skripte aus der Hilfe nach (nicht nur die vorhandenen ausführen). Dabei wird dir von selbst bewußt werden, was man alles damit machen kann und somit entstehen auch neue Projektideen.

  • Hilfe: sinnvolle Nutzung von Pixelsearch

    • BugFix
    • 7. Juni 2008 um 07:43
    Zitat von filewalker

    Kann man das Programm so verändern, dass es im prinzip nur die eckpunkte von Linien erkennt und nur die Koordinaten dieser Punkte aufführt?


    Dazu mußt du festlegen, welche Bedingungen für die "Begrenzungspixel" gelten und daraufhin alle Pixel, für die diese Bedingungen nicht zutreffen entfernen.
    Ich würde in etwa so vorgehen:
    - linke Begrenzung: für jedes Y der kleinste X-Wert
    - rechte Begrenzung: für jedes Y der größte X-Wert
    jetzt umsortieren X-aufsteigend und innerhalb von X die Y-Werte absteigend
    - obere Begrenzung: für jedes X der kleinste Y-Wert
    - untere Begrenzung: für jedes X der größte Y-Wert
    Diese Variante erkennt nicht nur Eckpunkte, sondern alle Koordinaten des Umfangs (also auch Kreis oder Vieleck etc.).

  • Hilfe: sinnvolle Nutzung von Pixelsearch

    • BugFix
    • 6. Juni 2008 um 22:11
    Zitat von filewalker

    Und ich habe noch eine Frage an BugFix: in deinem Script erstellst du sql tabellen. Muss dafür ein sql server laufen? weil du hast keinen sql dienst über _sqllie_open geöffnet, weil das sortieren funktioniert nicht richtig. Ich würde gerne die y-Koordinaten absteigend ordnenund dann die dazugehörigen x werte.

    Hi,
    da man in Datenbanken wunderbar mehrstufig sortieren kann, war mir die Idee gekommen einfach ein 2D-Array über den Umweg einer SQL-Tabelle mehrstufig zu sortieren.
    Und wenn du mal in Zeile 110 der Sortierfunktion schaust:

    [autoit]

    _SQLite_Startup ()
    If @error > 0 Then Return SetError(3,0,1)
    $hSQL = _SQLite_Open ()

    [/autoit]

    - wie du siehst wird hier die Datenbank temporär initialisiert. Ein SQL-Server wird nicht benötigt.

    Um Y absteigend und für gleiche Y dann X aufsteigend zu sortieren wäre der Sortierstring: "1|1,0|0"
    Somit würde die Reihenfolge der Koordinaten auf dem Desktop betrachtet von unten links nach oben rechts abgefahren.
    Da die Reihenfolge mit der Sortierung bestimmt wird, ist es ohne Belang wie die Scanrichtung ist.

  • Hilfe: sinnvolle Nutzung von Pixelsearch

    • BugFix
    • 5. Juni 2008 um 23:11

    Probier mal die Funktion, hatte sie für einen anderen Zweck geschrieben, aber ich denke es könnte hier passen.

    Spoiler anzeigen
    [autoit]

    #include <SQLite.au3>
    #include <SQLite.dll.au3>

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

    Dim $DateiOut = @ScriptDir & "\Scanergebnis.txt"
    Dim $Farbe = 0x000000
    Dim $Schrittweite = 1

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

    _pix_scan($Farbe, $Schrittweite, $DateiOut)

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

    ;------------------------------------------------------------------------------------------------------------
    ; Funktion _pix_scan($color, $step, $file)
    ;
    ; Beschreibung scannt Display nach gesuchter Farbe, Ausgabe in Datei
    ; Pixelbereiche 2-stufig sortiert
    ;
    ; Parameter $color: zu suchende Farbe
    ; $step: Rastergröße
    ; $file: Ausgabedatei
    ;
    ; Return Datei mit den gefundenen Pixelpositionen
    ;
    ; Erfordernisse Funktion: _Array2DSortFree( )
    ; Nach dem Funktionsaufruf wird der Scan erst mit {F9} gestartet
    ; um z.B. vorab ein Spiel starten zu können
    ;
    ; Autor BugFix ([email='bugfix@autoit.de'][/email])
    ;------------------------------------------------------------------------------------------------------------
    #include <File.au3>
    #Include <Misc.au3>
    Func _pix_scan($color, $step, $file)
    Local $endX = @DesktopWidth, $endY = @DesktopHeight
    Local $left = 0, $top = 0, $right = $step, $bottom = $step
    Local $arPos, $arSort[1][1]
    Do
    Sleep(100)
    Until _IsPressed("78") ; F9
    $fh = FileOpen($file,1)
    Do
    For $left = 0 To $endX Step $step
    $pos = PixelSearch($left, $top, $right, $bottom, $color, 0, $step)
    If IsArray($pos) Then FileWriteLine($file, $pos[0] & "|" & $pos[1])
    $right += $step
    Next
    $left = 0
    $right = $step
    $top += $step
    $bottom += $step
    Until $bottom > $endY
    FileClose($fh)
    Beep(500, 2000)
    _FileReadToArray($file, $arPos)
    FileDelete($file)
    ReDim $arSort[UBound($arPos)][2]
    For $i = 0 To UBound($arPos)-1
    $var = StringSplit($arPos[$i], "|")
    If ( IsArray($var) And UBound($var) = 3 ) Then
    $arSort[$i][0] = Number($var[1])
    $arSort[$i][1] = Number($var[2])
    EndIf
    Next
    _Array2DSortFree($arSort, '0|0,1|0')
    $fh = FileOpen($file,1)
    For $i = 0 To UBound($arSort)-1
    If $arSort[$i][0] <> "" And $arSort[$i][1] <> "" Then _
    FileWriteLine($fh, "X: " & $arSort[$i][0] & " , Y: " & $arSort[$i][1])
    Next
    FileClose($fh)
    EndFunc

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

    ;==================================================================================================
    ; Function Name: _Array2DSortFree($ARRAY, $sCOL_ASC)
    ; Description:: Sortierung von 1D/2D-Arrays nach freier Wahl
    ; 1D Sortierung Auf- oder Absteigend
    ; 2D mehrstufige Sortierung, Reihenfolge und Sortier-
    ; richtung (je Spalte) frei wählbar
    ; auch einzelne Spalte sortierbar
    ; Parameter(s): $ARRAY Das zu sortierende Array
    ; $sCOL_ASC String mit Sortierangaben "Spalte|Richtung [, Spalte|Richtung]"
    ; zu sortierende Spalte (0-Index)|Richtung (0-Asc, 1-Desc)
    ; z.B. Spalte 2 aufsteigend und in 2 absteigend Spalte 1
    ; _Array2DSortFree($ar2Sort, '2|0,1|1')
    ; Return Value(s): Erfolg 0
    ; Fehler 1 Set Error 1 $ARRAY ist kein Array
    ; 2 1D-Array, aber Spaltenangabe für 2D
    ; 3 SQL-Fehler
    ; 4 Angaben für Spalte|Sortierrichtung fehlerhaft
    ; Requirements: #include <SQLite.au3>
    ; #include <SQLite.dll.au3>
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _Array2DSortFree(ByRef $ARRAY, $sCOL_ASC)
    If Not IsArray($ARRAY) Then Return SetError(1,0,1)
    Local $tableStr = "CREATE TABLE tblTEST ("
    Local $insertStr = '', $insertBase = "INSERT INTO tblTEST VALUES ("
    Local $sortOrder = '', $sortStr = "SELECT * FROM tblTEST ORDER BY "
    Local $aResult, $iRows, $iColumns, $iRval, $asc
    $sCOL_ASC = StringStripWS($sCOL_ASC, 8)
    Local $ub2nd = UBound($ARRAY, 2)
    If @error = 2 Then
    If (StringLen($sCOL_ASC) > 3) Or (StringLeft($sCOL_ASC, 1) <> '0') Then Return SetError(2,0,1)
    If StringRight($sCOL_ASC, 1) = 0 Then
    _ArraySort($ARRAY)
    Else
    _ArraySort($ARRAY, 1)
    EndIf
    Return 0
    Else
    Local $aOut[UBound($ARRAY)][$ub2nd]
    EndIf
    _SQLite_Startup ()
    If @error > 0 Then Return SetError(3,0,1)
    $hSQL = _SQLite_Open ()
    If @error > 0 Then
    _SQLite_Shutdown ()
    Return SetError(3,0,1)
    EndIf
    For $i = 0 To UBound($ARRAY, 2) -1
    $tableStr &= "'field" & $i & "',"
    Next
    $tableStr = StringTrimRight($tableStr, 1) & ");"
    For $i = 0 To UBound($ARRAY) -1 ; Erzeuge Insert-String
    $insertStr &= $insertBase
    For $k = 0 To UBound($ARRAY, 2) -1
    $insertStr &= "'" & $ARRAY[$i][$k] & "',"
    Next
    $insertStr = StringTrimRight($insertStr, 1) & ");"
    Next
    ; Erstelle Tabelle und füge Werte ein
    If _SQLite_Exec ( $hSQL, $tableStr & $insertStr ) <> $SQLITE_OK Then
    _SQLite_Shutdown ()
    Return SetError(3,0,1)
    EndIf
    If StringInStr($sCOL_ASC, ',') Then
    Local $aOrder = StringSplit($sCOL_ASC, ',')
    For $i = 1 To UBound($aOrder) -1
    If StringInStr($sCOL_ASC, '|') Then
    Local $var = StringSplit($aOrder[$i], '|')
    $asc = ' ASC'
    If $var[2] = 1 Then $asc = ' DESC'
    $sortOrder &= 'field' & $var[1] & $asc & ','
    Else
    _SQLite_Shutdown ()
    Return SetError(4,0,1)
    EndIf
    Next
    $sortOrder = StringTrimRight($sortOrder, 1) & ';'
    Else
    If (StringLen($sCOL_ASC) = 3) And (StringInStr($sCOL_ASC, '|')) Then
    Local $var = StringSplit($sCOL_ASC, '|')
    $asc = ' ASC'
    If $var[2] = 1 Then $asc = ' DESC'
    $sortOrder &= 'field' & $var[1] & $asc
    Else
    _SQLite_Shutdown ()
    Return SetError(4,0,1)
    EndIf
    EndIf
    $iRval = _SQLite_GetTable2d (-1, $sortStr & $sortOrder, $aResult, $iRows, $iColumns)
    If $iRval = $SQLITE_OK Then
    For $i = 1 To UBound($aResult) -1
    For $k = 0 To UBound($aResult,2) -1
    $aOut[$i-1][$k] = $aResult[$i][$k]
    Next
    Next
    Else
    _SQLite_Shutdown ()
    Return SetError(4,0,1)
    EndIf
    _SQLite_Exec ($hSQL, "DROP TABLE tblTEST;")
    _SQLite_Close ()
    _SQLite_Shutdown ()
    $ARRAY = $aOut
    Return 0
    EndFunc ;==> _Array2DSortFree

    [/autoit]
  • hotkeyset...blockinput

    • BugFix
    • 5. Juni 2008 um 20:34

    Meinst du etwa, dass ein Hotkey kein Input ist?
    Wenn Blockinput aktiv ist, wird natürlich auch nicht auf deine Tastenkombination reagiert. ;)

  • Nesth klappt nicht mit einer static IP DHCP klappt!

    • BugFix
    • 4. Juni 2008 um 22:45

    Ich hatte da mal eine Funktion ohne netsh geschrieben. Vielleicht hilft es dir weiter:
    Konfiguration Netzwerkadapter

  • WIndows Media Player Statusbar

    • BugFix
    • 1. Juni 2008 um 22:48

    Zur Lösung verhilft dir das Windows Media Player Object Model.
    Damit kannst du direkt auf den WMP zugreifen. Probiers mal selber.
    Hier noch eine Seite mit Infos: WMP Object Model

  • Recent File List

    • BugFix
    • 30. Mai 2008 um 19:16

    Hi,
    ihr kennt alle aus jeder Anwendung, in der man Dateien öffnen muß, die Recent File List - die Auflistung der zuletzt genutzten Dateien in der Reihenfolge ihres Aufrufs bis zu einer maximalen Anzahl.
    Ich habe das gerade in einem Projekt benötigt und es in eine Funktion gepackt. Vielleicht kann es ja jemand mal gebrauchen.
    Wahlweise kann die letzte Datei an erster oder letzter Position stehen.
    Da ich nicht unendlich viele Parameter übergeben wollte, sind die Angaben für die INI-Datei fix. Wenn man andere Sektions- und Schlüsselnamen verwenden möchte, läßt sich dies aber problemlos in der Funktion anpassen.

    Hier auch mal ein durchkommentiertes Bsp., wie man es verwenden könnte. Und falls wieder die Frage kommt, ob das (Bsp.) auch mit GUIGetMsg() geht: Im Prinzip ja, aber nur mit einem erheblichen Aufwand, da das Makro @GUI_CtrlID nur im OnEventMode zur Verfügung steht.

    Spoiler anzeigen
    [autoit]

    #cs MUSTER INI-Datei
    [recent_num]
    max=5
    aktuell=0

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

    [recent_file]
    #ce

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

    #include<GUIConstantsEx.au3>
    #include<Array.au3>
    Opt("GUIOnEventMode",1)

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

    Global $INIPath = @ScriptDir & '\TEST_settings.INI', $path
    Global $maxFiles = 5 ; Vorbelegung, wird überschrieben falls in INI anderer Wert
    Global $currCountFiles = 0 ; Vorbelegung, wird überschrieben falls in INI anderer Wert
    Global $aRecentFiles[1] ; zwingend als Array deklarieren, wird im Prog angepaßt
    Global $aItemID[1][2] = [[-1,0]] ; führt ID's der MenüItems, Vorbelegung für Überprüfung

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

    If Not FileExists($INIPath) Then ; Erstellung INI falls noch nicht vorhanden
    IniWrite($INIPath, 'recent_num', 'maximum', 5)
    IniWrite($INIPath, 'recent_num', 'aktuell', 0)
    Else ; Auslesen aktuell gespeicherter Werte aus der INI
    $maxFiles = IniRead($INIPath, 'recent_num', 'maximum', 5)
    $currCountFiles = IniRead($INIPath, 'recent_num', 'aktuell', 0)
    If $currCountFiles > 0 Then
    $aRecentFiles = IniReadSection($INIPath, 'recent_file')
    ReDim $aItemID[$aRecentFiles[0][0]][2] ; Array für MenüItems auf Anzahl gespeicherter Dateien anpassen
    $aItemID[0][0] = 1 ; Vorbelegung -1 aufheben für Überprüfung
    EndIf
    EndIf

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

    $GUI = GUICreate('Recent Files')
    GUISetOnEvent($GUI_EVENT_CLOSE, '_ende')
    $btn = GUICtrlCreateButton('Datei wählen', 100, 50, 120, 25)
    GUICtrlSetOnEvent(-1, '_btnClick')
    $mnu = GUICtrlCreateMenu('Datei')
    $item_end = GUICtrlCreateMenuItem('Beenden',$mnu)
    GUICtrlSetOnEvent(-1, '_ende')
    GUICtrlCreateMenuItem('',$mnu)
    GUISetState()

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

    If $aItemID[0][0] <> -1 Then ; wenn Einträge in INI, MenüItems erstellen
    _Array2DDelete($aRecentFiles, 0) ; Zähler löschen für gleiche Größe beider Arrays
    For $i = 0 To UBound($aRecentFiles) -1
    $split = _StringSplitOnce($aRecentFiles[$i][1], '\', -1) ; gespeicherten Pfad splitten
    $aItemID[$i][0] = GUICtrlCreateMenuItem($split[1], $mnu) ; Dateinamen als MenüItem erstellen
    GUICtrlSetOnEvent(-1, '_itemClick')
    $aItemID[$i][1] = $i ; Zuweisung Arrayposition zur Ctrl-ID
    Next
    EndIf

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

    While True
    Sleep(100)
    WEnd

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

    Func _ende()
    Exit
    EndFunc

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

    Func _btnClick()
    Local $split
    $path = FileOpenDialog('Bitte Datei auswählen', @ScriptDir, "Textdateien (*.txt;*.log;*.bat;*.ini)", 3)
    If @error Then Return MsgBox(262192, 'Achtung', 'Keine Datei gewählt')
    _RecentFiles($INIPath, $aRecentFiles, $path, $currCountFiles, $maxFiles, 0) ; aktuelle Datei an oberster Position speichern
    If $aItemID[0][0] = -1 Then ; noch kein MenüItem vorhanden
    $split = _StringSplitOnce($aRecentFiles[0][1], '\', -1) ; Dateinamen absplitten
    $aItemID[0][0] = GUICtrlCreateMenuItem($split[1], $mnu) ; Item erstellen, ID speichern
    GUICtrlSetOnEvent(-1, '_itemClick')
    $aItemID[0][1] = 0 ; Arrayposition des kpl. Pfades zuweisen
    Else ; bereits MenüItem vorhanden
    For $i = 0 To UBound($aItemID) -1 ; alle bestehenden Items löschen
    GUICtrlDelete($aItemID[$i][0])
    Next
    ReDim $aItemID[UBound($aRecentFiles)][2] ; Array für Item-ID auf neue Größe anpassen
    For $i = 0 To UBound($aItemID) -1 ; und Items erstellen, ID's speichern, Pos. zuweisen
    $split = _StringSplitOnce($aRecentFiles[$i][1], '\', -1)
    $aItemID[$i][0] = GUICtrlCreateMenuItem($split[1], $mnu)
    GUICtrlSetOnEvent(-1, '_itemClick')
    $aItemID[$i][1] = $i
    Next
    EndIf
    EndFunc

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

    Func _itemClick()
    Local $index = _ArraySearch($aItemID, @GUI_CtrlId, 0, 0, 0, 0, 1, 0) ; im ID-Array nach Position des geklickten Items suchen
    MsgBox(0, 'Geklickter Pfad', $aRecentFiles[$index][1]) ; Eintrag aus File-Liste an dieser Position verwerten
    EndFunc

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

    ;==================================================================================================
    ; Function Name: _RecentFiles(ByRef $INI, ByRef $ARRAY, $FILE, ByRef $CURRCOUNT, ByRef $MAXCOUNT [, $ASC=1])
    ; Description:: Verwalten der zuletzt genutzten Dateien in einer INI
    ; wahlweise an Pos. 0 die älteste (Standard) oder neueste Datei
    ; Parameter(s): $INI Pfad der INI-Datei
    ; $ARRAY Das 2D-Array mit den Dateien, Rückgabe von INIReadSection
    ; Falls noch nicht existent, muß die übergebene Variable auf jeden Fall
    ; ein Array sein!
    ; $FILE aktuelle Datei/Pfad, zum Hinterlegen in der INI
    ; $CURRCOUNT aktuelle Anzahl hinterlegter Dateien/Pfade
    ; $MAXCOUNT maximal zulässige Anzahl zu hinterlegender Dateien/Pfade
    ; $ASC aktuelle Datei wird an erste Stelle (Pos 0 im Array) oder an
    ; letzte Stelle (Ubound-1 im Array)-Standard geschrieben
    ; Requirement(s): INI mit Sektionen
    ; [recent_num] und Schlüsseln "maximum, aktuell"
    ; (Variablen zum Einlesen der Werte und Übergeben an die Funktion)
    ; [recent_file] (Schlüsselwort ist für alle Einträge "file")
    ; Wenn die INI mit INIReadSection eingelesen wird, löscht die Funktion Zeile 0 (Zähler)
    ; UDF _Array2DDelete()
    ; #include <Array.au3>
    ; Return Value(s): Keine
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _RecentFiles(ByRef $INI, ByRef $ARRAY, $FILE, ByRef $CURRCOUNT, ByRef $MAXCOUNT, $ASC=1)
    Local $index
    If UBound($ARRAY, 2) Then
    If IsNumber($ARRAY[0][0]) Then _Array2DDelete($ARRAY, 0)
    EndIf
    If $ASC = 1 Then
    If UBound($ARRAY, 2) Then
    $index = _ArraySearch($ARRAY, $FILE, 0, 0, 0, 0, 1, 1)
    If $index = -1 Then
    If $CURRCOUNT = $MAXCOUNT -1 Then
    _Array2DDelete($ARRAY, 0)
    Else
    $CURRCOUNT += 1
    IniWrite($INI, 'recent_num', 'aktuell', $CURRCOUNT)
    EndIf
    Else
    _Array2DDelete($ARRAY, $index)
    EndIf
    ReDim $ARRAY[UBound($ARRAY)+1][2]
    Else
    ReDim $ARRAY[1][2]
    EndIf
    $ARRAY[UBound($ARRAY)-1][0] = 'file'
    $ARRAY[UBound($ARRAY)-1][1] = $FILE
    Else
    If UBound($ARRAY, 2) Then
    $index = _ArraySearch($ARRAY, $FILE, 0, 0, 0, 0, 1, 1)
    If $index = -1 Then
    If $CURRCOUNT < $MAXCOUNT -1 Then
    $CURRCOUNT += 1
    IniWrite($INI, 'recent_num', 'aktuell', $CURRCOUNT)
    ReDim $ARRAY[UBound($ARRAY)+1][2]
    EndIf
    Else
    _Array2DDelete($ARRAY, $index)
    ReDim $ARRAY[UBound($ARRAY)+1][2]
    EndIf
    For $i = UBound($ARRAY)-1 To 1 Step -1
    $ARRAY[$i][0] = 'file'
    $ARRAY[$i][1] = $ARRAY[$i-1][1]
    Next
    $ARRAY[0][1] = $FILE
    Else
    ReDim $ARRAY[1][2]
    $ARRAY[UBound($ARRAY)-1][0] = 'file'
    $ARRAY[UBound($ARRAY)-1][1] = $FILE
    EndIf
    EndIf
    IniWriteSection($INI, 'recent_file', $ARRAY, 0)
    EndFunc ;==>_RecentFiles

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

    Func _Array2DDelete(ByRef $ARRAY, $iDEL)
    Local $i, $k, $l
    If ( Not IsArray($ARRAY) ) Then
    SetError(1)
    Return 0
    EndIf
    If ( $iDEL < 0 ) Or ( $iDEL > UBound($ARRAY)-1 ) Then
    SetError(2)
    Return 0
    EndIf
    Local $UBound2nd = UBound($ARRAY,2)
    If @error = 2 Then
    Local $arTmp[UBound($ARRAY)-1]
    $k = 0
    For $i = 0 To UBound($ARRAY)-1
    If $i <> $iDEL Then
    $arTmp[$k] = $ARRAY[$i]
    $k += 1
    EndIf
    Next
    Else
    Local $arTmp[UBound($ARRAY)-1][$UBound2nd]
    $k = 0
    For $i = 0 To UBound($ARRAY)-1
    If $i <> $iDEL Then
    For $l = 0 To $UBound2nd-1
    $arTmp[$k][$l] = $ARRAY[$i][$l]
    Next
    $k += 1
    EndIf
    Next
    EndIf
    $ARRAY = $arTmp
    Return -1
    EndFunc ;==>_Array2DDelete

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

    Func _StringSplitOnce($STRING, $DELIM, $OCCURENCE=1)
    If $STRING = '' Then Return SetError(1)
    If $DELIM = '' Then Return SetError(2)
    Local $Out[2]
    Local $len = StringLen($STRING)
    Local $pos = StringInStr($STRING, $DELIM, 1, $OCCURENCE)
    If @error Then Return SetError(3)
    $Out[0] = StringLeft($STRING, $pos-1)
    $Out[1] = StringRight($STRING, $len-$pos)
    Return $Out
    EndFunc ;==>_StringSplitOnce

    [/autoit]

    Dateien

    _RecentFiles.au3 4,03 kB – 507 Downloads

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™