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

Beiträge von Oscar

  • Countdown richtig benutzen !?!

    • Oscar
    • 12. Januar 2009 um 14:01

    Prinzipiell brauchst Du dafür ein Programm, was sich im Autostart befindet und nur überprüft, wann das andere Programm das letzte Mal gestartet wurde und dann die Meldung ausgibt.

    Da es sich ja erst nach 30 Tagen melden soll, ist es wohl am sinnvollsten, wenn es die Daten auf Platte speichert (z.B. in eine Inidatei).

    Wenn es sich bei dem anderen Programm um ein AutoIt-Programm handelt, dann könnte es die Daten des Starts ja selbst in die Ini schreiben. Ansonsten müsste das Überwachungsscript ständig prüfen, ob das Fenster des Programms sich geöffnet hat.

    Stichwörter wären hier:
    - IniRead und IniWrite (für die Inidatei)
    - WinExists bzw. ProcessExists (zum testen, ob das andere Programm gestartet wurde)
    - FileCreateShortcut (zum anlegen einer Verknüpfung im Autostart-Ordner)
    - _NowCalc und _DateDiff (zum festhalten des Datums/Uhrzeit sowie für den Vergleich)

  • StripComment (entfernt Kommentare aus au3-Sourcecode)

    • Oscar
    • 12. Januar 2009 um 13:35

    r1fLeX hatte sich ja schonmal daran versucht. Da war aber das RegExp-Pattern nicht ausreichend.
    Ich habe das jetzt mal erweitert auf (hoffentlich) alle Kommentar-Möglichkeiten:

    Das Script:

    [autoit]


    $sFilename = FileOpenDialog('Bitte Datei auswählen...', @ScriptDir, 'AutoIt-Source (*.au3)')
    If Not @error Then
    $sFile = FileRead($sFilename) ; Sourcecode einlesen
    $sNew = StringRegExpReplace($sFile, '((\x22|\x27).*(\x22|\x27))|(;.*)|(#cs|#comments-start)(.*\r\n)(.*\r\n)*(#ce|#comments-end)(.*\r\n)', '\1') ; Kommentare entfernen
    $sNew = StringRegExpReplace($sNew, '([^\r])\n', '\1' & @CRLF) ; weil einige CRLF durch das Pattern zu LF wurden, das Zeilenende wieder korrigieren
    $sNew = StringRegExpReplace($sNew, '(\r\n)+', '\1') ; doppelte Zeilenenden in einfache umwandeln
    $sFilename = StringReplace($sFilename, '.au3', '_StripComment.au3') ; Dateinamen für die neue Datei anpassen
    $hFile = FileOpen($sFilename, 2) ; neue Datei zum speichern öffnen
    FileWrite($hFile, $sNew) ; Daten schreiben
    FileClose($hFile) ; Datei schließen
    EndIf

    [/autoit]

    Beispieldatei vor dem bearbeiten:

    Spoiler anzeigen
    [autoit]


    For $i = 0 To 100 Step 10 ;Der Kommentar soll weg
    For $j = 0 To 10
    ;~ GUICtrlCreateLabel('', 16 + $i * 3.8, 180, 20, 16)
    GUICtrlCreateLabel('', 16 + $i * 3.8, 180, 20, 16)
    Next
    Next

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

    ; Test mit "
    Global $test = "ein Semikolon ; innerhalb von Anführungsstrichen darf nicht entfernt werden" ; das hier hinten schon

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

    ; Test mit '
    Global $test = 'ein Semikolon ; innerhalb von Anführungsstrichen darf nicht entfernt werden' ; das hier hinten schon
    #cs
    Das hier ist nur ein zusätzlicher Kommentar

    zum testen, ob auch cs...ce entfernt wird

    blablabla

    #ce

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

    #comments-start
    cs und ce gibt es ja auch noch ausgeschrieben
    #comments-end

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

    While True;das ist ein Kommentar ohne Leerzeichen vor und nach dem Semikolon
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $hClose
    Exit
    EndSwitch
    WEnd;und das auch

    [/autoit]

    Beispieldatei nach dem bearbeiten:

    Spoiler anzeigen
    [autoit]


    For $i = 0 To 100 Step 10
    For $j = 0 To 10
    GUICtrlCreateLabel('', 16 + $i * 3.8, 180, 20, 16)
    Next
    Next
    Global $test = "ein Semikolon ; innerhalb von Anführungsstrichen darf nicht entfernt werden"
    Global $test = 'ein Semikolon ; innerhalb von Anführungsstrichen darf nicht entfernt werden'
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $hClose
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Gibt es da noch irgendeinen Fall, den ich übersehen habe?

    @Xeno: Das RegExpReplace kannst Du vor der Erkennung einsetzen, dann sind die Kommentare weg und es werden nur die "richtigen" Befehle erkannt.

  • zwei kleine Fragen

    • Oscar
    • 12. Januar 2009 um 05:54

    Alina, ich glaube er meint das anders.

    Meine Kristallkugel ;) sagt dazu jedenfalls, dass Du (Thomasb) den Befehl Execute suchst und dass Du den String in zusätzliche Anführungszeichen speichern musst:

    [autoit]


    IniWrite('Time.ini', 'Time', '001', Chr(34) & "'C:\Testordner\' & @year & '\test.txt'" & Chr(34))
    $sFilename = IniRead('Time.ini', 'Time', '001', '')
    MsgBox(0, 0, Execute($sFilename))

    [/autoit]

    Die erste Zeile soll nur zum erstellen der Inidatei dienen. Mit Execute wird dann das Makro auch ausgewertet.

  • Browserstart überwachen

    • Oscar
    • 12. Januar 2009 um 05:09

    Wozu man das braucht, weiß ich eigentlich auch nicht so genau... :whistling:
    Vielleicht auf einem Firmen-PC, wo dann nur "berechtigte" Personen den Browser starten dürfen?

    Und der Unterschied zwischen diesen Script und einer Passwort-Eingabe-Verknüpfung ist der, dass man mit diesem Script nicht bei jedem Start des Browsers das Passwort eingeben muss, sondern nur, wenn vorher kein Browserfenster geöffnet war.

  • Mehrzeilige Array Eingabe

    • Oscar
    • 11. Januar 2009 um 21:07

    Reicht es Dir, wenn das so aufgeteilt ist:

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include<WindowsConstants.au3>
    #include<ListViewConstants.au3>
    #include<ButtonConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<Guilistview.au3>

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

    Global $sHeader = "Datum|Zeit|Temperatur|GH|KH|pH|NH3|NO2|NO3|O2|Fe|Cu|CO2|Leitwert|Bemerkung" ; Die Überschriften für das Listview und für das "Neuer Eintrag"-Fenster
    Global $sHeader1 = "Datum|Zeit|Temperatur|GH|KH|pH|NH3"
    Global $sHeader2 = "NO2|NO3|O2|Fe|Cu|CO2|Leitwert|Bemerkung"
    Global $sDBFile = @ScriptDir & "\WW_Datenbank.txt" ; Pfad und Name der Datenbank-Datei
    Global $iEdit

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

    #Region Hauptfenster
    Global $hGui = GUICreate("Wasserwerte Tabelle v1.1 - Garnelenforum.de", 695, 500) ; Hauptfenster erstellen
    Global $hListView = GUICtrlCreateListView($sHeader, 0, 0, 695, 420, $LVS_SHOWSELALWAYS) ; Listview erstellen

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

    Global $hLVHandle = GUICtrlGetHandle($hListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Datum", 64, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 1, "Uhrzeit", 60, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 2, "Temperatur °C", 90, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 3, "GH °dh", 49, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 4, "KH °dh", 49, 2) ; 2. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 5, "pH", 34, 2) ; 3. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 6, "NH3 mg/l", 64, 2) ; 4. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 7, "NO2 mg/l", 64, 2) ; 5. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 8, "NO3 mg/l", 64, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 9, "O2 mg/l", 52, 2) ; 2. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 10, "Fe mg/l", 51, 2) ; 3. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 11, "Cu mg/l", 51, 2) ; 4. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 12, "CO2 mg/l", 59, 2) ; 5. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 13, "Leitwert µS/cm", 100, 2) ; 4. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 14, "Bemerkung", 150, 2) ; 5. Spalte = 40 Px breit, zentriert ausgerichtet

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

    Global $hNew = GUICtrlCreateButton("Neuer Eintrag", 40, 430, 80, 35, $BS_DEFPUSHBUTTON) ; Dieser Button ist der Default-Push-Button (wenn der User [Enter] drückt)
    Global $hEdit = GUICtrlCreateButton("Markierten Eintrag bearbeiten", 140, 430, 110, 35, $BS_MULTILINE) ; $BS_Multiline für mehrzeiligen Button
    Global $hLoad = GUICtrlCreateButton("Laden", 270, 430, 70, 35)
    Global $hSave = GUICtrlCreateButton("Speichern", 375, 430, 70, 35)
    Global $hDel = GUICtrlCreateButton("Markierte Einträge löschen", 465, 430, 90, 35, $BS_MULTILINE)
    Global $hDelAll = GUICtrlCreateButton("Alle Einträge löschen", 575, 430, 90, 35, $BS_MULTILINE)
    Global $hCO2 = GUICtrlCreateButton("CO2 Rechner", 322, 470, 75, 25, $BS_MULTILINE)

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

    Global $copyright = GUICtrlCreateLabel("by Thomas D.", 625, 485, 90, 35, $BS_MULTILINE)
    GUICtrlSetCursor(-1, 0)
    Global $forum = GUICtrlCreateLabel("www.garnelenforum.de", 2, 485, 120, 35, $BS_MULTILINE)
    GUICtrlSetCursor(-1, 0)

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

    Global $hCM = GUICtrlCreateContextMenu($hListView) ; ein Kontextmenü für das Listview erstellen
    Global $hCMNew = GUICtrlCreateMenuItem("Neuer Eintrag", $hCM) ; der 1. Kontextmenüeintrag
    Global $hCMEdit = GUICtrlCreateMenuItem("Eintrag bearbeiten", $hCM) ; der 2. Kontextmenüeintrag
    Global $hCMDel = GUICtrlCreateMenuItem("Markierte Einträge löschen", $hCM) ; der 3. Kontextmenüeintrag
    #EndRegion Hauptfenster

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

    #Region Fenster für neuen Eintrag
    Global $hGuiNew = GUICreate("Neuer Eintrag", 670, 220, -1, -1, $WS_SYSMENU)
    ; das Fenster "Neuer Eintrag" erstellen
    Global $aHeader = StringSplit($sHeader, '|') ; Überschriften-Array
    Global $aNew[$aHeader[0]] ; Array für die Input-IDs
    For $i = 1 To $aHeader[0]
    GUICtrlCreateLabel($aHeader[$i], 22 + Mod($i - 1, 8) * 80, 22 + Int(($i - 1) / 8) * 60, 65, 20) ; Überschriften-Label erstellen
    $aNew[$i - 1] = GUICtrlCreateInput("", 20 + Mod($i - 1, 8) * 80, 40 + Int(($i - 1) / 8) * 60, 65, 20) ; Eingabefelder erstellen
    Next
    Global $hCreate = GUICtrlCreateButton("Eintrag speichern", 300, 155, 120, 25, $BS_DEFPUSHBUTTON) ; Button zum speichern
    #EndRegion Fenster für neuen Eintrag

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

    #Region Fenster für CO2 Rechner
    Global $hGuiCO2 = GUICreate("CO2 Rechner", 200, 150, -1, -1, $WS_SYSMENU) ; das Fenster "CO2 Rechner" erstellen
    Global $aKH = GUICtrlCreateLabel("KH", 20, 20, 20, 30)
    Global $apH = GUICtrlCreateLabel("pH", 80, 20, 20, 30)
    Global $aCO2 = GUICtrlCreateLabel("CO2", 140, 20, 55, 30)
    Global $iKH = GUICtrlCreateInput("", 15, 40, 30, 20)
    Global $ipH = GUICtrlCreateInput("", 75, 40, 30, 20)
    Global $iCO2 = GUICtrlCreateInput("", 140, 40, 30, 20)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    Global $hCalc = GUICtrlCreateButton("Wert ermitteln", 42, 85, 120, 25, $BS_DEFPUSHBUTTON) ; Button zum speichern
    #EndRegion Fenster für CO2 Rechner

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

    _GUICtrlListView_RegisterSortCallBack($hLVHandle) ; damit man das Listview (mit Klick auf die Spaltenüberschrift) sortieren kann

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

    GUISetState(@SW_SHOW, $hGui) ; Hauptfenster sichtbar machen

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

    If FileExists($sDBFile) Then Load() ; wenn Datenbank-Datei existiert, dann Datenbank laden

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

    While 1
    $nMsg = GUIGetMsg(1) ; Message-Event holen (1) = erweiterter Modus
    Switch $nMsg[0] ; anhand der Control-ID das entsprechende Case aufrufen
    Case $hListView ; User hat auf eine Spaltenüberschrift geklickt
    _GUICtrlListView_SortItems($hLVHandle, GUICtrlGetState($hListView)) ; Einträge entsprechend sortieren
    Case $hNew, $hCMNew ; User hat auf "Neuer Eintrag" geklickt
    WinSetTitle($hGuiNew, "", "Neuer Eintrag") ; den Titel des Fenster anpassen
    GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
    GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
    Case $hEdit, $hCMEdit ; User hat auf "Eintrag bearbeiten" geklickt
    WinSetTitle($hGuiNew, "", "Eintrag bearbeiten") ; den Titel des Fenster anpassen
    GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
    GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
    Edit()
    Case $hLoad ; User hat auf "Laden" geklickt
    Load()
    Case $hSave ; User hat auf "Laden" geklickt
    Save()
    Case $hDel, $hCMDel ; User hat auf "Markierte Einträge löschen" geklickt
    If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie die markierten Einträge wirklich löschen?") = 6 Then _GUICtrlListView_DeleteItemsSelected($hLVHandle)
    Case $hDelAll ; User hat auf "Alle Einträge löschen" geklickt
    If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie wirklich alle Einträge löschen?") = 6 Then _GUICtrlListView_DeleteAllItems($hLVHandle)
    Case $hCreate ; User hat auf "Eintrag speichern" im Fenster "Neuer Eintrag" geklickt
    NewItem()
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    Case $copyright ; User hat auf Copyright geklickt, Inet explorer öffnen zu Garnelenforum Profil
    ShellExecute("iexplore.exe", "http://www.garnelenforum.de/board/member.php?u=30561", "C:\Programme\Internet Explorer\", "open")
    Case $forum
    ShellExecute("iexplore.exe", "http://www.garnelenforum.de/", "C:\Programme\Internet Explorer\", "open")
    Case $hCO2
    WinSetTitle($hGuiCO2, "", "CO2 Rechner") ; den Titel des Fenster anpassen
    GUISetState(@SW_SHOW, $hGuiCO2) ; das Fenster "Neuer Eintrag" anzeigen
    GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
    Case $hCalc
    CO2()
    Case $GUI_EVENT_CLOSE ; User hat auf das Schließen-Symbol geklickt (bzw. die ESC-Taste gedrückt)
    Switch $nMsg[1] ; erweiterte Abfrage für welches Fenster
    Case $hGui ; User will das Hauptfenster schließen
    end()
    ;~ If MsgBox(32 + 4, "Beenden", "Wollen sie das Programm wirklich beenden?") = 6 Then End() ; wenn ja, dann End-Funktion aufrufen
    Case $hGuiNew ; User will das "Neuer Eintrag"-Fenster schließen
    $iEdit = 0
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    Case $hGuiCO2
    $iEdit = 0
    GUISetState(@SW_HIDE, $hGuiCO2) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    EndSwitch
    EndSwitch
    WEnd

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

    Func End()
    ;~ Save() ; wenn der vordere Kommentar entfernt wird, dann werden vor dem beenden noch die Daten gespeichert
    _GUICtrlListView_UnRegisterSortCallBack($hLVHandle) ; Sortierroutine wieder de-registrieren
    Exit ; Programm beenden
    EndFunc ;==>End

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

    Func NewItem() ; Funktion zum auslesen der Eingabefelder (Neuer Eintrag bzw. Eintrag bearbeiten)
    Local $sItem = ""
    For $i = 0 To UBound($aNew) - 1 ; Schleife, um alle Eingabefelder durchzugehen
    If $iEdit Then ; wenn $iEdit <> 0 (Eintrag bearbeiten), dann...
    _GUICtrlListView_SetItemText($hLVHandle, $iEdit, GUICtrlRead($aNew[$i]), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
    Else ; sonst $iEdit = 0 (neuer Eintrag)
    $sItem &= GUICtrlRead($aNew[$i]) & "|" ; den Eintrag aus dem Eingabefeld erstmal in einer Variablen ($sItem) speichern
    EndIf
    GUICtrlSetData($aNew[$i], "") ; das entsprechende Eingabefeld leeren
    Next
    If $iEdit Then ; wenn $iEdit <> 0 (Eintrag bearbeiten), dann...
    $iEdit = 0
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    Else ; sonst $iEdit = 0 (neuer Eintrag)
    GUICtrlSetState($aNew[0], $GUI_FOCUS) ; den Focus wieder auf das erste Eingabefeld setzen, für weitere Eingaben
    GUICtrlCreateListViewItem(StringTrimRight($sItem, 1), $hListView) ; mit den Werten aus $sItem einen neuen Listview-Eintrag hinzufügen
    EndIf
    EndFunc ;==>NewItem

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

    Func Edit() ; Funktion zum bearbeiten eines Listview-Eintrags im "Eintrag bearbeiten"-Fenster
    $iEdit = _GUICtrlListView_GetSelectionMark($hLVHandle) ; auslesen, welcher Listview-Eintrag markiert (bei mehreren, den obersten) ist
    Local $aItem = _GUICtrlListView_GetItemTextArray($hLVHandle, $iEdit) ; die Einträge aus dem Listview in ein Array holen
    For $i = 1 To $aItem[0]
    GUICtrlSetData($aNew[$i - 1], $aItem[$i]) ; und in die entsprechenden Eingabefelder schreiben
    Next
    EndFunc ;==>Edit

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

    Func Load() ; Datenbank-Datei laden
    Local $sItem
    Local $hFile = FileOpen($sDBFile, 0) ; Datei zum lesen öffnen
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    _GUICtrlListView_BeginUpdate($hLVHandle) ; Listview sperren
    While True ; Endlosschleife
    $sItem = FileReadLine($hFile) ; Zeile aus der Datei lesen
    If @error Then ExitLoop ; wenn das Ende der Datei erreicht ist, dann Endlosschleife verlassen
    GUICtrlCreateListViewItem($sItem, $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
    WEnd
    _GUICtrlListView_EndUpdate($hLVHandle) ; Listview wieder freigeben
    FileClose($hFile) ; Datei schließen
    EndIf
    EndFunc ;==>Load

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

    Func Save() ; Datenbank-Datei speichern
    Local $sItem
    Local $iCount = _GUICtrlListView_GetItemCount($hLVHandle) - 1 ; Anzahl der Listview-Einträge holen
    Local $hFile = FileOpen($sDBFile, 2) ; Datei zum speichern (überschreiben) öffnen
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    For $i = 0 To $iCount ; Schleife, um alle Listview-Einträge durchzugehen
    $sItem = _GUICtrlListView_GetItemTextString($hLVHandle, $i) ; die Werte aus dem Listview-Eintrag holen
    FileWriteLine($hFile, $sItem) ; und in die Datei schreiben
    Next
    FileClose($hFile) ; Datei schließen
    EndIf
    EndFunc ;==>Save

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

    Func co2()
    Local $kh = GUICtrlRead($iKH)
    Local $ph = GUICtrlRead($ipH)
    Local $CO2 = $kh / 2.8 * 10 ^ (7.90 - $ph)
    $rCO2 = Round($CO2)
    GUICtrlSetData($iCO2, $rCO2)
    EndFunc ;==>co2

    [/autoit]
  • Mehrzeilige Array Eingabe

    • Oscar
    • 11. Januar 2009 um 20:56

    Zwei Zeilen ist kein Problem:

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include<WindowsConstants.au3>
    #include<ListViewConstants.au3>
    #include<ButtonConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<Guilistview.au3>

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

    Global $sHeader = "Datum|Zeit|Temperatur|GH|KH|pH|NH3||NO2|NO3|O2|Fe|Cu|CO2|Leitwert|Bemerkung" ; Die Überschriften für das Listview und für das "Neuer Eintrag"-Fenster
    Global $sHeader1 = "Datum|Zeit|Temperatur|GH|KH|pH|NH3"
    Global $sHeader2 = "NO2|NO3|O2|Fe|Cu|CO2|Leitwert|Bemerkung"
    Global $sDBFile = @ScriptDir & "\WW_Datenbank.txt" ; Pfad und Name der Datenbank-Datei
    Global $iEdit

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

    #Region Hauptfenster
    Global $hGui = GUICreate("Wasserwerte Tabelle v1.1 - Garnelenforum.de", 695, 500) ; Hauptfenster erstellen
    Global $hListView = GUICtrlCreateListView($sHeader, 0, 0, 695, 420, $LVS_SHOWSELALWAYS) ; Listview erstellen

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

    Global $hLVHandle = GUICtrlGetHandle($hListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Datum", 64, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 1, "Uhrzeit", 60, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 2, "Temperatur °C", 90, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 3, "GH °dh", 49, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 4, "KH °dh", 49, 2) ; 2. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 5, "pH", 34, 2) ; 3. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 6, "NH3 mg/l", 64, 2) ; 4. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 7, "NO2 mg/l", 64, 2) ; 5. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 8, "NO3 mg/l", 64, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 9, "O2 mg/l", 52, 2) ; 2. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 10, "Fe mg/l", 51, 2) ; 3. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 11, "Cu mg/l", 51, 2) ; 4. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 12, "CO2 mg/l", 59, 2) ; 5. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 13, "Leitwert µS/cm", 100, 2) ; 4. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 14, "Bemerkung", 150, 2) ; 5. Spalte = 40 Px breit, zentriert ausgerichtet

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

    Global $hNew = GUICtrlCreateButton("Neuer Eintrag", 40, 430, 80, 35, $BS_DEFPUSHBUTTON) ; Dieser Button ist der Default-Push-Button (wenn der User [Enter] drückt)
    Global $hEdit = GUICtrlCreateButton("Markierten Eintrag bearbeiten", 140, 430, 110, 35, $BS_MULTILINE) ; $BS_Multiline für mehrzeiligen Button
    Global $hLoad = GUICtrlCreateButton("Laden", 270, 430, 70, 35)
    Global $hSave = GUICtrlCreateButton("Speichern", 375, 430, 70, 35)
    Global $hDel = GUICtrlCreateButton("Markierte Einträge löschen", 465, 430, 90, 35, $BS_MULTILINE)
    Global $hDelAll = GUICtrlCreateButton("Alle Einträge löschen", 575, 430, 90, 35, $BS_MULTILINE)
    Global $hCO2 = GUICtrlCreateButton("CO2 Rechner", 322, 470, 75, 25, $BS_MULTILINE)

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

    Global $copyright = GUICtrlCreateLabel("by Thomas D.", 625, 485, 90, 35, $BS_MULTILINE)
    GUICtrlSetCursor(-1, 0)
    Global $forum = GUICtrlCreateLabel("www.garnelenforum.de", 2, 485, 120, 35, $BS_MULTILINE)
    GUICtrlSetCursor(-1, 0)

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

    Global $hCM = GUICtrlCreateContextMenu($hListView) ; ein Kontextmenü für das Listview erstellen
    Global $hCMNew = GUICtrlCreateMenuItem("Neuer Eintrag", $hCM) ; der 1. Kontextmenüeintrag
    Global $hCMEdit = GUICtrlCreateMenuItem("Eintrag bearbeiten", $hCM) ; der 2. Kontextmenüeintrag
    Global $hCMDel = GUICtrlCreateMenuItem("Markierte Einträge löschen", $hCM) ; der 3. Kontextmenüeintrag
    #EndRegion Hauptfenster

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

    #Region Fenster für neuen Eintrag
    Global $hGuiNew = GUICreate("Neuer Eintrag", 670, 220, -1, -1, $WS_SYSMENU)
    ; das Fenster "Neuer Eintrag" erstellen
    Global $aHeader = StringSplit($sHeader, '|') ; Überschriften-Array
    Global $aNew[$aHeader[0]] ; Array für die Input-IDs
    For $i = 1 To $aHeader[0]
    If $aHeader[$i] <> '' Then
    GUICtrlCreateLabel($aHeader[$i], 20 + Mod($i - 1, 8) * 80, 22 + Int(($i - 1) / 8) * 60, 65, 20) ; Überschriften-Label erstellen
    $aNew[$i - 1] = GUICtrlCreateInput("", 20 + Mod($i - 1, 8) * 80, 42 + Int(($i - 1) / 8) * 60, 65, 20) ; Eingabefelder erstellen
    EndIf
    Next
    Global $hCreate = GUICtrlCreateButton("Eintrag speichern", 300, 155, 120, 25, $BS_DEFPUSHBUTTON) ; Button zum speichern
    #EndRegion Fenster für neuen Eintrag

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

    #Region Fenster für CO2 Rechner
    Global $hGuiCO2 = GUICreate("CO2 Rechner", 200, 150, -1, -1, $WS_SYSMENU) ; das Fenster "CO2 Rechner" erstellen
    Global $aKH = GUICtrlCreateLabel("KH", 20, 20, 20, 30)
    Global $apH = GUICtrlCreateLabel("pH", 80, 20, 20, 30)
    Global $aCO2 = GUICtrlCreateLabel("CO2", 140, 20, 55, 30)
    Global $iKH = GUICtrlCreateInput("", 15, 40, 30, 20)
    Global $ipH = GUICtrlCreateInput("", 75, 40, 30, 20)
    Global $iCO2 = GUICtrlCreateInput("", 140, 40, 30, 20)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    Global $hCalc = GUICtrlCreateButton("Wert ermitteln", 42, 85, 120, 25, $BS_DEFPUSHBUTTON) ; Button zum speichern
    #EndRegion Fenster für CO2 Rechner

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

    _GUICtrlListView_RegisterSortCallBack($hLVHandle) ; damit man das Listview (mit Klick auf die Spaltenüberschrift) sortieren kann

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

    GUISetState(@SW_SHOW, $hGui) ; Hauptfenster sichtbar machen

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

    If FileExists($sDBFile) Then Load() ; wenn Datenbank-Datei existiert, dann Datenbank laden

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

    While 1
    $nMsg = GUIGetMsg(1) ; Message-Event holen (1) = erweiterter Modus
    Switch $nMsg[0] ; anhand der Control-ID das entsprechende Case aufrufen
    Case $hListView ; User hat auf eine Spaltenüberschrift geklickt
    _GUICtrlListView_SortItems($hLVHandle, GUICtrlGetState($hListView)) ; Einträge entsprechend sortieren
    Case $hNew, $hCMNew ; User hat auf "Neuer Eintrag" geklickt
    WinSetTitle($hGuiNew, "", "Neuer Eintrag") ; den Titel des Fenster anpassen
    GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
    GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
    Case $hEdit, $hCMEdit ; User hat auf "Eintrag bearbeiten" geklickt
    WinSetTitle($hGuiNew, "", "Eintrag bearbeiten") ; den Titel des Fenster anpassen
    GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
    GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
    Edit()
    Case $hLoad ; User hat auf "Laden" geklickt
    Load()
    Case $hSave ; User hat auf "Laden" geklickt
    Save()
    Case $hDel, $hCMDel ; User hat auf "Markierte Einträge löschen" geklickt
    If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie die markierten Einträge wirklich löschen?") = 6 Then _GUICtrlListView_DeleteItemsSelected($hLVHandle)
    Case $hDelAll ; User hat auf "Alle Einträge löschen" geklickt
    If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie wirklich alle Einträge löschen?") = 6 Then _GUICtrlListView_DeleteAllItems($hLVHandle)
    Case $hCreate ; User hat auf "Eintrag speichern" im Fenster "Neuer Eintrag" geklickt
    NewItem()
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    Case $copyright ; User hat auf Copyright geklickt, Inet explorer öffnen zu Garnelenforum Profil
    ShellExecute("iexplore.exe", "http://www.garnelenforum.de/board/member.php?u=30561", "C:\Programme\Internet Explorer\", "open")
    Case $forum
    ShellExecute("iexplore.exe", "http://www.garnelenforum.de/", "C:\Programme\Internet Explorer\", "open")
    Case $hCO2
    WinSetTitle($hGuiCO2, "", "CO2 Rechner") ; den Titel des Fenster anpassen
    GUISetState(@SW_SHOW, $hGuiCO2) ; das Fenster "Neuer Eintrag" anzeigen
    GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
    Case $hCalc
    CO2()
    Case $GUI_EVENT_CLOSE ; User hat auf das Schließen-Symbol geklickt (bzw. die ESC-Taste gedrückt)
    Switch $nMsg[1] ; erweiterte Abfrage für welches Fenster
    Case $hGui ; User will das Hauptfenster schließen
    end()
    ;~ If MsgBox(32 + 4, "Beenden", "Wollen sie das Programm wirklich beenden?") = 6 Then End() ; wenn ja, dann End-Funktion aufrufen
    Case $hGuiNew ; User will das "Neuer Eintrag"-Fenster schließen
    $iEdit = 0
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    Case $hGuiCO2
    $iEdit = 0
    GUISetState(@SW_HIDE, $hGuiCO2) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    EndSwitch
    EndSwitch
    WEnd

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

    Func End()
    ;~ Save() ; wenn der vordere Kommentar entfernt wird, dann werden vor dem beenden noch die Daten gespeichert
    _GUICtrlListView_UnRegisterSortCallBack($hLVHandle) ; Sortierroutine wieder de-registrieren
    Exit ; Programm beenden
    EndFunc ;==>End

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

    Func NewItem() ; Funktion zum auslesen der Eingabefelder (Neuer Eintrag bzw. Eintrag bearbeiten)
    Local $sItem = ""
    For $i = 0 To UBound($aNew) - 1 ; Schleife, um alle Eingabefelder durchzugehen
    If $iEdit Then ; wenn $iEdit <> 0 (Eintrag bearbeiten), dann...
    _GUICtrlListView_SetItemText($hLVHandle, $iEdit, GUICtrlRead($aNew[$i]), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
    Else ; sonst $iEdit = 0 (neuer Eintrag)
    $sItem &= GUICtrlRead($aNew[$i]) & "|" ; den Eintrag aus dem Eingabefeld erstmal in einer Variablen ($sItem) speichern
    EndIf
    GUICtrlSetData($aNew[$i], "") ; das entsprechende Eingabefeld leeren
    Next
    If $iEdit Then ; wenn $iEdit <> 0 (Eintrag bearbeiten), dann...
    $iEdit = 0
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    Else ; sonst $iEdit = 0 (neuer Eintrag)
    GUICtrlSetState($aNew[0], $GUI_FOCUS) ; den Focus wieder auf das erste Eingabefeld setzen, für weitere Eingaben
    GUICtrlCreateListViewItem(StringTrimRight($sItem, 1), $hListView) ; mit den Werten aus $sItem einen neuen Listview-Eintrag hinzufügen
    EndIf
    EndFunc ;==>NewItem

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

    Func Edit() ; Funktion zum bearbeiten eines Listview-Eintrags im "Eintrag bearbeiten"-Fenster
    $iEdit = _GUICtrlListView_GetSelectionMark($hLVHandle) ; auslesen, welcher Listview-Eintrag markiert (bei mehreren, den obersten) ist
    Local $aItem = _GUICtrlListView_GetItemTextArray($hLVHandle, $iEdit) ; die Einträge aus dem Listview in ein Array holen
    For $i = 1 To $aItem[0]
    GUICtrlSetData($aNew[$i - 1], $aItem[$i]) ; und in die entsprechenden Eingabefelder schreiben
    Next
    EndFunc ;==>Edit

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

    Func Load() ; Datenbank-Datei laden
    Local $sItem
    Local $hFile = FileOpen($sDBFile, 0) ; Datei zum lesen öffnen
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    _GUICtrlListView_BeginUpdate($hLVHandle) ; Listview sperren
    While True ; Endlosschleife
    $sItem = FileReadLine($hFile) ; Zeile aus der Datei lesen
    If @error Then ExitLoop ; wenn das Ende der Datei erreicht ist, dann Endlosschleife verlassen
    GUICtrlCreateListViewItem($sItem, $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
    WEnd
    _GUICtrlListView_EndUpdate($hLVHandle) ; Listview wieder freigeben
    FileClose($hFile) ; Datei schließen
    EndIf
    EndFunc ;==>Load

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

    Func Save() ; Datenbank-Datei speichern
    Local $sItem
    Local $iCount = _GUICtrlListView_GetItemCount($hLVHandle) - 1 ; Anzahl der Listview-Einträge holen
    Local $hFile = FileOpen($sDBFile, 2) ; Datei zum speichern (überschreiben) öffnen
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    For $i = 0 To $iCount ; Schleife, um alle Listview-Einträge durchzugehen
    $sItem = _GUICtrlListView_GetItemTextString($hLVHandle, $i) ; die Werte aus dem Listview-Eintrag holen
    FileWriteLine($hFile, $sItem) ; und in die Datei schreiben
    Next
    FileClose($hFile) ; Datei schließen
    EndIf
    EndFunc ;==>Save

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

    Func co2()
    Local $kh = GUICtrlRead($iKH)
    Local $ph = GUICtrlRead($ipH)
    Local $CO2 = $kh / 2.8 * 10 ^ (7.90 - $ph)
    $rCO2 = Round($CO2)
    GUICtrlSetData($iCO2, $rCO2)
    EndFunc ;==>co2

    [/autoit]
  • IE & FF Ausführung verboten

    • Oscar
    • 11. Januar 2009 um 13:46

    Hallo Alina!

    Ich habe da mal etwas programmiert: Browserstart überwachen

    Meinst Du sowas?

  • Browserstart überwachen

    • Oscar
    • 11. Januar 2009 um 13:44

    Mit diesem Script kann man den Start von Firefox und InternetExplorer überwachen. Der Zugriff ist erst nach der richtigen Eingabe eines Passworts zulässig.
    Das Script läuft im Hintergrund und wartet darauf, dass der InternetExplorer bzw. Firefox gestartet wird. Ist das der Fall, so wird ein Passwort-Eingabe-Fenster geöffnet. Bei Eingabe eines falschen Passworts wird der Browser wieder beendet.
    Bei richtiger Eingabe kann man den Browser ganz normal benutzen und zwar so lange bis man alle Browserfenster wieder geschlossen hat. Danach muss man beim öffnen eines neuen Browserfensters wieder das Passwort eingeben.

    Das Passwort im Script ist auf "1234" voreingestellt. Kann aber geändert werden (wichtig: max. 10 Stellen und nur Zahlen)

    Der Hotkey zum beenden des Programms ist auf [STRG]+[ALT]+[q] voreingestellt.

    Screenshot:
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon
    #include<GUIConstantsEx.au3>
    #include<StaticConstants.au3>
    #include<WindowsConstants.au3>

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

    Opt('GUIOnEventMode', 1) ; OnEventMode: On
    Opt('GUICloseOnESC', 0)
    Opt('WinTitleMatchMode', 2)

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

    Global $sPasswort = 1234 ; hier den Zugriffscode eintragen
    HotKeySet('^!q', '_End') ; Hotkey [STRG]+[ALT]+[q] zum beenden des Programms

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

    Global Const $WS_EX_COMPOSITED = 0x02000000
    Global $hGui = GUICreate('Zugriffscode', 140, 222, -1, -1, $WS_POPUPWINDOW, BitOR($WS_EX_TOOLWINDOW, $WS_EX_COMPOSITED))
    GUISetBkColor(0xEEEEEE)
    GUICtrlCreateLabel('Zugriffscode eingeben:', 8, 8, 124, 20)
    Global $sBlinkChar = Chr(144) ; das blinkende Cursorzeichen
    Global $hDisplay = GUICtrlCreateLabel($sBlinkChar, 6, 28, 126, 20, $SS_RIGHT, $WS_EX_STATICEDGE)
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlSetColor(-1, 0xEE4444)
    GUICtrlSetFont(-1, 14, 600, 0, 'Courier')
    Global $aButtonName = StringSplit('7|8|9|4|5|6|1|2|3|C|0|OK', '|', 2)
    Global $ahButton[UBound($aButtonName)]
    GUICtrlCreateGroup('', 6, 48, 126, 168)
    For $i = 0 To UBound($aButtonName) - 1
    $ahButton[$i] = GUICtrlCreateButton($aButtonName[$i], 12 + Mod($i, 3) * 40, 58 + Int($i / 3) * 40, 34, 32)
    GUICtrlSetFont(-1, 10, 600, 0, 'Verdana')
    GUICtrlSetOnEvent(-1, '_ButtonKlick')
    Next
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    GUICtrlSetState($ahButton[11], BitOR($GUI_DEFBUTTON, $GUI_FOCUS))

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

    Global $hShadow = GUICreate('Shadow', @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, $WS_EX_TOOLWINDOW)
    GUISetBkColor(0x000000)
    WinSetTrans($hShadow, '', 200)

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

    WinSetOnTop($hGui, '', 1)
    AdlibEnable('_Blink', 500)

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

    GUIRegisterMsg($WM_ACTIVATE, 'WM_ACTIVATE')
    _SetHotKey(True)
    Global $bPass = False
    While 1
    If WinExists('Mozilla Firefox') Or WinExists('Internet Explorer') Then
    If $bPass Then
    GUISetState(@SW_HIDE, $hShadow)
    GUISetState(@SW_HIDE, $hGui)
    Else
    GUISetState(@SW_SHOW, $hShadow)
    GUISetState(@SW_SHOW, $hGui)
    if Not WinActive($hGui) Then
    WinActivate($hShadow)
    WinActivate($hGui)
    EndIf
    EndIf
    Else
    $bPass = False
    EndIf
    Sleep(30)
    WEnd

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

    Func _End()
    Exit
    EndFunc ;==>_End

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

    Func _ButtonKlick()
    Local $sDisplay = GUICtrlRead($hDisplay)
    Local $iButton = @GUI_CtrlId - $ahButton[0]
    Switch $iButton
    Case 11 ; 'OK'
    If StringTrimRight(GUICtrlRead($hDisplay), 1) = $sPasswort Then
    $bPass = True
    GUICtrlSetData($hDisplay, $sBlinkChar)
    GUISetState(@SW_HIDE, $hShadow)
    GUISetState(@SW_HIDE, $hGui)
    Else
    ProcessClose('firefox.exe')
    ProcessClose('iexplore.exe')
    GUICtrlSetData($hDisplay, $sBlinkChar)
    GUISetState(@SW_HIDE, $hShadow)
    GUISetState(@SW_HIDE, $hGui)
    EndIf
    Case 9 ; 'C'
    GUICtrlSetData($hDisplay, $sBlinkChar)
    Case Else ; Zahlentasten
    If StringLen($sDisplay) <= 10 Then
    $sDisplay = StringTrimRight($sDisplay, 1) & $aButtonName[$iButton] & $sBlinkChar
    GUICtrlSetData($hDisplay, $sDisplay)
    Else
    Beep(400, 50)
    EndIf
    EndSwitch
    EndFunc ;==>_ButtonKlick

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

    Func _HotKey()
    Local $sDisplay = GUICtrlRead($hDisplay)
    Local $HotKey = @HotKeyPressed
    Local $iButton = StringRegExpReplace($HotKey, '{NUMPAD(.+)}', '$1')
    Switch $HotKey
    Case '{ENTER}' ; 'OK'
    If StringTrimRight(GUICtrlRead($hDisplay), 1) = $sPasswort Then
    $bPass = True
    GUICtrlSetData($hDisplay, $sBlinkChar)
    GUISetState(@SW_HIDE, $hShadow)
    GUISetState(@SW_HIDE, $hGui)
    Else
    ProcessClose('firefox.exe')
    ProcessClose('iexplore.exe')
    GUICtrlSetData($hDisplay, $sBlinkChar)
    GUISetState(@SW_HIDE, $hShadow)
    GUISetState(@SW_HIDE, $hGui)
    EndIf
    Case '{NUMPADDOT}' ; 'C'
    GUICtrlSetData($hDisplay, $sBlinkChar)
    Case Else ; Zahlentasten
    If StringLen($sDisplay) <= 10 Then
    $sDisplay = StringTrimRight($sDisplay, 1) & $iButton & $sBlinkChar
    GUICtrlSetData($hDisplay, $sDisplay)
    Else
    Beep(400, 50)
    EndIf
    EndSwitch
    EndFunc ;==>_HotKey

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

    Func _SetHotKey($bOnOff)
    Local $aHotKeys = StringSplit('{NUMPAD1}|{NUMPAD2}|{NUMPAD3}|{NUMPAD4}|{NUMPAD5}|{NUMPAD6}|{NUMPAD7}|{NUMPAD8}|{NUMPAD9}|{NUMPADDOT}|{NUMPAD0}|{ENTER}', '|', 2)
    For $i = 0 To UBound($aHotKeys) - 1
    If $bOnOff Then
    HotKeySet($aHotKeys[$i], '_HotKey')
    Else
    HotKeySet($aHotKeys[$i])
    EndIf
    Next
    EndFunc ;==>_SetHotKey

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

    Func WM_ACTIVATE($hWnd, $Msg, $wParam, $lParam)
    _SetHotkey(BitAND($wParam, 0x0000FFFF))
    EndFunc ;==>WM_ACTIVATE

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

    Func _Blink()
    Local $sDisplay = GUICtrlRead($hDisplay)
    Switch StringRight($sDisplay, 1)
    Case $sBlinkChar
    $sDisplay = StringReplace($sDisplay, $sBlinkChar, ' ')
    Case ' '
    $sDisplay = StringReplace($sDisplay, ' ', $sBlinkChar)
    EndSwitch
    GUICtrlSetData($hDisplay, $sDisplay)
    EndFunc ;==>_Blink

    [/autoit]
  • Klassische Progressbar (2 Beispiele)

    • Oscar
    • 11. Januar 2009 um 10:55

    Es tauchen hier ja immer wieder mal Fragen zu einer Progressbar mit Prozentanzeige innerhalb des Progressbalkens auf.
    Dazu habe ich mal ein Beispielskript erstellt. Außerdem gibt es noch ein Beispiel für eine Progressbar (mit Slider), deren Wert sich während der Sliderbewegung aktualisiert:

    Spoiler anzeigen
    [autoit]


    #include<SliderConstants.au3>
    #include<StaticConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<ProgressConstants.au3>

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

    Global $hGui = GUICreate('Klassische Progressbar', 420, 280, -1, -1)

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

    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0) ; auf den klassischen Style umschalten
    Global $hProgress1 = GUICtrlCreateProgress(15, 20, 384, 20, $PBS_SMOOTH) ; obere Progressbar erstellen
    GUICtrlSetColor(-1, 0x22FF22)
    GUICtrlSetBkColor(-1, 0xEEEEEE)
    GUICtrlCreateLabel('|', 18, 40, 20, 16) ; Anzeige von 0%
    GUICtrlCreateLabel('0%', 11, 56, 25, 16, $SS_CENTER)
    GUICtrlCreateLabel('|', 396, 40, 20, 16) ; Anzeige von 100%
    GUICtrlCreateLabel('100%', 389, 56, 25, 16, $SS_CENTER)

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

    Global $hLabel1 = GUICtrlCreateLabel('0%', 190, 24, 30, 14, $SS_CENTER) ; Prozentanzeige innerhalb der Progressbar
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ; Transparenter Hintergrund für das Label

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

    Global $hProgress2 = GUICtrlCreateProgress(15, 160, 384, 20, $PBS_SMOOTH) ; untere Progressbar erstellen
    GUICtrlSetColor(-1, 0xC83131)
    GUICtrlSetBkColor(-1, 0xEEEEEE)
    DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 7) ; zurück zum Standard-Windowsstyle

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

    For $i = 0 To 100 Step 10 ; die Anzeige für die Prozentwerte der unteren Progressbar erstellen
    GUICtrlCreateLabel('|', 16 + $i * 3.8, 180, 20, 16)
    GUICtrlCreateLabel($i & '%', 9 + $i * 3.8, 196, 25, 16, $SS_CENTER)
    Next

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

    Global $hSlider = GUICtrlCreateSlider(5, 130, 404, 28, BitOR($TBS_TOOLTIPS, $TBS_AUTOTICKS))
    GUICtrlSetData(-1, 33) ; Sliderwert auf 33% setzen (als Beispiel)

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

    Global $hClose = GUICtrlCreateButton('Close', 180, 240, 60, 24)
    GUISetState(@SW_SHOW)

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

    Global $iAddend = 1 ; globale Variable (dient als Summand für _SetProgress)
    AdlibEnable('_SetProgress', 30)

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

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $hClose
    Exit
    EndSwitch
    WEnd

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

    Func _SetProgress()
    Local $iPercent = GUICtrlRead($hProgress1) ; Prozentwert der oberen Progressbar auslesen
    If $iPercent = 100 Or $iPercent = 0 Then $iAddend = -$iAddend ; wenn 100 oder Null, dann den Summand negieren
    GUICtrlSetData($hProgress1, $iPercent + $iAddend) ; neuen Wert der oberen Progressbar schreiben
    GUICtrlSetData($hLabel1, $iPercent + $iAddend & '%') ; neuen Wert für das Label schreiben
    GUICtrlSetData($hProgress2, GUICtrlRead($hSlider)) ; und den Wert vom Slider in die untere Progressbar schreiben
    EndFunc ;==>_SetProgress

    [/autoit]
  • TreeView-(Un)Checked-Example

    • Oscar
    • 9. Januar 2009 um 20:39

    Danke, für das Lob! :)
    Die rekursiven Funktionen sind vor allem dann sinnvoll, wenn die Anzahl der Items und/oder die "Tiefe" des TreeViews vorher nicht bekannt sind.
    Außerdem war es eine gute Übungsaufgabe für rekursive Funktionen.

    Allerdings bin ich mit der Mausklick-Abfrage noch nicht so recht zufrieden. Muss mal schauen, ob es da noch eine andere Möglichkeit gibt...

  • Hilfe beim Anfang meines Programms ^^

    • Oscar
    • 9. Januar 2009 um 19:25

    Es wäre deutlich leichter das Problem nachvollziehen zu können, wenn Du mal Dein Skript posten würdest. :rolleyes:

  • TreeView-(Un)Checked-Example

    • Oscar
    • 8. Januar 2009 um 23:43

    Bei einem TreeView mit Checkboxen möchte man ja manchmal, dass die Haken auch für die Child-Items mitgesetzt werden.
    Ich habe mal drei rekursive Funktionen geschrieben, die eine solche Funktionalität erreichen:

    - Alle Child-Items des angehakten Items werden ebenfalls angehakt
    - Alle Haken bei übergeordneten Parent-Items werden entfernt, wenn der Haken bei einem Item entfernt wird
    - Überprüfung ob alle Sibling-Items ebenfalls angehakt sind und, wenn zutreffend, das übergeordnete Parent-Item anhaken

    Schaut euch einfach das Beispiel an:

    Spoiler anzeigen
    [autoit]


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

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

    Global $hGui = GUICreate('TreeView-(Un)Checked-Example', 400, 600)
    Global $hTreeView = GUICtrlCreateTreeView(5, 5, 390, 590, BitOR($GUI_SS_DEFAULT_TREEVIEW, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
    Global $hRoot = GUICtrlCreateTreeViewItem('Root', $hTreeView)
    _GUICtrlTreeView_SetBold($hTreeView, $hRoot)
    _GUICtrlTreeView_BeginUpdate($hTreeView)
    For $x = 1 To 3
    $hItem1 = _GUICtrlTreeView_AddChild($hTreeView, GUICtrlGetHandle($hRoot), StringFormat('[%02d] Child 1st Gen.', $x))
    For $y = 1 To 3
    $hItem2 = _GUICtrlTreeView_AddChild($hTreeView, $hItem1, StringFormat('[%02d] Child 2nd Gen.', $y))
    For $z = 1 To 2
    $hItem3 = _GUICtrlTreeView_AddChild($hTreeView, $hItem2, StringFormat('[%02d] Child 3rd Gen.', $z))
    Next
    Next
    Next
    _GUICtrlTreeView_EndUpdate($hTreeView)
    _GUICtrlTreeView_Expand($hTreeView)
    GUISetState()

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

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_PRIMARYDOWN ; (*)
    $aInfo = GUIGetCursorInfo($hGui) ; (*)
    If $aInfo[4] = $hTreeView Then ; (*)
    $aAdjust = ControlGetPos($hGui, '', $hTreeView) ; (*)
    If BitAND(_GUICtrlTreeView_HitTest($hTreeView, $aInfo[0]-$aAdjust[0]-2, $aInfo[1]-$aAdjust[1]-2), 64) Then ; (*)
    $hSelect = _GUICtrlTreeView_GetSelection($hTreeView)
    $checked = _GUICtrlTreeView_GetChecked($hTreeView, $hSelect)
    $hItem = _GUICtrlTreeView_GetFirstChild($hTreeView, $hSelect)
    If $hItem Then _SetChildItemsChecked($hTreeView, $hItem, $checked)
    If $checked Then
    _VerifySiblingItems($hTreeView, $hSelect)
    Else
    _SetParentItemsUnchecked($hTreeView, $hSelect)
    EndIf
    EndIf
    EndIf
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd
    ; (*) = diese Konstruktion ist notwendig, weil man sonst nicht zwischen einem Mausklick
    ; auf den Item-Text und der Checkbox unterscheiden kann

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

    ; Überprüft (rekursiv) ob alle Sibling-Items angehakt sind und setzt, wenn zutreffend, den Haken beim Parent-Item
    Func _VerifySiblingItems($hTreeView, $hItem)
    Local $hTmp, $hSave = $hItem, $iCount = _GUICtrlTreeView_GetSiblingCount($hTreeView, $hItem)
    While True
    $hTmp = _GUICtrlTreeView_GetNextSibling($hTreeView, $hItem)
    If Not $hTmp Then ExitLoop
    $hItem = $hTmp
    WEnd
    Do
    If _GUICtrlTreeView_GetChecked($hTreeView, $hItem) Then $iCount -= 1
    $hItem = _GUICtrlTreeView_GetPrevSibling($hTreeView, $hItem)
    Until Not $hItem
    If Not $iCount Then
    Local $hParent = _GUICtrlTreeView_GetParentHandle($hTreeView, $hSave)
    If $hParent Then
    _GUICtrlTreeView_SetChecked($hTreeView, $hParent)
    _VerifySiblingItems($hTreeView, $hParent)
    EndIf
    EndIf
    EndFunc

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

    ; Setzt (rekursiv) den Haken bei allen Child-Items, wenn der Haken bei einem Item gesetzt wurde
    Func _SetChildItemsChecked($hTreeView, $hItem, $checked)
    Do
    Local $hNewItem = _GUICtrlTreeView_GetFirstChild($hTreeView, $hItem)
    If $hNewItem Then _SetChildItemsChecked($hTreeView, $hNewItem, $checked)
    _GUICtrlTreeView_SetChecked($hTreeView, $hItem, $checked)
    $hItem = _GUICtrlTreeView_GetNextChild($hTreeView, $hItem)
    Until Not $hItem
    EndFunc

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

    ; Entfernt (rekursiv) den Haken bei allen Parents, wenn der Haken von einem Item entfernt wurde
    Func _SetParentItemsUnchecked($hTreeView, $hItem)
    Local $hParent = _GUICtrlTreeView_GetParentHandle($hTreeView, $hItem)
    If $hParent Then _SetParentItemsUnchecked($hTreeView, $hParent)
    _GUICtrlTreeView_SetChecked($hTreeView, $hItem, False)
    EndFunc

    [/autoit]
  • Arbeitzeit Erfassung

    • Oscar
    • 8. Januar 2009 um 22:52

    Die Sortierung auf diese Art funktioniert nur, wenn die Items mit GUICtrlCreateListViewItem erstellt wurden:

    BugFix's Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <GuiConstantsEx.au3>
    #include <GuiListView.au3>

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

    $gui = GUICreate('Test LV-Sort')
    $hListView = GUICtrlCreateListView('Spalte 1|Spalte 2', 10, 10, 300, 200)
    For $i = 1 To 15
    ;~ $index = _GUICtrlListView_AddItem($hListView, Chr(Random(65,90)))
    ;~ _GUICtrlListView_AddSubItem($hListView, $index, Chr(Random(65,90)), 1)
    GUICtrlCreateListViewItem(Chr(Random(65,90)) & '|' & Chr(Random(65,90)), $hListView)
    Next
    GUISetState()

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

    $hLVHandle = GUICtrlGetHandle($hListView)
    _GUICtrlListView_RegisterSortCallBack($hLVHandle) ; damit man das Listview (mit Klick auf die Spaltenüberschrift) sortieren kann

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

    While 1
    Switch GUIGetMsg()
    Case $hListView
    _GUICtrlListView_SortItems($hLVHandle, GUICtrlGetState($hListView)) ; Einträge entsprechend sortieren
    Case $GUI_EVENT_CLOSE
    _GUICtrlListView_UnRegisterSortCallBack($hLVHandle) ; Sortierroutine wieder de-registrieren
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Wenn Du die auskommentierten Zeilen aktivierst und die andere auskommentierst siehst Du den Unterschied.

  • Ausdruck ersetzen

    • Oscar
    • 8. Januar 2009 um 20:02

    Mit StringRegExpReplace geht's auch ohne Includes:

    [autoit]


    $string = 'basepath="M:\Videos">'
    $string = StringRegExpReplace($string, '".*"', '""')
    MsgBox(0, "", $string)

    [/autoit]
  • Immer im Hintergrund

    • Oscar
    • 7. Januar 2009 um 18:06

    Es gäbe auch noch die Möglichkeit zu testen, welche Fenster (ermitteln anhand der Positionen) von Deinem Fenster verdeckt würden und nur die holst Du in den Vordergrund. Das dann in einer Adlib-Funktion. Müßte eigentlich gehen (nicht getestet).

    Edit: Aber wozu soll das eigentlich gut sein?

  • Immer im Hintergrund

    • Oscar
    • 7. Januar 2009 um 17:47

    Indem Du den anderen Fenstern WinSetOnTop zuweist. :D

  • Probleme mit Progress

    • Oscar
    • 6. Januar 2009 um 21:26

    Die DLL ist eine Windows-DLL (liegt im System32-Ordner). Zumindest unter WindowsXP.
    Ob das auch unter Vista funktioniert kann ich nicht sagen. Probier's aus...

  • _GUICtrlTreeView_CreateDirectory (erstellt ein TreeView mit Verzeichnissen +Dateien)

    • Oscar
    • 6. Januar 2009 um 20:19

    Es gibt eine neue Version (siehe Post #1).

  • Probleme mit Progress

    • Oscar
    • 6. Januar 2009 um 19:28

    3 Fragen, eine Antwort: Geht nur mit dem klassischen Style von WindowsXP.

    Edit: Es gab aber mal einen Workaround (AFAIR von progandy):

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Form2", 413, 56, 303, 219)
    DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 0)
    $Progress1 = GUICtrlCreateProgress(3, 3, 406, 49, $PBS_SMOOTH)
    GUICtrlSetColor(-1, 0xFF0000)
    GUICtrlSetBkColor(-1, 0x00FF00)
    DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 7)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $Status = "Plus"
    While 1
    $ProgressRead = GUICtrlRead($Progress1)
    If $Status = "Plus" Then
    GUICtrlSetData($Progress1, $ProgressRead + 1)
    If $ProgressRead = 100 Then $Status = "Minus"
    ElseIf $Status = "Minus" Then
    GUICtrlSetData($Progress1, $ProgressRead - 1)
    If $ProgressRead = 0 Then $Status = "Plus"
    EndIf
    Sleep (15)
    $nMSG = GUIGetMsg()
    Switch $nMSG
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • frage zu Pixel Search

    • Oscar
    • 6. Januar 2009 um 17:25

    FirePanther: Deine Schleife wird nie durchlaufen, weil:

    From highest precedence to lowest:

    NOT
    ^
    * /
    + -
    &
    < > <= >= = <> ==
    AND OR

    Also entweder Klammern benutzen oder "not" weglassen und "<>" statt "=".

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™