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

Beiträge von nuts

  • Mausklick auf einer stelle simulieren

    • nuts
    • 31. August 2009 um 17:17

    Hier z.B. http://www.autoit.de/dokumentation_…/MouseClick.htm oder auch in Hilfe ...

    Was hast du denn genau vor? Y, X kannst du mit dem Autoit Info tool herausfinden, sollten sich die Koordinaten ändern ist vielleicht ein anderer Weg sinnvoller.

  • Variablen zwischen 2 Scripten

    • nuts
    • 31. August 2009 um 16:03
    Spoiler anzeigen
    [autoit]


    #Include <Array.au3>
    #Include <GUIConstantsEx.au3>

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

    Opt('WinTitleMatchMode', 3)

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

    global const $TITLE_RECEIVER = 'DVBViewerSleepTimerReceiver'
    global const $WM_COPYDATA = 0x004A
    Global $NewDataAvailable = False, $avData[1]

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

    if WinExists($TITLE_RECEIVER) then
    ; Kommandozeile an schon laufendes Skript weitergeben
    If $CMDLINE[0] = 0 Then Exit
    _SendData(WinGetHandle($TITLE_RECEIVER),$CMDLINERAW)
    Exit
    else
    ; Empfänger mit normalem Skript starten
    _Receiver()
    Exit
    endif

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

    func _Receiver()
    GUICreate($TITLE_RECEIVER)
    GUIRegisterMsg($WM_COPYDATA, '_WM_COPYDATA')

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

    while 1
    Sleep(10)
    if $NewDataAvailable then
    $NewDataAvailable = False
    $sMsg = $avData[1]
    _ArrayDelete($avData,1)
    $aMsg = _ParseCMDLine($sMsg)
    For $i = 0 To UBound($aMsg)-1
    Switch $aMsg[$i][1]
    Case "dauer"
    MsgBox(0, '', "Dauer anzeigen")
    Case "stop"
    MsgBox(0, '', "beenden")
    Exit
    EndSwitch
    Next
    endif
    wend

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

    GUIDelete()
    endfunc; _Receiver

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

    ;===============================================================================
    ;
    ; Function Name: _ParseCMDLine($CMDString)
    ; Description:: Parses a CMD-String to Parameters with Values
    ; Parameter(s): $CMDString -> String to parse
    ; Requirement(s): ?
    ; Return Value(s): Error: 0 and @error = StringRegExp-Error
    ; Success: 2 Dimensional Array:
    ; $array[$i][0] : Parameter including value
    ; $array[$i][1] : Parameter
    ; $array[$i][2] : Value with quotation marks (only if value has quotaion marks)
    ; $array[$i][3] : Value without quotation marks
    ; Author(s): Prog@ndy
    ;
    ; Basis: http://regexlib.com/REDetails.aspx?regexp_id=1220
    ;===============================================================================
    ;
    Func _ParseCMDLine($CMDString)
    Local $y, $j, $i, $entry
    Local $x = StringRegExp($CMDString,'(?:\s*)(?<=[-|/])(?<name>[^\s-|/:|=]*)(?:(?:[:|=](?:("(?<value1>.*?)(?<!\\)")|(?<value>\S*)))|\w*?)',4)
    If @error Then Return SetError(@error,0,0)
    Local $ResultArray[UBound($x)][4]
    For $i = 0 To UBound($x)-1
    $entry = $x[$i]
    For $y = 0 To UBound($entry)-1
    $j = $y
    If $y > 3 Then $j = 3
    $ResultArray[$i][$j] = $entry[$y]
    Next
    Next
    Return $ResultArray
    EndFunc
    func _SendData($hWnd, $sData)

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

    local $tCOPYDATA, $tMsg

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

    $tMsg = DllStructCreate('wchar[' & StringLen($sData) + 1 & ']')
    DllStructSetData($tMsg, 1, $sData)
    $tCOPYDATA = DllStructCreate('dword;dword;ptr')
    DllStructSetData($tCOPYDATA, 2, DllStructGetSize($tMsg))
    DllStructSetData($tCOPYDATA, 3, DllStructGetPtr($tMsg))
    $Ret = DllCall('user32.dll', 'lparam', 'SendMessageW', 'hwnd', $hWnd, 'int', $WM_COPYDATA, 'wparam', 0, 'lparam', DllStructGetPtr($tCOPYDATA))
    if (@error) or ($Ret[0] = -1) then
    return 0
    endif
    return 1
    endfunc; _SendData

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

    func _WM_COPYDATA($hWnd, $msgID, $wParam, $lParam)

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

    local $tCOPYDATA = DllStructCreate('dword;dword;ptr', $lParam)
    local $tMsg = DllStructCreate('wchar[' & DllStructGetData($tCOPYDATA, 2)/2 & ']', DllStructGetData($tCOPYDATA, 3))

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

    _ArrayAdd($avData, DllStructGetData($tMsg, 1))
    $NewDataAvailable = True

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

    return 0
    endfunc; _WM_COPYDATA

    [/autoit]

    So können Skripte per cmdline "kommunizieren".

  • random+gui

    • nuts
    • 31. August 2009 um 13:43

    Hast du dir die Hilfe zu Random angesehen? Du kannst keinen String verwenden.

    Mal ein Lösungsvorschlag: Alle Pfade in ein 1D-Array laden und per Random den Index bestimmen.

    edit \ so ca.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>

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

    dim $apic[3]
    $apic[0]=@ScriptDir & "\AAl.bmp"
    $apic[1]=@ScriptDir & "\bachforelle.bmp"
    $apic[2]=@ScriptDir & "\barbe.bmp"
    _ArrayDisplay($apic)

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

    GUICreate("Meine Fische Mit Bild,Rechtschreibung Gross Und Klein Egal",1000,700)

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

    $a= Random(0,ubound($apic), 1)
    MsgBox(1, "", $apic[$a])
    GUISetBkColor (0x90BBCC)
    GUICtrlCreateLabel("Wie Heißen Diese Fische",430,0,150,30)
    $1=GUICtrlCreateInput("",10,30,100,30)

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

    $2=GUICtrlCreateButton("O.K",110,30,30,30)
    GUICtrlCreatePic($apic[$a],10,60, 300,200)
    $3=GUICtrlCreateInput("",350,30,100,30)
    $4=GUICtrlCreateButton("O.K",450,30,30,30)
    GUICtrlCreatePic("D:\Fisch-Bitmap\bachforelle.bmp",350,60, 300,200)

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

    $5=GUICtrlCreateInput("",690,30,100,30)
    $6=GUICtrlCreateButton("O.K",790,30,30,30)
    GUICtrlCreatePic("D:\Fisch-Bitmap\barbe.bmp",690,60, 300,200)
    GUISetState ()
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • Texteld(er) und evtl. andere Elemente auf Änderungen überwachen

    • nuts
    • 28. August 2009 um 14:22

    Eine Varinate mti $WM_Command.

    Übernehmen graut den Cancel Buttons aus und Speichert den "Text" vom Input MSN_1.
    Eine Veränderung in MSN_1 aktiviert den Cancel Button wieder.
    Ist nur ein Beispiel, wenns Fragen beim Umbau gibt kannste dich ja nochmal melden.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <String.au3>
    #include <WindowsConstants.au3>
    ;Passwort-Zeichen definieren
    $ES_PASSWORD = 0x0020

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

    Global $text

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

    $Form1_1 = GUICreate("MoonyDialer Konfiguration", 484, 426, 323, 147)
    $Group1 = GUICtrlCreateGroup("Fritzbox-Einstellungen", 16, 8, 449, 401)
    $save = GUICtrlCreateButton("Speichern", 368, 40, 75, 25, 0)
    $apply = GUICtrlCreateButton("Übernehmen", 368, 72, 75, 25, 0)
    $cancel = GUICtrlCreateButton("Abbrechen", 368, 120, 75, 25, 0)
    $Group2 = GUICtrlCreateGroup("Standard MSN und Port", 32, 32, 305, 89)
    $MSN_1 = GUICtrlCreateInput("", 88, 64, 89, 21)
    $Label_MSN_1 = GUICtrlCreateLabel("MSN 1", 48, 64, 37, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT)
    $Label_Port_1 = GUICtrlCreateLabel("Zug. Portnr.", 197, 63, 60, 17)
    $Port_1 = GUICtrlCreateInput("", 261, 63, 65, 21)
    $Label1 = GUICtrlCreateLabel("... werden verwendet, falls keine Zuordnung möglich ist", 53, 95, 264, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group3 = GUICtrlCreateGroup("Weitere MSNs und Ports", 32, 136, 305, 137)
    $MSN_2 = GUICtrlCreateInput("", 85, 167, 89, 21)
    $Port_2 = GUICtrlCreateInput("", 261, 167, 65, 21)
    $MSN_3 = GUICtrlCreateInput("", 85, 199, 89, 21)
    $Port_3 = GUICtrlCreateInput("", 261, 199, 65, 21)
    $MSN_4 = GUICtrlCreateInput("", 85, 231, 89, 21)
    $Port_4 = GUICtrlCreateInput("", 261, 231, 65, 21)
    $Label_Port_4 = GUICtrlCreateLabel("Zug. Portnr.", 197, 231, 60, 17)
    $Label_Port_3 = GUICtrlCreateLabel("Zug. Portnr.", 197, 199, 60, 17)
    $Label_Port_2 = GUICtrlCreateLabel("Zug. Portnr.", 197, 167, 60, 17)
    $Label_MSN_2 = GUICtrlCreateLabel("MSN 2", 45, 167, 37, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT)
    $Label_MSN_3 = GUICtrlCreateLabel("MSN 3", 45, 199, 37, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT)
    $Label_MSN_4 = GUICtrlCreateLabel("MSN 4", 45, 231, 37, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group4 = GUICtrlCreateGroup("Passwort und IP-Adresse", 32, 288, 305, 105)
    $Passwort = GUICtrlCreateInput("", 109, 319, 217, 21, $ES_PASSWORD)
    $IP = GUICtrlCreateInput("", 109, 351, 217, 21)
    $Label_IP_Adresse = GUICtrlCreateLabel("IP-Adresse", 45, 351, 55, 17)
    $Label_Passwort = GUICtrlCreateLabel("Passwort", 45, 319, 47, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Label_Hilfe = GUICtrlCreateLabel("Hilfe", 408, 368, 31, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)

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

    ;INI-Datei auslesen
    $MSN_Port_Settings = IniReadSection("moony_dialer_settings.ini", "MSN_Port_Settings")
    $FritzBox_Settings = IniReadSection("moony_dialer_settings.ini", "FritzBox_Settings")
    If @error Then
    MsgBox(4096, "", "Fehler! Die ini-Datei ist nicht vorhanden oder fehlerhaft und wird neu erstellt.")

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

    ;Alte ini löschen
    FileRecycle("moony_dialer_settings.ini")

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

    ;Neue ini erzeugen
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "MSN_1", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "Port_1", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "MSN_2", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "Port_2", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "MSN_3", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "Port_3", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "MSN_4", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "Port_4", "")
    IniWrite("moony_dialer_settings.ini", "FritzBox_Settings", "Passwort", "")
    IniWrite("moony_dialer_settings.ini", "FritzBox_Settings", "IP_Adresse", "")
    ;...und wieder einlesen
    $MSN_Port_Settings = IniReadSection("moony_dialer_settings.ini", "MSN_Port_Settings")
    $FritzBox_Settings = IniReadSection("moony_dialer_settings.ini", "FritzBox_Settings")
    EndIf
    ;Werte in die Felder eintragen
    GUICtrlSetData($MSN_1, $MSN_Port_Settings[1][1])
    GUICtrlSetData($Port_1, $MSN_Port_Settings[2][1])
    GUICtrlSetData($MSN_2, $MSN_Port_Settings[3][1])
    GUICtrlSetData($Port_2, $MSN_Port_Settings[4][1])
    GUICtrlSetData($MSN_3, $MSN_Port_Settings[5][1])
    GUICtrlSetData($Port_3, $MSN_Port_Settings[6][1])
    GUICtrlSetData($MSN_4, $MSN_Port_Settings[7][1])
    GUICtrlSetData($Port_4, $MSN_Port_Settings[8][1])
    GUICtrlSetData($Passwort, _StringEncrypt(0, $FritzBox_Settings[1][1], "ETWAS INDIVIDUELLES", 2))
    GUICtrlSetData($IP, $FritzBox_Settings[2][1])
    ;Die Funktionen _collect_data und _save_to_ini werden sowohl beim Speichern als auch beim Übernehmen verwendet, daher als Funktion
    Func _collectData()
    $MSN_Port_Settings[1][1] = GUICtrlRead($MSN_1)
    $MSN_Port_Settings[2][1] = GUICtrlRead($Port_1)
    $MSN_Port_Settings[3][1] = GUICtrlRead($MSN_2)
    $MSN_Port_Settings[4][1] = GUICtrlRead($Port_2)
    $MSN_Port_Settings[5][1] = GUICtrlRead($MSN_3)
    $MSN_Port_Settings[6][1] = GUICtrlRead($Port_3)
    $MSN_Port_Settings[7][1] = GUICtrlRead($MSN_4)
    $MSN_Port_Settings[8][1] = GUICtrlRead($Port_4)

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

    $FritzBox_Settings[1][1] = _StringEncrypt(1, GUICtrlRead($Passwort), "ETWAS INDIVIDUELLES", 2)
    $FritzBox_Settings[2][1] = GUICtrlRead($IP)
    EndFunc ;==>_collectData

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

    Func _save_to_ini()
    IniWriteSection("moony_dialer_settings.ini", "MSN_Port_Settings", $MSN_Port_Settings)
    IniWriteSection("moony_dialer_settings.ini", "FritzBox_Settings", $FritzBox_Settings)
    EndFunc ;==>_save_to_ini

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    ;Meldungen der GUI abfangen
    While 1
    $nMsg = GUIGetMsg(1)
    ;... und auswerten:
    Select

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

    ; SAVE: Daten speichern und Fenster schließen
    Case $nMsg[0] = $save
    _collectData() ;Daten aus GUI auslesen
    _save_to_ini() ;Daten wieder in die .ini-Datei schreiben
    ExitLoop

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

    ; APPLY: Daten speichern, sonst nichts
    Case $nMsg[0] = $apply ;der Übernehmen button -> Cancle Button wird ausgegraut und Änderungen im ersten Input (MSN_1) aufgezeichnet
    GUICtrlSetState($cancel, @SW_DISABLE)
    $text = GUICtrlRead($MSN_1)
    ;_collectData() ;Daten aus GUI auslesen
    ;M_save_to_ini() ;Daten wieder in die .ini-Datei schreiben
    GUICtrlSetState($cancel, $GUI_DISABLE) ;Cancel-Button disablen

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

    ; CANCEL: Fenster schließen ohne zu speichern
    Case $nMsg[0] = $cancel
    ExitLoop

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

    ; Im Hilfefall...
    Case $nMsg[0] = $Label_Hilfe
    Run("hh.exe moony_dialer_help.chm", "")

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

    ;Bei Veränderungen in den Textfeldern den Cancel-Button wieder enabeln
    Case $nMsg[0] = $MSN_1 Or $nMsg[0] = $MSN_2 Or $nMsg[0] = $MSN_3 Or $nMsg[0] = $MSN_4 Or $nMsg[0] = $Port_1 Or $nMsg[0] = $Port_2 Or $nMsg[0] = $Port_3 Or $nMsg[0] = $Port_4
    GUICtrlSetState($cancel, $GUI_ENABLE)

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

    ; CLOSE-BUTTON: Rotes Kreuz schließt Fenster ohne zu speichern
    Case $nMsg[0] = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect
    WEnd

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    _Check_Eingabe($iwParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($MSN_1) Then $hWndListBox = GUICtrlGetHandle($MSN_1)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word

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

    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

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

    Func _Check_Eingabe($iwParam)
    Switch $iwParam
    Case 0x03000008
    If $text <> GUICtrlRead($MSN_1) and $text <> "" Then
    GUICtrlSetState($cancel, @SW_ENABLE)
    MsgBox(1, "", "MSN_1 geändert")
    $text = "" ; Speichervaribale zurücksetzen
    EndIf
    EndSwitch

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

    EndFunc ;==>_Check_Eingabe

    [/autoit]
  • Texteld(er) und evtl. andere Elemente auf Änderungen überwachen

    • nuts
    • 28. August 2009 um 13:55

    Verstehe ich nicht ganz, im Beispiel wird doch auf jede Änderung im Textfeld reagiert?

    Hast du mal ein lauffähiges Skript? Dann bastel ichs rein, sonst ists schwer vorstellbar was du eigentlich haben willst.

  • Texteld(er) und evtl. andere Elemente auf Änderungen überwachen

    • nuts
    • 28. August 2009 um 13:12

    Alternativ könnte man auch über WM_Command abfragen ob sich beim Input was verändert.

    Bsp.

    Spoiler anzeigen
    [autoit]


    #include <GuiListBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>

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

    Local $Ordner = 'C:\Programme'
    Local $TempFile = _TempFile()
    Global $aOrdner
    HotKeySet("{ENTER}", "_Open_Ordner")

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

    RunWait(@ComSpec & " /c " & 'dir "'&$Ordner&'" /ad /b > "'&$TempFile&'"', "", @SW_HIDE)
    _FileReadToArray($TempFile, $aOrdner)
    FileDelete($TempFile)

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

    Opt('GUIOnEventMode', 1)

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

    $gui = GUICreate('Schnelle Ordnerauswahl by funkey', 400, 600, -1, -1)
    GUISetOnEvent(-3, '_Ende')
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    Global $Input = GUICtrlCreateInput('', 10, 10, 380, 20)
    Global $List = GUICtrlCreateList('', 10, 40, 380, 560)
    Global $hList = GUICtrlGetHandle(-1)

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

    For $i = 1 To $aOrdner[0]
    GUICtrlSetData(-1, $aOrdner[$i])
    Next

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

    GUISetState()

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

    While 1
    Sleep(100000)
    WEnd

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

    Func _Check_Eingabe($iwParam)
    switch $iwParam
    case 0x03000003
    _GUICtrlListBox_SetCurSel($hList, _GUICtrlListBox_FindString($hList, GUICtrlRead($Input)))
    EndSwitch
    EndFunc

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

    Func _Open_Ordner()
    If GUICtrlRead($List) <> "" Then ShellExecute($Ordner & '\' & GUICtrlRead($List))
    EndFunc

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

    Func _Ende()
    Exit
    EndFunc

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    _Check_Eingabe($iwParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($List) Then $hWndListBox = GUICtrlGetHandle($List)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $List, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK
    _Open_Ordner()
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND (Bugfix - http://www.autoit.de)

    [/autoit]
  • Listview - Reagiert nicht auf die Enter-Taste

    • nuts
    • 22. August 2009 um 12:39
    Zitat von Andy

    was heisst "scheinbar"^^


    Naja wenn man sich ansieht was WM_Command so liefert ?(

    Wie auch immer hauptsache es funktioniert ;)

  • Listview - Reagiert nicht auf die Enter-Taste

    • nuts
    • 21. August 2009 um 18:09

    Hehe kein Problem, der WM_Command führt scheinbar ja auch zum Ziel.

    Allerdings scheint (lt. google) das Abfangen der Enter-Taste kein Autoit spezifisches Problem zu sein.
    Irgendwo ist da noch ein Verständnisproblem zur Umsetzung und sowas ist nie gut ;)

  • Listview - Reagiert nicht auf die Enter-Taste

    • nuts
    • 21. August 2009 um 15:00

    Irgendwie ziemlich kompliziert. ?(

    Hab hier mal ein workaround:

    Spoiler anzeigen
    [autoit]


    ;#BETA
    #include <GuiImageList.au3>
    #include <GUIListView.au3>

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

    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <EditConstants.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>

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

    Global Const $tagSHFILEINFO = "dword hIcon; int iIcon; DWORD dwAttributes; CHAR szDisplayName[255]; CHAR szTypeName[80];"
    Global Const $SHGFI_USEFILEATTRIBUTES = 0x10
    Global Const $SHGFI_SYSICONINDEX = 0x4000
    Global Const $FILE_ATTRIBUTE_NORMAL = 0x80
    Global Const $SHGFI_SMALLICON = 0x1
    Global Const $SHGFI_LARGEICON = 0x0

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

    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=D:\Dokumente\Dateien von Andreas\AutoIt3\FTP\GUI_MAIN.kxf
    Global $GUI_MAIN = GUICreate("Au3FTP", 882, 586, 193, 125)
    GUISetOnEvent(-3, "GUI_Close")

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

    Global $inpLocalDirectory = GUICtrlCreateInput("", 8, 28, 369, 20);, $ES_READONLY)
    Global $ListView1 = GUICtrlCreateListView("Name|Datum|Größe", 8, 48, 369, 489)
    Global $button = GUICtrlCreateButton("Name|Datum|Größe", 100, 550)
    Global $SHELLLISTVIEWHANDLE = GUICtrlGetHandle($ListView1) ; Get the Handle

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

    GUIRegisterMsg($WM_COMMAND, "WM_Command")

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

    GUISetState()

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

    while 1
    Sleep(100)
    wend

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

    Func GUI_Close()
    Exit
    endfunc

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($ListView1) Then $hWndListBox = GUICtrlGetHandle($ListView1)
    $hWndFrom = _WinAPI_GetFocus() ;zum bestimmen welches Control den Fokus hat, $ilParam liefert nichts vernünftiges
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $hWndListBox
    Switch $iCode
    Case 0 ; $icode für Enter?
    MsgBox(1, "", "WM_Command")
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit]
  • Listview - Reagiert nicht auf die Enter-Taste

    • nuts
    • 21. August 2009 um 13:21

    Hey,

    ich bastle gerade eine Winamp Oberfläche, die mit der Fernbedienung bedient werden kann.

    Das Bedienkonzept wollte ich es ganz einfach halten:
    Pfeilstasten hoch/runter um die Items im Listview durchzugehen (Verzeichnisse bzw. Dateien);
    rechte Pfeiltaste -> in einen Unterordner gehen oder die Datei zur Playliste hinzufügen;
    linke Pfeiltaste -> wieder raus aus dem Unterordner bzw. ins übergeordnete Verzeichnis wechseln;
    Enter -> Den ganzen Unterordner zu Playliste hinzufügen / die ausgewählte Datei zur Playliste hinzufügen

    Für den Browser habe ich ein Beispiel von Progandy genommen (Achtung da hab ich schon drin rumgeschmiert, wer das Orginal haben will muss mal die Suchfunktion bemühen):

    Spoiler anzeigen
    [autoit]


    ;#BETA
    #include <GuiImageList.au3>
    #include <GUIListView.au3>

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

    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <EditConstants.au3>
    #include <WindowsConstants.au3>

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

    Global Const $tagSHFILEINFO = "dword hIcon; int iIcon; DWORD dwAttributes; CHAR szDisplayName[255]; CHAR szTypeName[80];"
    Global Const $SHGFI_USEFILEATTRIBUTES = 0x10
    Global Const $SHGFI_SYSICONINDEX = 0x4000
    Global Const $FILE_ATTRIBUTE_NORMAL = 0x80
    Global Const $SHGFI_SMALLICON = 0x1
    Global Const $SHGFI_LARGEICON = 0x0

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

    Global Const $FOLDERUP_ICON_INDEX = _GUIImageList_AddIcon(_GUIImageList_GetSystemImageList(), @SystemDir & "\shell32.dll", 132)
    Global Const $FOLDER_ICON_INDEX = _GUIImageList_GetFileIconIndex(@SystemDir, 0, 1)
    Global Const $NOICON_ICON_INDEX = _GUIImageList_GetFileIconIndex("nb lgl", 0, 0)
    Global $path = "C:\Programme"

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

    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=D:\Dokumente\Dateien von Andreas\AutoIt3\FTP\GUI_MAIN.kxf
    Global $GUI_MAIN = GUICreate("Au3FTP", 882, 586, 193, 125)
    GUISetOnEvent(-3, "GUI_Close")

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

    Global $inpLocalDirectory = GUICtrlCreateInput("", 8, 28, 369, 20, $ES_READONLY)
    Global $ListView1 = GUICtrlCreateListView("Name|Datum|Größe", 8, 48, 369, 489)

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

    Global $SHELLLISTVIEWHANDLE = GUICtrlGetHandle($ListView1) ; Get the Handle

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

    GUICtrlSendMsg($ListView1, 0x101E, 0, 200)
    GUICtrlSendMsg($ListView1, 0x101E, 1, 75)
    GUICtrlSendMsg($ListView1, 0x101E, 2, 50)
    GUIRegisterMsg($WM_NOTIFY, "_SHLV_WM_NOTIFY")

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

    _GUICtrlListView_SetImageList($ListView1, _GUIImageList_GetSystemImageList(), 1)
    Global $DIRECTORY_LOCAL = "" ; Start with Selection of drives (IMG:http://www.autoitscript.com/forum/style_em…utoit/smile.gif)
    _SHLV_PopulateLocalListView($SHELLLISTVIEWHANDLE, $DIRECTORY_LOCAL)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(100)
    WEnd

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

    Func GUI_Close()
    Exit
    EndFunc ;==>GUI_Close

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

    ; Prog@ndy
    Func _SHLV_PopulateLocalListView($hListView1, ByRef $DIRECTORY_LOCAL)
    If Not IsHWnd($hListView1) Then $hListView1 = GUICtrlGetHandle($hListView1)
    If $DIRECTORY_LOCAL = "" Then
    Local $drives = DriveGetDrive("ALL")
    GUICtrlSetData($inpLocalDirectory, "Pfad Auswahl")
    _GUICtrlListView_BeginUpdate($hListView1)
    _GUICtrlListView_DeleteAllItems($hListView1)
    _GUICtrlListView_AddItem($hListView1, $path);, _GUIImageList_GetFileIconIndex($drives[$i] & "\"))
    _GUICtrlListView_EndUpdate($hListView1)
    Return
    EndIf
    If StringRight($DIRECTORY_LOCAL, 1) <> "\" Then $DIRECTORY_LOCAL &= "\"
    If DriveStatus(StringLeft($DIRECTORY_LOCAL, 3)) <> "READY" Then Return 0 * MsgBox(16 + 8192, 'Error on Drive Access', "Drive " & StringLeft($DIRECTORY_LOCAL, 3) & " not ready!")
    GUICtrlSetData($inpLocalDirectory, $DIRECTORY_LOCAL)
    $files = _SHLV__FileListToArray2($DIRECTORY_LOCAL, "*.*", 2)
    _GUICtrlListView_BeginUpdate($hListView1)
    _GUICtrlListView_DeleteAllItems($hListView1)
    Local $foldercount = 0
    _GUICtrlListView_AddItem($hListView1, "< .. >", $FOLDERUP_ICON_INDEX)
    If IsArray($files) Then
    _GUICtrlListView_SetItemCount($hListView1, $files[0] + 1)
    $foldercount = $files[0] + 1
    For $i = 1 To $files[0]
    $item = _GUICtrlListView_AddItem($hListView1, $files[$i], $FOLDER_ICON_INDEX)
    _GUICtrlListView_AddSubItem($hListView1, $item, __SHLV_FormatFilesize(DirGetSize($DIRECTORY_LOCAL & $files[$i], 2)), 2)
    Next
    EndIf
    $files = _SHLV__FileListToArray2($DIRECTORY_LOCAL, "*.*", 1)
    _GUICtrlListView_EndUpdate($hListView1)
    _GUICtrlListView_BeginUpdate($hListView1)
    If IsArray($files) Then
    _GUICtrlListView_SetItemCount($hListView1, $files[0] + $foldercount)
    For $i = 1 To $files[0]
    $item = _GUICtrlListView_AddItem($hListView1, $files[$i], _GUIImageList_GetFileIconIndex($files[$i]))
    _GUICtrlListView_AddSubItem($hListView1, $item, __SHLV_FileDateString2Calc(FileGetTime($DIRECTORY_LOCAL & $files[$i], 0, 1)), 1)
    _GUICtrlListView_AddSubItem($hListView1, $item, __SHLV_FormatFilesize(FileGetSize($DIRECTORY_LOCAL & $files[$i])), 2)
    Next
    EndIf
    _GUICtrlListView_EndUpdate($hListView1)
    EndFunc ;==>_SHLV_PopulateLocalListView

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

    ; Prog@ndy
    Func __SHLV_FormatFilesize($size)
    Select
    Case $size > 1000
    Return Round($size / 1024, 1) & " KB"
    Case $size > 1048500
    Return Round($size / 1048576, 1) & " MB"
    Case Else
    Return $size & " Byte"
    EndSelect
    EndFunc ;==>__SHLV_FormatFilesize

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

    ; Prog@ndy
    Func _GUIImageList_GetSystemImageList($bLargeIcons = False)
    Local $dwFlags, $hIml, $FileInfo = DllStructCreate($tagSHFILEINFO)

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

    $dwFlags = BitOR($SHGFI_USEFILEATTRIBUTES, $SHGFI_SYSICONINDEX)
    If Not ($bLargeIcons) Then
    $dwFlags = BitOR($dwFlags, $SHGFI_SMALLICON)
    EndIf

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

    ;~ '// Load the image list - use an arbitrary file extension for the
    ;~ '// call to SHGetFileInfo (we don't want to touch the disk, so use
    ;~ '// FILE_ATTRIBUTE_NORMAL && SHGFI_USEFILEATTRIBUTES).
    $hIml = _WinAPI_SHGetFileInfo(".txt", $FILE_ATTRIBUTE_NORMAL, _
    DllStructGetPtr($FileInfo), DllStructGetSize($FileInfo), $dwFlags)

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

    Return $hIml
    EndFunc ;==>_GUIImageList_GetSystemImageList

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

    ; Prog@ndy
    Func _WinAPI_SHGetFileInfo($pszPath, $dwFileAttributes, $psfi, $cbFileInfo, $uFlags)
    Local $return = DllCall("shell32.dll", "DWORD*", "SHGetFileInfo", "str", $pszPath, "DWORD", $dwFileAttributes, "ptr", $psfi, "UINT", $cbFileInfo, "UINT", $uFlags)
    If @error Then Return SetError(@error, 0, 0)
    Return $return[0]
    EndFunc ;==>_WinAPI_SHGetFileInfo

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

    ; Prog@ndy
    Func _GUIImageList_GetFileIconIndex($sFileSpec, $bLargeIcons = False, $bForceLoadFromDisk = False)
    Local $dwFlags, $FileInfo = DllStructCreate($tagSHFILEINFO)

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

    $dwFlags = $SHGFI_SYSICONINDEX
    If $bLargeIcons Then
    $dwFlags = BitOR($dwFlags, $SHGFI_LARGEICON)
    Else
    $dwFlags = BitOR($dwFlags, $SHGFI_SMALLICON)
    EndIf
    ;~ ' We choose whether to access the disk or not. If you don't
    ;~ ' hit the disk, you may get the wrong icon if the icon is
    ;~ ' not cached. But the speed is very good!
    If Not $bForceLoadFromDisk Then
    $dwFlags = BitOR($dwFlags, $SHGFI_USEFILEATTRIBUTES)
    EndIf

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

    ;~ ' sFileSpec can be any file. You can specify a
    ;~ ' file that does not exist and still get the
    ;~ ' icon, for example sFileSpec = "C:\PANTS.DOC"
    Local $lR = _WinAPI_SHGetFileInfo( _
    $sFileSpec, $FILE_ATTRIBUTE_NORMAL, DllStructGetPtr($FileInfo), DllStructGetSize($FileInfo), _
    $dwFlags _
    )

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

    If ($lR = 0) Then
    Return SetError(1, 0, -1)
    Else
    Return DllStructGetData($FileInfo, "iIcon")
    EndIf
    EndFunc ;==>_GUIImageList_GetFileIconIndex

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

    ; Author(s): Prog@ndy
    Func __SHLV_FileDateString2Calc($filedate)
    Return StringRegExpReplace($filedate, "(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})", "$1/$2/$3 $4:$5:$6")
    EndFunc ;==>__SHLV_FileDateString2Calc
    ; Author(s): Prog@ndy
    Func __SHLV_CalcDate2FileDateString($calcdate)
    Return StringRegExpReplace($calcdate, "(\d{4})/(\d{2})/(\d{2}) (\d{2})(IMG:http://www.autoitscript.com/forum/style_em…/autoit/sad.gif) \d{2})(IMG:http://www.autoitscript.com/forum/style_em…/autoit/sad.gif) \d{2})", "$1$2$3$4$5$6")
    EndFunc ;==>__SHLV_CalcDate2FileDateString

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

    ; Prog@ndy
    Func _SHLV_WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo, $hListView1 = $SHELLLISTVIEWHANDLE

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hListView1
    ;MsgBox(1, "", $iCode)
    Switch $iCode
    Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
    Local $ItemText = _GUICtrlListView_GetItemText($hListView1, _GUICtrlListView_GetSelectedIndices($hListView1), 0)
    _Browse($ItemText)

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

    Case $LVN_KEYDOWN
    Local $tagLVKEYDOWN = $tagNMHDR & "; USHORT wVKey; UINT flags;"
    $tNMHDR = DllStructCreate($tagLVKEYDOWN, $ilParam)
    ;MsgBox(1, "", DllStructGetData($tNMHDR, "wVKey"))
    Switch DllStructGetData($tNMHDR, "wVKey")
    Case 0x27; rechte Pfeiltaste
    Local $ItemText = _GUICtrlListView_GetItemText($hListView1, _GUICtrlListView_GetSelectedIndices($hListView1), 0)

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

    _Browse($ItemText)
    Case 0x25 ;linke Pfeiltaste
    _Browseback()
    EndSwitch
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_SHLV_WM_NOTIFY

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

    Func _Browseback()
    If $DIRECTORY_LOCAL = $path & "\" then $DIRECTORY_LOCAL = ""
    Local $slash = StringInStr($DIRECTORY_LOCAL, "\", 1, -2)
    If $slash Then
    $DIRECTORY_LOCAL = StringLeft($DIRECTORY_LOCAL, $slash)
    ;ElseIf StringRegExp($DIRECTORY_LOCAL, "\A[A-Za-z]:\\\Z") Then
    ; MsgBox(1, "", StringRegExp($DIRECTORY_LOCAL, "\A[A-Za-z]:\\\Z"))
    ; $DIRECTORY_LOCAL = ""
    EndIf
    _SHLV_PopulateLocalListView($ListView1, $DIRECTORY_LOCAL)
    ;No return value

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

    EndFunc ;==>_Browseback

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

    Func _Browse($data)
    If StringInStr(FileGetAttrib($DIRECTORY_LOCAL & $data), "D") Then
    $DIRECTORY_LOCAL &= $data
    _SHLV_PopulateLocalListView($ListView1, $DIRECTORY_LOCAL)
    ElseIf StringRegExp($data, "\A[A-Za-z]:\\\Z") Then
    $DIRECTORY_LOCAL = $data
    _SHLV_PopulateLocalListView($ListView1, $DIRECTORY_LOCAL)

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

    ElseIf $data = "< .. >" Then
    #cs
    Local $slash = StringInStr($DIRECTORY_LOCAL, "\", 1, -2)
    If $slash Then
    $DIRECTORY_LOCAL = StringLeft($DIRECTORY_LOCAL, $slash)
    ElseIf StringRegExp($DIRECTORY_LOCAL, "\A[A-Za-z]:\\\Z") Then
    $DIRECTORY_LOCAL = ""
    EndIf
    _SHLV_PopulateLocalListView($ListView1, $DIRECTORY_LOCAL)
    #ce
    Else
    If MsgBox(36, "ShellListView", "Soll diese Datei geöffnet werden? " & @CRLF & $DIRECTORY_LOCAL & $data) = 6 Then
    ShellExecute($DIRECTORY_LOCAL & $data, "", $DIRECTORY_LOCAL)
    EndIf
    EndIf
    EndFunc ;==>_Browse

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

    ; Author ........: SolidSnake <MetalGX91 at GMail dot com>
    ; Modified by Prog@ndy
    Func _SHLV__FileListToArray2($sPath, $sFilter = "*", $iFlag = 0)
    Local $hSearch, $sFile, $asFileList
    If Not FileExists($sPath) Then Return SetError(1, 1, "")
    If (StringInStr($sFilter, "\")) Or (StringInStr($sFilter, "/")) Or (StringInStr($sFilter, ":")) Or (StringInStr($sFilter, ">")) Or (StringInStr($sFilter, "<")) Or (StringInStr($sFilter, "|")) Or (StringStripWS($sFilter, 8) = "") Then Return SetError(2, 2, "")
    If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
    If (StringMid($sPath, StringLen($sPath), 1) = "\") Then $sPath = StringTrimRight($sPath, 1) ; needed for Win98 for x:\ root dir
    $hSearch = FileFindFirstFile($sPath & "\" & $sFilter)
    If $hSearch = -1 Then Return SetError(4, 4, "")
    While 1
    $sFile = FileFindNextFile($hSearch)
    If @error Then
    SetError(0)
    ExitLoop
    EndIf
    If $iFlag = 1 And StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") <> 0 Then ContinueLoop
    If $iFlag = 2 And StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") = 0 Then ContinueLoop
    $asFileList &= $sFile & @CR
    WEnd
    FileClose($hSearch)
    If Not $asFileList Then
    Dim $asFileList[1] = [0]
    Return SetError(1, 0, $asFileList)
    EndIf
    Return StringSplit(StringTrimRight($asFileList, 1), @CR)
    EndFunc ;==>_SHLV__FileListToArray2

    [/autoit]

    Nun zum Problem: Das Listview reagiert nicht auf die Enter Taste :(
    Jede andere Taste scheint zu funktionieren :S
    Zeile 188 bis 205 sind die enstprechenden Zeilen, $NM_Return funktioniert im Listview auch nicht.

    Kann man diese Einschränkung irgendwie austricksen? Hotkeyset möchte ich ungern verwenden.


    Gruß nuts

    edit \
    Theoretisch müsste es doch gehen.
    http://msdn.microsoft.com/en-us/library/bb774879(VS.85).aspx

  • Schleifen

    • nuts
    • 20. August 2009 um 12:55

    Und was klappt genau nicht? Dein Ansatz?

  • _GUICtrlListView_GetItemChecked bzw. _GUICtrlListView_GetItemSelected UND GUICtrlCreateListView

    • nuts
    • 19. August 2009 um 12:55
    Spoiler anzeigen
    [autoit]


    Func _GUICtrlListView_GetCheckedItemsTextArray($hListView)
    Local $aCheckedItems = _GUICtrlListView_GetCheckedIndices($hListView)
    Local $iCheckedCount = UBound($aCheckedItems)
    If $iCheckedCount = 0 Then Return SetError(1, 0, 0)
    Local $iColCount = _GUICtrlListView_GetColumnCount($hListView)
    Local $aCheckedItemsText[$iCheckedCount][$iColCount], $aTemp
    For $i = 0 To $iCheckedCount - 1
    $aTemp = _GUICtrlListView_GetItemTextArray($hListView, $aCheckedItems[$i])
    For $j = 1 To $aTemp[0]
    $aCheckedItemsText[$i][$j-1] = $aTemp[$j]
    Next
    Next
    Return $aCheckedItemsText
    EndFunc ;==>_GUICtrlListView_GetCheckedItemTextArray

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

    Func _GUICtrlListView_GetCheckedIndices($hListView)
    Local $iCount = _GUICtrlListView_GetItemCount($hListView)
    Local $iCheckedCount = _GUICtrlListView_GetCheckedCount($hListView)
    If $iCheckedCount = 0 Then Return SetError(1, 0, 0)
    Local $aCheckedItems[$iCheckedCount]
    $iCheckedCount = 0
    For $i = 0 To $iCount - 1
    If _GUICtrlListView_GetItemChecked($hListView, $i) Then
    $aCheckedItems[$iCheckedCount] = $i
    $iCheckedCount += 1
    EndIf
    Next
    Return $aCheckedItems
    EndFunc ;==>_GUICtrlListView_GetCheckedIndices

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

    Func _GUICtrlListView_GetCheckedCount($hListView)
    Local $iCount = _GUICtrlListView_GetItemCount($hListView), $iCheckedCount = 0
    If $iCount = 0 Then Return SetError(1, 0, 0)
    For $i = 0 To $iCount - 1
    $iCheckedCount += _GUICtrlListView_GetItemChecked($hListView, $i)
    Next
    Return $iCheckedCount
    EndFunc ;==>_GUICtrlListView_GetCheckedCount

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

    Func _SetAllcheckedItems() ;Status bei angehakten Items ändern
    local $aCheckedItemsText = _GUICtrlListView_GetCheckedItemsTextArray($hListView)
    local $iCheckedCount = _GUICtrlListView_GetCheckedCount($hListView)
    local $aCheckedIndices = _GUICtrlListView_GetCheckedIndices($hListView)
    If $iCheckedCount = 0 Then Return SetError(1, 0, 0)
    For $i = 0 to $iCheckedCount -1
    if $aCheckedItemsText[$i][3] = $done then ;Beispiel aus meinem Skript
    _GUICtrlListView_SetItemText($hLVHandle,$aCheckedIndices[$i], $todo, 3)
    ElseIf $aCheckedItemsText[$i][3] = $todo then ;Beispiel aus meinem Skript
    _GUICtrlListView_SetItemText($hLVHandle,$aCheckedIndices[$i], $done, 3)
    Endif
    Next
    EndFunc

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

    Func _DeleteAllcheckedItems() ;alle angehakte Items löschen
    local $iCheckedCount = _GUICtrlListView_GetCheckedCount($hListView)
    local $aCheckedIndices = _GUICtrlListView_GetCheckedIndices($hListView)
    If $iCheckedCount = 0 Then Return SetError(1, 0, 0)
    for $i = $iCheckedCount - 1 To 0 Step -1
    _GUICtrlListView_DeleteItem($hLVHandle, $aCheckedIndices[$i])
    next
    EndFunc

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

    Func Checktoggle() ; Check / Uncheck all
    local $checked = _GUICtrlListView_GetCheckedCount($hListView)
    local $all = _GUICtrlListView_GetItemCount($hListView)
    if $checked = $all then
    _GUICtrlListView_SetItemChecked($hListView, -1, False)
    else
    _GUICtrlListView_SetItemChecked($hListView, -1, True)
    endif
    Endfunc

    [/autoit]

    Hier mal eine Funktionssammlung (ich meine Oscar hat die mal gepostet) für angehakte Items und 3 Beispiele was man damit machen kann.

  • "Run" startet externes Programm sporadisch zweimal

    • nuts
    • 17. August 2009 um 15:49

    Hehe das ist natürlich nur ein beispiel.

    Möglicherweise startet sich das Plugin selbstständig?
    Run (...) startet ein Programm auf jeden Fall nicht grundlos zweimal und dein Skript endet ja auch nach der "Run-Zeile".

  • ausführen beim hochfahren

    • nuts
    • 17. August 2009 um 15:07

    Einfach über den Windows-Autostart ausführen.

  • Gui Bild

    • nuts
    • 17. August 2009 um 15:04

    Und dann einfach mal bissle ausprobieren, davor habe ich Fileinstall auch nicht verstanden. ;)

    Gui erstellen, Bild einfügen, Fileinstall mit dem Bild usw.

  • "Run" startet externes Programm sporadisch zweimal

    • nuts
    • 17. August 2009 um 13:43

    Am "Run Befehl" liegt das nicht, möglicherweise ist die Fernbedienung etwas sensibel und führt bei einem langen Tastendruck die Befehle doppelt aus?

    Die Funktion _Singleton verhindert das doppelte Starten deines Skripts, vielleicht hilft auch etwas Feintunig der Fernbedienung?

    Alle Instanzen des Plugins kannst du so abschießen:

    [autoit]


    for $i = 1 to 3
    run("notepad.exe","", @SW_MAXIMIZE)
    next
    Sleep(2000) ;nur zum verdeutlichen
    while ProcessExists("notepad.exe")
    ProcessClose("notepad.exe")
    wend

    [/autoit]
  • Sekunden ermitteln wie bei DateDiff

    • nuts
    • 16. August 2009 um 23:45

    Falls es dringend sein sollte:

    [autoit]


    $string = "20.11.2009 09:12:34"

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

    $asearch = Stringsplit($string, " ")
    $asplit = stringsplit($asearch[1], ".")
    $return = $asplit[3] & "/" & $asplit[2] & "/" & $asplit[1] & " " & $asearch[2]

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

    MsgBox(1, "",$return)

    [/autoit]

    Das ist aber noch ziemlich optimierungsfähig. Bin leider nicht so fit in den Regexp Pattern :(

  • Array Problem

    • nuts
    • 14. August 2009 um 20:43

    Gute Frage, beim Speicherwert abfragen wäre das ja im Prinzip das gleiche wie $array[0] abfragen.
    Somit wäre es in der Tat unnötig $array[0] zum zählen zu verwenden. Eher sogar ein Nachteil, wenn man sich beispielsweise die Funktion _FileListToArray ansieht.
    Naja viel wird sichs eh nicht nehmen und irgendwie ist mir das zu schwere Kost für den schönen Freitagabend. :D

  • Array Problem

    • nuts
    • 14. August 2009 um 19:51

    Weil dann das Array nicht jedes mal durchgezählt werden muss? Wäre jetzt meine Erklärung, könnte sich bei großen Array's minimal bemerkbar machen (?).

  • Subscript used with non-Array variable.

    • nuts
    • 14. August 2009 um 19:36

    Mhm um die Differenz- / Schnittmenge zu bestimmen habe ich dir (subzero007) doch schon vor Tagen ein Beispiel (was nicht unaufwendig war) mit der UDF von Bugfix geschrieben.
    Wieso sind wir jetzt wieder bei der 0815 Lösung? :(

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™