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

  • Erfassungsmaske - Springen zwischen den Inputfeldern per Enter-Taste

    • nuts
    • 4. Dezember 2009 um 13:45

    Hey,

    ich habe hier ein Programm bei dem Daten von Hand (Orginal in Papierform, eintippen ist also immer erfoderlich) eingegeben werden.
    Es handelt sich dabei ausschließlich um Zahlen, deshalb wird der Nummernblock verwendet.
    Zwischen den Inputfeldern soll mit der Num-Enter Taste gewechselt werden (nicht verhandelbar, da angelehnt an eine andere Software).

    Jedes Input soll nach der Eingabe geprüft werden, manche Inputs wieder geleert werden manche nicht.

    Hier das Beispiel zum Ausprobieren:

    Spoiler anzeigen
    [autoit]


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

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 438, 192, 132)
    $ListView1 = GUICtrlCreateListView("Input1|Input2|Input3|Input4", 16, 16, 601, 265)
    Global $hLVHandle = GUICtrlGetHandle($ListView1)
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Input1", 130, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 1, "Input2", 130, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 2, "Input3", 130, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 3, "Input4", 130, 0)
    $Input1 = GUICtrlCreateInput("", 16, 320, 129, 24)
    $Input2 = GUICtrlCreateInput("", 168, 320, 129, 24)
    $Input3 = GUICtrlCreateInput("", 328, 320, 137, 24)
    $Input4 = GUICtrlCreateInput("", 496, 320, 121, 24)

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

    $button = GUICtrlCreateButton("ADD", 250, 350, 100, 50)

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

    Global $hCM = GUICtrlCreateContextMenu($ListView1) ; ein Kontextmenü für das Listview erstellen
    Global $hCMDel = GUICtrlCreateMenuItem("Markierte Einträge löschen", $hCM) ; der 3. Kontextmenüeint

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

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

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button
    _NewItem()
    Case $hCMDel
    _GUICtrlListView_DeleteItemsSelected($hLVHandle)
    EndSwitch
    WEnd

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

    Func _TestInput1()
    Local $read = GUICtrlRead($Input1)
    If StringLen($read) > 1 Then
    MsgBox(1, "", "Ungültige Eingabe")
    GUICtrlSetState($Input1, $GUI_FOCUS)
    Else
    GUICtrlSetData($Input1, "")
    GUICtrlSetState($Input2, $GUI_FOCUS)
    EndIf
    EndFunc ;==>_TestInput1

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

    Func _TestInput2()
    Local $read = GUICtrlRead($Input2)
    If StringLen($read) > 2 Then
    MsgBox(1, "", "Ungültige Eingabe")
    GUICtrlSetState($Input2, $GUI_FOCUS)
    Else
    GUICtrlSetData($Input2, "")
    GUICtrlSetState($Input3, $GUI_FOCUS)
    EndIf
    EndFunc ;==>_TestInput2

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

    Func _TestInput3()
    Local $read = GUICtrlRead($Input3)
    If StringLen($read) > 3 Then
    MsgBox(1, "", "Ungültige Eingabe")
    GUICtrlSetState($Input3, $GUI_FOCUS)
    Else
    GUICtrlSetState($Input4, $GUI_FOCUS)
    EndIf
    EndFunc ;==>_TestInput3

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

    Func _TestInput4()
    _NewItem()
    GUICtrlSetState($Input1, $GUI_FOCUS)
    EndFunc ;==>_TestInput4

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

    Func _NewItem() ; Funktion zum auslesen der Eingabefelder (Neuer Eintrag bzw. Eintrag bearbeiten)
    GUICtrlCreateListViewItem(GUICtrlRead($Input1) & "|" & GUICtrlRead($Input2) & "|" & GUICtrlRead($Input3) & "|" & GUICtrlRead($Input4), $ListView1)
    EndFunc ;==>_NewItem

    [/autoit]

    Möglichkeiten gib es viele, ich möchte hier jetzt mal keine eigenen Versuche posten um den kreativen Denkprozess nicht zu verhindern. Bis jetzt hatte jede Variante so ihre Nachteile und daher möchte ich noch weitere Meinungen zu diesem Problem einholen.
    Also, wie würdet ihr es machen?
    Danke schonmal für die Anregungen.

    Gruß Nuts

  • Welches Fenster ist im Vordergrund ?

    • nuts
    • 2. Dezember 2009 um 18:52

    Die Abfrage erfolgt für jedes Fenster in der Liste (Winlist) und gibt bei einem Treffer die msgbox aus.
    Der Vorgang wird endlos wiederholt, da du eine Endlosschleife drumrumgebastelt hast (While 1 .... Wend).

  • Autoit Frage

    • nuts
    • 30. November 2009 um 20:00
    Zitat von Andy

    Die einzige Alternative wäre ein "richtiger" Compiler, welcher direkt den AutoIt-Code in Maschinensprache transferiert. Ob dieses Projekt irgendwann angegangen wird, wage ich zu bezweifeln.


    Genau den Punkt verstehe ich nicht.
    Schließlich gibt es diesen Übersetzer ja schon (der Interpreter).
    Wieso muss zwingend zur Laufzeit interpretiert werden? Wieso nicht (einmalig) davor?

  • Autoit Frage

    • nuts
    • 30. November 2009 um 17:19

    Ok wenn wir schon dabei sind. Diesen Punkt verstehe ich nicht so richtig.
    Das Autoit Skript muss ja in eine Form gebracht werden, die der Prozessor lesen kann.
    Dies macht der Interpreter, d.h. der output vom Interpreter liegt schon in einer "anderen Sprache" vor.

    Wieso greift man diesen output nicht ab? Autoit ist doch deshalb so "langsam" weil das Skript zur Laufzeit interpretiert werden muss.

  • Autoit Frage

    • nuts
    • 30. November 2009 um 15:39

    "Richtig" compiliert wird ja bei Autoit nicht.
    Das Skript muss durch einen Interpreter, der das Skript in C++ übersetzt.

    Dieser wird bei der .exe mitgeliefert und somit kann das Skript auch auf Computern ohne Autoit-Installation genutzt werden.

  • Eintrag in Listfeld markieren

    • nuts
    • 30. November 2009 um 15:36
    [autoit]


    ;in einer ListView
    _GUICtrlListView_SetHotItem()

    [/autoit]


    Diese Funktion ist für was anderes.

    [autoit]


    _GUICtrlListView_SetItemSelected

    [/autoit]


    Führt fürs Listview zum Ziel.

  • Listfeld füllen mit Wert von Array

    • nuts
    • 30. November 2009 um 14:15

    Ubound bestimmt die größe des Arrays.
    Arrays fangen bei 0 an und darum muss das Ergebnis von Ubound um 1 verringert werden.

    For $i = 1 to UBound ($array1) - 1
    ;usw
    Next
    Geht jeden Eintrag im Array durch und fügt ihn zu deiner Listbox hinzu.

    edit \
    _FileReadToArray liefert in $array[0] die Anzahl der Items, somit wäre in diesem Fall auch $array[0] verwendbar.
    Das ist aber nicht bei allen Arrays so (logisch 8) ) und somit gehts dann über Ubound.

  • Kontextmenü bei ListView

    • nuts
    • 29. November 2009 um 21:37

    Suche mal nach dem Listview-Datenbank Beispiel hier im Forum. Dort gibts es Kontextmenüs beim Listview.
    Sollte eigentlich selbst erklärend sein.

    Bei deinem Skript seh ich gar kein Listview? ?(

  • Unterschied zwischen Switch_EndSwitch und Select_EndSelect

    • nuts
    • 29. November 2009 um 17:23

    Switch entspricht Select true (auf die Varibale bezogen).
    Das macht Switch auch schneller!
    Allerdings kann man nicht jede Abfrage als Switch ... Ednswitch ausdrücken, es funktioniert aber bei sehr vielen.

  • DeskLock

    • nuts
    • 28. November 2009 um 12:14

    Wäre das nicht ein gutes Thema für einen Wettbewerb?

  • Individuelle Form als Button verwenden, z.B. Bild

    • nuts
    • 27. November 2009 um 15:09

    Klar ist das möglich. GUICtrlCreatePic reagiert auch auf Mausklicks.

  • Zeichenkette auseinander nehmen und Teile davon wieder zusammensetzen

    • nuts
    • 27. November 2009 um 15:03

    Dazu gibts viele Möglichkeiten, ich mach mal den anfang für den letzten Schritt:

    [autoit]


    $string = "Max Mustermann03/OU=xxx/OU=yyy/O=zzz"
    $split = StringSplit($string, "/")
    global $return = $split[1]
    for $i=2 to $split[0]
    $trim =StringTrimLeft($split[$i], StringInStr($split[$i], "="))
    $return &= "/"& $trim
    next

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

    MsgBox(1, "", $return)

    [/autoit]
  • DeskLock

    • nuts
    • 27. November 2009 um 14:44

    Stimmt das? :wacko:
    Hm sonst noch Vorschläge?

  • DeskLock

    • nuts
    • 27. November 2009 um 13:55

    Aber will man das? Also immer den Autorun abschalten?
    Nur zu beginng des Skripts die Reg. zu ändern funktioniert auch nur als Admin.

  • Shutdown überprüfen?

    • nuts
    • 27. November 2009 um 13:51

    Wer löst den Ruhezustand aus? Der DVBViewer? Oder wie?

    Sollte der Ruhezustand extern ausgelöst werden muss man natürlich schon durchgehend überwachen.
    Nur wer führt ungefragt den Ruhezustand aus? Beim User kann man die Konfig. ja beeinflussen, d.h. anstatt direkt den Ruhezustand auszulösen wird eben ein Autoit Skript aufgerufen.

    Edit \ Hier mal einen kleines Prog. das ich für den DVBViewer verwende.
    Angehängt die benötigte .txt Datei.

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=..\WakeUP-test\Windows-Stand-By.ico
    #AutoIt3Wrapper_UseUpx=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <Date.au3>
    #include <File.au3>
    #include <Misc.au3>
    #include<string.au3>
    #include <Guilistview.au3>

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

    Opt('WinTitleMatchMode', 3)

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

    Global Const $TITLE_RECEIVER = 'DVBV_Tools'
    Global $NewDataAvailable = False, $avData[1]
    Global $DVBViewer, $iCounter
    Global $ini = @AppDataCommonDir & "\DVB-Tools.ini"
    Global $log = @AppDataCommonDir & "\DVB-Tools.log"
    Global $timerstate = False
    Global $path, $xml

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

    Global $setupgui, $ListView, $hlistview, $Bselect, $Binstall

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

    Global $WM_POWERBROADCAST = 536
    Global $PBT_APMRESUMESUSPEND = 0x0007
    Global $install = @TempDir & "\DVB-Tools.ini"
    FileInstall('C:\Dokumente und Einstellungen\Nussman\Eigene Dateien\autoitskripte\HTPC\dvbviewer\allinone\dvb-tools.ini', $install)

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

    If WinExists($TITLE_RECEIVER) Then
    If $CMDLINE[0] = 0 Then Exit
    _SendData(WinGetHandle($TITLE_RECEIVER), $CMDLINERAW)
    Exit
    Else
    If _Singleton($TITLE_RECEIVER, 1) = 0 Then Exit
    If $CMDLINE[0] > 0 Then
    _CreateIni()
    Switch $CMDLINE[1]
    Case "-devcon"
    _Devcon()
    Exit
    Case "-display"
    exit
    Case "-end"
    _End()
    Case "-sleep"
    _Sleeptimer()
    Case "-notnagel"
    exit
    Case "-setup"
    _Setup()
    case "-konfig"
    _Konfig()
    EndSwitch
    EndIf
    EndIf
    Exit

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

    Func _Receiver()
    $timerstate = True
    AdlibEnable('_Countdown', 60000)
    GUICreate($TITLE_RECEIVER)
    GUIRegisterMsg($WM_COPYDATA, '_WM_COPYDATA')
    While 1
    If $iCounter <= 0 Then
    AdlibDisable()
    _Beenden()
    Exit
    EndIf
    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 "sleep"
    _STOPTimer()
    Case "devcon"
    _Devcon()
    Case "end"
    _End()
    Case "display"
    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 ;==>_ParseCMDLine

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

    Func _SendData($hWnd, $sData)
    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] [autoit][/autoit] [autoit]

    Func _Connect()
    $DVBViewer = ObjGet("", "DVBViewerServer.DVBViewer") ;Verbindung zum DVBViewer herstellen
    If $DVBViewer = 0 Then
    MsgBox(1, "", "Keine Verbindung zum DVBViewer möglich")
    Exit
    EndIf
    EndFunc ;==>_Connect

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

    Func _Devcon()
    Local $skey
    If Not FileExists(@ScriptDir & "\devcon\i386\devcon.exe") Then
    _FileWriteLog($log, "Devcon.exe nicht gefunden")
    _CheckSleeptimter()
    Return
    EndIf
    _Connect()
    Local $areadini = IniReadSection($ini, "Devcon")
    If @error Then
    _FileWriteLog($log, "Ini / Sektion 'Devcon' leer oder nicht gefunden")
    Local $areadini[1][1]
    $areadini[0][0] = 0
    $skey &= "Zurück"
    Else
    For $i = 1 To $areadini[0][0]
    $skey &= $areadini[$i][0] & ", "
    Next
    $skey &= "Zurück"
    EndIf
    Local $osd = $DVBViewer.OSD.showpopup("Devcon", $skey, True) ;OSD um abzufragen welche Hardware neu gesartet werden soll
    Switch $osd
    Case $areadini[0][0]
    $DVBViewer.SendCommand(82) ;osd zurück
    _CheckSleeptimter()
    Case Else
    $DVBViewer.SendCommand(16383) ;schließe graph
    _Refresh($areadini[$osd + 1][1])
    $DVBViewer.SendCommand(63) ;last channel
    EndSwitch
    EndFunc ;==>_Devcon

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

    Func _Refresh($ID) ;führt Devcon mit der übergebenen ID aus
    $ID = "@" & $ID
    RunWait(@ScriptDir & "\devcon\i386\devcon.exe" & ' disable ' & $ID, "", @SW_HIDE) ; deaktivieren
    Sleep(2000) ;2 Sekunden warten
    RunWait(@ScriptDir & "\devcon\i386\devcon.exe" & ' enable ' & $ID, "", @SW_HIDE) ; aktivieren
    EndFunc ;==>_Refresh

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

    Func _CheckSleeptimter() ;Prüft ob der Sleeptimer aktiv ist
    If $timerstate = False Then
    Exit
    EndIf
    EndFunc ;==>_CheckSleeptimter

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

    Func _Sleeptimer()
    _Connect() ;Verbindung zum DVBViewer herstellen
    local $showosd = $DVBViewer.OSD.showpopup("Sleeptimer", " 30min, 60min, 90min, 120min, 180min, Zurück", True) ;OSD um abzufragen wie lange der Sleeptimer laufen soll
    Switch $showosd
    Case 0
    $iCounter = 30
    _Receiver()
    Case 1
    $iCounter = 60
    _Receiver()
    Case 2
    $iCounter = 90
    _Receiver()
    Case 3
    $iCounter = 120
    _Receiver()
    Case 4
    $iCounter = 180
    _Receiver()
    Case 5
    $DVBViewer.SendCommand(82) ;osd zurück
    Exit
    EndSwitch
    EndFunc ;==>_Sleeptimer

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

    Func _STOPTimer()
    Local $stop = $DVBViewer.OSD.showyesno("Sleeptimer", "Restlaufzeit:" & $iCounter, "Countdown abbrechen?", "", True) ;OSD Fenster mit der verbleibenden Zeit wird und einer Abfrage wird angezeigt
    Switch $stop
    Case True
    Exit
    EndSwitch
    EndFunc ;==>_STOPTimer

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

    Func _Countdown()
    $iCounter -= 1
    EndFunc ;==>_Countdown

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

    Func _Beenden() ;Sleeptimer
    Local $aktion = IniRead($ini, "Sleeptimer", "Aktion", "32")
    If @error Then
    _FileWriteLog($log, "Sektion 'Sleeptimer' oder Key 'Aktion' nicht einlesbar! -> Standby verwendet!")
    EndIf
    Switch $aktion
    Case 1
    _Shutdown()
    Case 2
    _Reboot()
    Case 32
    _Standby()
    Case 64
    _Hibernate()
    EndSwitch
    Exit
    EndFunc ;==>_Beenden

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

    Func _End()
    Local $end
    _Connect()
    Local $endGUI = GUICreate("", 1, 1, 1, 1)
    GUIRegisterMsg($WM_POWERBROADCAST, "_Wakeup")
    GUISetState(@SW_HIDE, $endGUI)

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

    $end = $DVBViewer.OSD.showpopup("Erweitertes Beenden", " Ausschalten, Standby, Ruhemodus, PC neu Starten, Zurück", True)
    Switch $end
    Case 0
    _Shutdown()
    Exit
    Case 1
    _Standby()
    Case 2
    _Hibernate()
    Case 3
    _Reboot()
    Exit
    Case 4
    $DVBViewer.SendCommand(82) ;osd zurück
    _CheckSleeptimter()
    Return
    EndSwitch
    While 1
    $GUIMsg = GUIGetMsg()
    Switch $GUIMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

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

    Exit
    EndFunc ;==>_End

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

    Func _Wakeup($hWnd, $Msg, $wParam, $lParam) ;für die aktion nach dem standby/ruhezustand
    local $Lmsg
    Switch $wParam
    Case $PBT_APMRESUMESUSPEND
    Sleep(IniRead($ini, "Sleep", "Nach", "")) ;Bei Problemen in der Ini eine Wartezeit eintragen
    ShellExecute(IniRead($ini, "WakeUp", "Run", ""), IniRead($ini, "WakeUp", "Parameter", ""))
    Exit
    EndSwitch
    EndFunc ;==>_Wakeup

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

    Func _CloseDVBViewer()
    $DVBViewer.SendCommand(12326) ;dvbviewer beenden
    ProcessWaitClose("dvbviewer.exe", 10) ; warten bis der dvbviewer beendet ist oder nach 10 sekunden weiter im skript
    ProcessWaitClose("Scheduler.exe", 10) ;warten bis der scheduler beendet ist oder nach 10 sekunden weiter im skript

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

    If WinExists("DVB Viewer") Then ;DvbViewer killen wenns über den Com-Befehl nicht geklappt hat
    WinClose("DVB Viewer")
    Sleep(3000)
    EndIf
    If WinExists("DVB Viewer") Then
    WinKill("DVB Viewer")
    Sleep(3000)
    EndIf
    If ProcessExists("dvbviewer.exe") Then
    ProcessClose("dvbviewer.exe")
    EndIf
    EndFunc ;==>_CloseDVBViewer

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

    Func _SendCommand()
    $iactions = IniReadSection($ini, "actions")
    If @error Then
    MsgBox(4096, "", "Ini oder Section nicht gefunden")
    Else
    For $i = 1 To $iactions[0][0] ;Schleife um alle Einträge in der .ini durchzugehen
    $DVBViewer.SendCommand($iactions[$i][1])
    Sleep(100) ; gibt dem Dvbviewer Zeit zum Atmen -> kann man auch ohne testen!
    Next
    EndIf
    EndFunc ;==>_SendCommand

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

    Func _Shutdown()
    Local $split
    If IniRead($ini, "Einstellungen", "Server", 0) <> 1 Then _CheckRecording()
    Local $aini = IniReadSection($ini, "Shutdown")
    If @error Then MsgBox(4096, "", "Ini oder Section nicht gefunden")
    If $aini[1][1] = 1 Then _SendCommand() ; _Sendcommand aufrufen
    _CloseDVBViewer() ;DVB Viewer beenden
    Switch $aini[2][1] ;Modus Abfrage
    Case 0 ;Shutdown Aktion
    Shutdown(1)
    Case 1 ;Externes Programm aufrufen und Skript beenden
    ShellExecute($aini[3][1], $aini[4][1])
    Exit
    Case 2 ;Externes Programm ausführen, drauf warten und anschließend die Shutdown Aktion durchführen
    ShellExecutewait($aini[3][1], $aini[4][1])
    Shutdown(1)
    EndSwitch
    EndFunc ;==>_Shutdown

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

    Func _Standby()
    Local $split
    If IniRead($ini, "Einstellungen", "Server", 0) <> 1 Then _CheckRecording()
    Local $aini = IniReadSection($ini, "Standby")
    If @error Then MsgBox(4096, "", "Ini oder Section nicht gefunden")
    If $aini[1][1] = 1 Then _SendCommand()
    _CloseDVBViewer() ;DVB Viewer beenden
    Sleep(IniRead($ini, "Sleep", "Vor", "")) ;;Bei Problemen nach dem Standby / Ruhezustand in der Ini eine Wartezeit eintragen
    Switch $aini[2][1] ;Modus Abfrage
    Case 0 ;Standby Aktion
    Shutdown(32)
    Case 1 ;Externes Programm aufrufen und Skript beenden
    ShellExecute($aini[3][1], $aini[4][1])
    Exit
    Case 2 ;Externes Programm ausführen, drauf warten und anschließend die Standby Aktion durchführen
    ShellExecuteWait($aini[3][1], $aini[4][1])
    Shutdown(32)
    EndSwitch
    EndFunc ;==>_Standby

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

    Func _Hibernate()
    Local $split
    If IniRead($ini, "Einstellungen", "Server", 0) <> 1 Then _CheckRecording()
    Local $aini = IniReadSection($ini, "Hibernate")
    If @error Then MsgBox(4096, "", "Ini oder Section nicht gefunden")
    If $aini[1][1] = 1 Then _SendCommand()
    Sleep(IniRead($ini, "Sleep", "Vor", "")) ;;Bei Problemen nach dem Standby / Ruhezustand in der Ini eine Wartezeit eintragen
    _CloseDVBViewer() ;DVB Viewer beenden
    Switch $aini[2][1] ;Modus Abfrage
    Case 0 ;Shutdown Aktion
    Shutdown(64)
    Case 1 ;Externes Programm aufrufen und Skript beenden
    ShellExecute($aini[3][1], $aini[4][1])
    Exit
    Case 2 ;Externes Programm ausführen, drauf warten und anschließend die Shutdown Aktion durchführen
    ShellExecutewait($aini[3][1], $aini[4][1])
    Shutdown(64)
    EndSwitch
    EndFunc ;==>_Hibernate

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

    Func _Reboot()
    Local $split
    If IniRead($ini, "Einstellungen", "Server", 0) <> 1 Then _CheckRecording()
    Local $aini = IniReadSection($ini, "Reboot")
    If @error Then MsgBox(4096, "", "Ini oder Section nicht gefunden")
    If $aini[1][1] = 1 Then _SendCommand()
    _CloseDVBViewer() ;DVB Viewer beenden
    Switch $aini[2][1] ;Modus Abfrage
    Case 0 ;Shutdown Aktion
    Shutdown(2)
    Case 1 ;Externes Programm aufrufen und Skript beenden
    ShellExecute($aini[3][1], $aini[4][1])
    Exit
    Case 2 ;Externes Programm ausführen, drauf warten und anschließend die Shutdown Aktion durchführen
    ShellExecute($aini[3][1], $aini[4][1])
    Shutdown(2)
    EndSwitch
    EndFunc ;==>_Reboot

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

    Func _CheckRecording() ;Prüft eine Aufnahme läuft oder ob zeitnah Aufnahmen (15min) anstehen
    Dim $dummy = 0
    Local $checkrecording = $DVBViewer.TimerManager.Recording()
    Switch $checkrecording
    Case True
    $dummy = 1
    Case Else
    Local $checktimer = $DVBViewer.TimerManager.NextRecordingTime()
    MsgBox(1, "", $checktimer)
    If $checktimer <> 18991230000000 And _DateTimeCheck($checktimer) = 1 Then $dummy = 2
    EndSwitch
    Switch $dummy
    Case 1
    Local $yesno1 = $DVBViewer.OSD.showyesno("WakeUp", "Achtung - Aufnahme läuft!", "Aktion trotzdem ausführen?", "", False)
    If $yesno1 = False Then _CheckSleeptimter()
    Case 2
    Local $yesno2 = $DVBViewer.OSD.showyesno("WakeUp", "Achtung - Aufnahme startet in weniger als 15 Minuten!", "Aktion trotzdem ausführen?", "", False)
    If $yesno2 = False Then _CheckSleeptimter()
    EndSwitch
    EndFunc ;==>_CheckRecording

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

    Func _DateTimeCheck($data)
    Local $formatdata = StringRegExpReplace($data, "(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})", "\1/\2/\3 \4:\5:\6")
    Local $current = @YEAR & "/" & @MON & "/" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC
    If _DateDiff($current, $formatdata, "n") < 16 Then Return 1
    EndFunc ;==>_DateTimeCheck

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

    Func _CreateIni()
    Local $fopen, $fwrite, $fread
    If Not FileExists($ini) Then
    _FileCreate($ini)
    $fopen = FileOpen($install, 0)
    $fread = FileRead($fopen)
    FileClose($fopen)
    FileDelete($install)
    $fopen = FileOpen($ini, 2)
    FileWrite($fopen, $fread)
    FileClose($fopen)
    EndIf
    EndFunc ;==>_CreateIni

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

    Func _Setup()
    If ProcessExists("dvbviewer.exe") Then
    MsgBox(0, "DVBV_Tools-Setup", "DVBViewer gestartet" & @CRLF & "Setup nicht möglich - Bitte den DVBViewer beenden")
    Exit
    EndIf
    local $select
    $path = IniRead($ini, "Einstellungen", "DVBVSetupfolder", "")
    $setupgui = GUICreate("Setup DVBV_Tools", 600, 270, Default, Default)
    $ListView = GUICtrlCreateListView("Modul", 5, 64, 210, 126, BitOR($LVS_REPORT, $LVS_NOCOLUMNHEADER, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS), BitOR($WS_EX_CLIENTEDGE, $LVS_EX_CHECKBOXES))
    $hlistview = GUICtrlGetHandle($ListView)
    _GUICtrlListView_SetColumn($hlistview, 0, "", 200, 0)
    GUICtrlCreateListViewItem("Erweitertes Beenden", $ListView)
    GUICtrlCreateListViewItem("Sleeptimer", $ListView)
    GUICtrlCreateListViewItem("Devcon", $ListView)
    GUICtrlCreateListViewItem("Display", $ListView)
    $ipath = GUICtrlCreateInput("Input1", 5, 16, 565, 21,$ES_READONLY)
    GUICtrlSetData($ipath, $path)
    $Bselect = GUICtrlCreateButton("...", 570, 16, 25, 21, 0)
    $Binstall = GUICtrlCreateButton(">>Installieren", 450, 220, 140, 40, 0)
    $einfo = GUICtrlCreateEdit('Erweitertes Beenden: Beenden mit verbesserter Kontrolle' & @CRLF & @CRLF & 'Sleeptimer: Alternativer Sleeptimer' & @CRLF & @CRLF &'Devcon: Devcon Aktionen aus dem DVB-Viewer ausführen' & @CRLF & @CRLF &'Display: Auflösung / Wiederholungsrate aus dem DVB-Viewer ändern' & @CRLF & @CRLF & 'Mehr Infos s. Readme',230, 64, 360, 126, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN))

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Bselect
    $select = FileSelectFolder("Setupverzeichnis des DVBViewer auswählen", "C:\")
    if $select <> "" then
    $path=$Select
    IniWrite($ini, "Einstellungen", "DVBVSetupfolder", $path)
    GUICtrlSetData($ipath, $path)
    endif
    Case $Binstall
    _Install()
    EndSwitch
    WEnd
    EndFunc ;==>_Setup

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

    Func _Install()
    if not _Backupwindowdef() then Return
    If _GUICtrlListView_GetItemChecked($hlistview, 0) Then _InstallEnd()
    If _GUICtrlListView_GetItemChecked($hlistview, 1) Then _InstallSleep()
    If _GUICtrlListView_GetItemChecked($hlistview, 2) Then _InstallDevcon()
    If _GUICtrlListView_GetItemChecked($hlistview, 3) Then _InstallDisplay()
    MsgBox(0, "Setup DVBV_Tools", "Setup abgeschlossen")
    Exit
    EndFunc ;==>_Install

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

    Func _Backupwindowdef()
    $xml = $path & "\windowdef.xml"
    Local $des = @ScriptDir & "\Backup\windowsdef_backup.xml"
    If Not FileExists($xml) Then
    Local $Lmsg = $xml &" nicht gefunden"
    _FileWriteLog($log, $Lmsg)
    Return false
    Else
    If not FileExists($des) then FileCopy($xml, $des,8)
    EndIf
    Return true
    EndFunc ;==>_Backupwindowdef

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

    Func _InstallEnd()
    Local $open = FileOpen($xml, 0)
    Local $read = FileRead($xml)
    FileClose($open)
    Local $find = StringInStr($read, "</Windows>")

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

    Local $add
    $add &= @TAB & '<Window Name="DVBV_Tools" Text="Erweitertes Beenden" ID="-3" Parent="0">' & @CRLF
    $add &= @TAB & @TAB & '<Image></Image>' & @CRLF
    $add &= @TAB & @TAB & '<Application>' & @ScriptFullPath & '</Application>' & @CRLF
    $add &= @TAB & @TAB & '<Arguments>-end</Arguments>' & @CRLF
    $add &= @TAB & @TAB & '<Systemwin>0</Systemwin>' & @CRLF
    $add &= @TAB & '</Window>)' & @CRLF
    Local $send = _StringInsert($read, $add, $find - 1)
    $open = FileOpen($xml, 2)
    FileWrite($open, $send)
    FileClose($open)
    EndFunc ;==>_InstallEnd

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

    Func _InstallSleep()
    Local $open = FileOpen($xml, 0)
    Local $read = FileRead($xml)
    FileClose($open)
    Local $find = StringInStr($read, "</Windows>")

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

    Local $add
    $add &= @TAB & '<Window Name="DVBV_Tools" Text="Sleeptimer" ID="-3" Parent="0">' & @CRLF
    $add &= @TAB & @TAB & '<Image></Image>' & @CRLF
    $add &= @TAB & @TAB & '<Application>' & @ScriptFullPath & '</Application>' & @CRLF
    $add &= @TAB & @TAB & '<Arguments>-sleep</Arguments>' & @CRLF
    $add &= @TAB & @TAB & '<Systemwin>0</Systemwin>' & @CRLF
    $add &= @TAB & '</Window>)' & @CRLF
    Local $send = _StringInsert($read, $add, $find - 1)
    $open = FileOpen($xml, 2)
    FileWrite($open, $send)
    FileClose($open)
    EndFunc ;==>_InstallSleep

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

    Func _InstallDevcon()

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

    Local $open = FileOpen($xml, 0)
    Local $read = FileRead($xml)
    FileClose($open)
    Local $find = StringInStr($read, "</Windows>")

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

    Local $add
    $add &= @TAB & '<Window Name="DVBV_Tools" Text="Devcon" ID="-3" Parent="0">' & @CRLF
    $add &= @TAB & @TAB & '<Image></Image>' & @CRLF
    $add &= @TAB & @TAB & '<Application>' & @ScriptFullPath & '</Application>' & @CRLF
    $add &= @TAB & @TAB & '<Arguments>-devcon</Arguments>' & @CRLF
    $add &= @TAB & @TAB & '<Systemwin>0</Systemwin>' & @CRLF
    $add &= @TAB & '</Window>)' & @CRLF
    Local $send = _StringInsert($read, $add, $find - 1)
    $open = FileOpen($xml, 2)
    FileWrite($open, $send)
    FileClose($open)
    EndFunc ;==>_InstallDevcon

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

    Func _InstallDisplay()
    Local $open = FileOpen($xml, 0)
    Local $read = FileRead($xml)
    FileClose($open)
    Local $find = StringInStr($read, "</Windows>")

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

    Local $add
    $add &= @TAB & '<Window Name="DVBV_Tools" Text="Display" ID="-3" Parent="0">' & @CRLF
    $add &= @TAB & @TAB & '<Image></Image>' & @CRLF
    $add &= @TAB & @TAB & '<Application>' & @ScriptFullPath & '</Application>' & @CRLF
    $add &= @TAB & @TAB & '<Arguments>-display</Arguments>' & @CRLF
    $add &= @TAB & @TAB & '<Systemwin>0</Systemwin>' & @CRLF
    $add &= @TAB & '</Window>)' & @CRLF
    Local $send = _StringInsert($read, $add, $find - 1)
    $open = FileOpen($xml, 2)
    FileWrite($open, $send)
    FileClose($open)
    EndFunc ;==>_InstallDisplay

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

    Func _Konfig()
    ShellExecute($ini)
    Exit
    EndFunc

    [/autoit]


    Ist jetzt für den Einsatz ohne eigenes Gebastel noch nicht ganz ausgereift, aber vielleicht kannste dir paar interessante Sachen abkucken.

    Dateien

    dvb-tools.txt 564 Byte – 260 Downloads
  • Shutdown überprüfen?

    • nuts
    • 27. November 2009 um 13:12

    Wenn dein Skript immer über das System wacht läuft es quasi durchgehend (vermutlich wird der PC gar nicht/selten heruntergefahren um das Aufwecken per Fernbedienung zu ermöglichen?).
    Und ein Autoitscript 24/7 mitlaufen zu lassen? Naja ich weiss nicht ...

    Es gibt ein besseres Konzept: Man bastelt ein kleines Programm, dass vom DVBViewer gestartet wird und die gewünschten Befehle ausführt. Auch das "Erweiterte Beenden" Menü kann man per Autoit nachbauen und mit eigenen Befehlen füllen.
    Dazu hab ich ne Menge Bsp. zuhause, werde heute abend mal eins posten.

    P.S. in deinem Skript fehlt vermutlich nur

    [autoit]

    #include<GUIConstantsEx.au3>

    [/autoit]
  • DeskLock

    • nuts
    • 27. November 2009 um 12:33

    Wie wäre es wenn man das Überwachungsscript zur Laufzeit mit einem Random-Namen compiliert?

    Irgendwie muss doch ein sicherer Desktoplock möglich sein. ?(

  • Wie sollen AutoIt Scripte untereinander kommunizieren?

    • nuts
    • 27. November 2009 um 12:19

    Die Messagehandler.au3 arbeitet auch mit WM_Copydata.
    Das funtkioniert eigentlich sehr gut.

    CoProc.au3 kann ich nicht einschätzen.

  • Shutdown überprüfen?

    • nuts
    • 27. November 2009 um 09:36

    Ah mit dem DVBViewer kenn ich mich auch gut aus :)
    Was willst du denn genau erreichen? Den DVBViewer vor dem Ruhezustand ordnungsgemäß schließen?

  • Lottozahlen vergleichen

    • nuts
    • 26. November 2009 um 20:57

    Wie sieht denn deine Lotto.txt aus?
    Am einfachsten wäre es du befüllst mit den Zahlen der lotto.txt ein Array und noch ein Array mit deinen eigenen Zahlen.

    Diese Arrays werden dann auf ihre Schnittmenge untersucht (gibts ne dazu UDF hier im Forum)

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™