Problem mit AutoIt

  • Hallo Gemeinde,

    unser Systemhaus hat mir nach einem Datenbankabsturtz zum AutoIt Programm geraten. Das Programm ist Super. Leider habe ich zwei kleine Probleme.

    Erstes Problem ==> Das Programm läuft auf einem Server. Wenn der Server nicht geperrt ist laüft es ohne Problem durch. Wenn der Server gesperrt ist dann startet das Programm und nach einer weile verreckt es, so das ich es nur über strg+alt+ent lösen kann. Hat wer ne Idee woran es liedgen kann?
    (laüft mit der Version 2)


    Zweites Problem ==> Ich habe das Scrpit nach au3 konvertiert. Jetzt startet es und bleibt stehen. Es trägt nicht den Namen in die entsprechende Spalte ein. Gibt es hier ein Tool um Tastenbewegungen aufzuzeichen?

    Hier das Script

    Spoiler anzeigen

    ; V2.64 to V3.0.100 (Version 1.0.6)
    ; Converted with AutoItV2toV3 [Version 1.0.6]
    ; (C) Copyright 2004 J-Paul Mesnage.

    ; Prologue ; should be renamed (?) and called somewhere if you are converting an include file
    __init()
    ; End Prologue

    ;runwait,%comspec% /C del "t:\\adtg.fbk"
    ;Sleep,10000
    ;runwait,%comspec% /C del "t:\\adtg2.fbk"
    ;Sleep,10000
    Run ( 'C:\Programme\Microsoft Business Solutions-Navision\Client\fin.exe' )
    Sleep ( 1000 )
    WinWaitActive ( 'Anmelden' )
    Send ( 'thomasb{TAB}123{ENTER}{ENTER}' )
    Send ( '!xs' ) ;hier bleibt es stehen
    Send ( 'ADTG tägl.Sicherung{TAB}c:\adtg.fbk{ENTER}{ENTER}' )
    WinWaitActive ( '', 'wurde erfolgreich beendet' )
    Sleep ( 5000 )
    Send ( '{ENTER}' )
    Sleep ( 5000 )
    Send ( '!{F4}' )
    Exit

    ; Epilogue Extra Functions needed for Compatibility execution
    ; take care of possible redefinition if you are converting an include file
    ;
    func __init () ; to define global variables needed
    endfunc
    ; End Epilogue

    MFg Thomas B
    Rathenow :help:

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

  • Hallo,

    der Assistent ist ja nur es wird nichts eingetragen. Unter AutoIt2 geht es ja.
    Woran kannes liegen?

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

  • ^^
    Das Tool findest Du in dem Installationsverzeichnis von Autoit und heißt "Au3Info.exe"

    Wenn Du die ControlID herausbekommst, kannst Du die Felder gezielt ansprechen und brauchst kein send mehr ;) . Das ist weniger Fehleranfällig.

    Einmal editiert, zuletzt von jonk (8. Oktober 2006 um 14:32)

  • @th.meger

    was meinst du mit dein erstes Script kann weg. es ist das selbe wie unter zwei. Wie gesagt es starte ja un d schläft es ein.
    Ich würde es gerne anderst machen nur weis ich leider noch nicht wie. Ich bin vööööööölig neu auf diesem gebiet.

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

    • Offizieller Beitrag

    HI,

    dein erster SLEEP! ist unnötig.

    Versuch mal dies anzupassen mit dem Window Info Tool.

    [autoit]

    Run('C:\Programme\Microsoft Business Solutions-Navision\Client\fin.exe')
    WinWaitActive('Anmelden')
    ControlSend('Anmelden', '', DIE CONTROL - ID, 'thomasb{TAB}123{ENTER}{ENTER}')
    ControlSend('Anmelden', '', DIE CONTROL - ID, '!xs')
    ControlSend('Anmelden', '', DIE CONTROL - ID, 'ADTG tägl.Sicherung{TAB}c:\adtg.fbk{ENTER}{ENTER}')
    WinWaitActive('', 'wurde erfolgreich beendet')
    Sleep(5000) ; wahrscheinlich auch unnötig
    ControlClick("FensterTitel", "", DIE CONTROL - ID, "left", 1)
    WinClose("FensterTITEL")
    Exit

    [/autoit]

    Edit: Ist nur rudimentät. Normalerweise würdest du Benutzername und Passwort separat ansprechen!!! Extra ControlSend mit anderer Control-ID!!!

    So long,

    Mega

  • hi,

    ich habe es nun mit diesem besagten Tool versucht, leider zeigt er mir immer die selbe ControlId an. gibt es noch eine ander möglichkeit das herrauszubekommen?

    mfg Thomas

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

    • Offizieller Beitrag

    Hi,

    es unterscheidet sich also nichts in den Fenster? Kannst du mal einen Screenshot von dem Fenster machen?

    Falls dies wirklich so ist, dann sind natürlich ControlCommands nicht so glücklich.

    Dann mußt du es vielleicht doch mit WinWaitActive() und Send probieren. :hammer:

    PS: Ich gehe mal nicht davon aus, dass sich Classname oder so unterscheiden.

    So long,

    Mega

  • hi,

    ich habe das ganze nochmals mit der Version getestet. Dort läuft es einwandfrei. Ich habe den mal angehangen

    Spoiler anzeigen

    rrun,C:\\Programme\\Microsoft Business Solutions-Navision\\Client\\fin.exe id=c:\\autoit\adtg.zup
    WinWaitActive,Anmelden
    Send,thomasb{TAB}5ktkcDRH{ENTER}{ENTER}
    send,!xs
    Send,ADTG tägl.Sicherung{TAB}c:\\adtg.fbk{ENTER}{ENTER}
    WinWaitActive,,wurde erfolgreich beendet
    Sleep,5000
    Send,{ENTER}
    Sleep,5000
    Send,!{F4}
    Exit

    Wenn ich das benutze gehts, aber ich müsste damit es nicht stirbt ein Befehl haben, das bei Starten ein strg+alt+entf Befehl mit pw und einer sperre der Wiedereinschaltung beinhaltet.
    Ich glaube nicht das es so einfach lösbar ist.

    mfg Thomas

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

    • Offizieller Beitrag

    Hi,

    nochmal back to the roots. Dein Skript läuft auf einem Rechner. Es läuft auch super.

    Problem ist, wenn jemand den Rechner sperrt (Strg+Alt+Entf) dann Enter.
    Anschließend stirbt das Skript an einer bestimmten Stelle.

    Richtig?

    Lösungen:

    BlockInput
    Monitor schwarz schalten
    ...

    gibt noch mehr

    So long,

    Mega

  • hi, lasse uns das morgen besprechen,
    gut nächtle

    mfg
    thomasb

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

    • Offizieller Beitrag

    Hi,

    das hört sich lustig an. Bin zur Zeit krank geschrieben, ansonsten könnten wir ein Geschäftsessen draus machen. :rofl:

    Steht der Server den zugänglich?
    Wie oft muss das Programm gestartet werden?
    Wird an dem Rechner auch sonst gearbeitet?

    Ggf. könntest du den ja das Sperren durch ein Autoitscript ersetzen.

    So long,

    Mega

  • jepp,
    kann man drüber nachdenken :musik1:

    Aber jetzt zum ernst. Ich abe lange geschaut ob ich eine Lösung finde. Leider wird es hier im Forum schon kurz und ohne Ergebniss behandelt. Der Server steht in einem sagen wir mal nicht sicherem Raum, er sit durch den Admin gesperrt. Das Sicript läuft einmal am Tage um 22:00 Uhr. Da bei der Anmeld
    ung eine Userlizenz benötigt wird deshalb so spät. Zu diesem Zeitpunkt ist kein Admin mehr da. Da das Script im gesperrten Modus nicht läuft müsste entsperrt werden. Ich habe es mit der Tastenkombination STRG+Alt+Entf versucht.
    Vielleicht hast du ja noch ne Idee. Habe auch in engl. Forum geschaut aber nichts gefunden.

    Mfg Thomas :keks:

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

    • Offizieller Beitrag

    Hi,

    okay. :irre: *denk* :comp1:

    Du könntest das Script als Dienst starten, oder einfacher in den Autostart legen. Mit der _Singleton() Methode verhinderst du, dass mehr als ein Skript läuft. Anstatt den Rechner per Affengriff zu sperren würdest du eine Autoit-Funktion nutzen. Weiterhin könnte man einfach die Systemzeit abfragen und das Skript um Punkt 22.00 Uhr ausführen lassen (ohne extra Jobsteuerung UC4 o.ä.)

    Zusätzlich könnte man einbauen, dass wenn der Rechner per AutoitSkript gesperrt ist, der Monitor schwarz bleibt. --> Anschließend : z.B. F7 drücken : Passwort eingeben und der Rechner läuft wieder.
    (Man kann sogar, falls gewollt STRG+ALT+ENTF) mit Autoit verhindern.

    So long,

    Mega

    PS: Danke für den Keks. :tassen:

  • wow,

    jetzt wird es aber für einen Laien wie mich doch etwas schwer. Vielleicht kannst du ansatzweise scriptmässig beschreiben was du gedanklich meinst. Wenn ich das richtig verstanden habe soll ich die Sperrung rausnehmen und über Autoit die Sperrung machen lassen. Gibt es so ein Script?
    Würdest du die freundlichkeit mit der güte verbinden?

    Mfg ThomasB

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

    • Offizieller Beitrag

    HI,

    okay. F9 merken und das was du in der InputBox eingibst. Das ist ein altes Probierskript von mir. Das Original kommt von Valuater.

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <File.au3>
    #include <misc.au3>
    #notrayicon
    $VER = "1.0.4"
    Opt("WinTitleMatchMode", 4)
    Dim $KEY = "111"
    Dim $ENTRY, $ATTEMPT = 0, $PHOTO = 3, $COMBO
    ENTRY()
    If $COMBO = "" Then Exit
    HotKeySet("!{TAB}", "BREAKIN")
    HotKeySet("{ESC}", "BREAKIN")
    HotKeySet("{F9}", "ENTRY")
    $SAFE = GUICreate('')
    GUISetState($WS_EX_TRANSPARENT, $SAFE)
    $VAULT = GUICreate(" *Mega*", @DesktopWidth, @DesktopHeight, -1, -1, -1, -1, $SAFE)
    GUISetState()
    ToolTip("Protected by, *Mega* v" & $VER, 5, 5)
    WinSetOnTop(" *Mega*", "", 1)
    WinSetTrans(" *Mega*", "", 1)
    $LOCK = DllOpen("user32.dll")
    MsgBox(262160, " *Mega*", "LOCKED", 3)
    WinSetOnTop(" *Mega*", "", 1)
    While 1
    For $TRY = 1 To 91
    If _IsPressed($TRY, $LOCK) Or _IsPressed("0D", $LOCK) Then
    BREAKIN()
    EndIf
    Next
    WinMinimizeAll()
    _MouseTrap(95, 18, 140, 22)
    WinSetOnTop(" *Mega*", "", 1)
    Sleep(1)
    WEnd
    Func ENTRY()
    ;WinSetState("Program Manager", "", @SW_SHOW)
    $COMBO = InputBox(" *Mega*", "Please Type in Your Password", "", "*", 150, 100, 50, 50, 10)
    If $COMBO = "" Then Return
    If Not $ENTRY Then
    If $COMBO = $KEY Then
    _FileWriteLog(@ScriptDir & "\Mega.dat", "LOCKED")
    SECURE()
    $ENTRY = 1
    Return
    Else
    WinSetState("Program Manager", "", @SW_HIDE)
    $ATTEMPT = $ATTEMPT + 1
    _FileWriteLog(@ScriptDir & "\Mega.Dat", "*** LOCK ERROR *** " & $ATTEMPT)
    MsgBox(262160, " *Mega*", "LOCK ERROR", 3)
    WinSetOnTop(" *Mega*", "", 1)
    REPORT()
    WinSetOnTop(" *Mega*", "", 1)
    Exit
    EndIf
    Else
    If $COMBO = $KEY Then
    _FileWriteLog(@ScriptDir & "\Mega.Dat", "UNLOCKED")
    DllClose($LOCK)
    WinClose("Windows Task Manager")
    WinClose("Windows Task-Manager")
    WinClose("Windows-Sicherheit")
    MsgBox(64, " *Mega*", "UNLOCKED", 3)
    WinMinimizeAllUndo()
    ControlEnable("classname=Shell_TrayWnd", "", "ToolbarWindow321")
    ControlEnable("classname=Shell_TrayWnd", "", "ToolbarWindow322")
    ControlEnable("classname=Shell_TrayWnd", "", "ToolbarWindow323")
    ControlEnable("classname=Shell_TrayWnd", "", "Button1")
    WinSetState("classname=Progman", "", @SW_ENABLE)
    WinSetState("Classname=Shell_TrayWnd", "", @SW_SHOW)
    WinSetState("Program Manager", "", @SW_SHOW)
    WinSetState("DV2ControlHost", "", @SW_SHOW)
    _MouseTrap()
    Exit
    Else
    $ATTEMPT = $ATTEMPT + 1
    _FileWriteLog(@ScriptDir & "\Mega.Dat", "*** UNLOCK ERROR *** " & $ATTEMPT)
    ;MsgBox(262160, " *Mega*", "UNLOCK ERROR", 3)
    WinSetOnTop(" *Mega*", "", 1)
    REPORT()
    WinSetOnTop(" *Mega*", "", 1)
    Return
    EndIf
    EndIf
    EndFunc ;==>ENTRY
    Func BREAKIN()
    WinSetState("Program Manager", "", @SW_HIDE)
    WinMinimizeAll()
    WinSetOnTop(" *Mega*", "", 1)
    $ATTEMPT = $ATTEMPT + 1
    _FileWriteLog(@ScriptDir & "\Mega.Dat", "*** BREAKIN ERROR *** " & $ATTEMPT)
    WinSetState("Windows Task Manager", "", @SW_HIDE)
    WinSetState("Windows Task-Manager", "", @SW_HIDE)
    WinSetState("Windows-Sicherheit", "", @SW_HIDE)
    ;MsgBox(262160, " *Mega*", "BREAKIN ERROR", 3)
    WinMinimizeAll()
    WinSetOnTop(" *Mega*", "", 1)
    REPORT()
    WinSetOnTop(" *Mega*", "", 1)
    EndFunc ;==>BREAKIN
    Func SECURE()
    Run("taskmgr.exe", "", @SW_DISABLE)
    ControlDisable("classname=Shell_TrayWnd", "", "ToolbarWindow321")
    ControlDisable("classname=Shell_TrayWnd", "", "ToolbarWindow322")
    ControlDisable("classname=Shell_TrayWnd", "", "ToolbarWindow323")
    ControlDisable("classname=Shell_TrayWnd", "", "Button1")
    WinSetState("Program Manager", "", @SW_HIDE)
    WinSetState("classname=Progman", "", @SW_DISABLE)
    WinSetState("DV2ControlHost", "", @SW_HIDE)
    WinMinimizeAll()
    ControlSetText("classname=Shell_TrayWnd", "", "Button1", "*V*")
    WinSetState("Classname=Shell_TrayWnd", "", @SW_HIDE)
    EndFunc ;==>SECURE

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

    Func REPORT()
    WinMinimizeAll()
    ProgressOn(" *Mega*", "SAVING TO FILE", "0 PERCENT")
    For $i = 10 To 100 Step 10
    Sleep(50)
    ProgressSet($i, $i & " PERCENT")
    Next
    ProgressSet(100, "DONE", "COMPLETE")
    WinMinimizeAll()
    Sleep(500)
    ProgressOff()
    EndFunc ;==>REPORT

    [/autoit]

    So long,

    Mega

    • Offizieller Beitrag

    Hi,

    ja double post ich weiß :musik2: (Will endlich 250 haben :rofl: )

    Hier noch das Monitor Skript. (Kann sein dass es schon irgendwo rumgeistert, also wenn nötig, dann ersetze ich es durch einen Link)

    Spoiler anzeigen
    [autoit]

    ;MsgBox(0, "Started", @ScriptName & " has started.... F11 = Monitor off, F10 = Monitor on, Esc = Exit Program.")
    #NoTrayIcon

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

    Opt("TrayMenuMode",1)
    Opt ("WinTitleMatchMode", 4)
    HotKeySet("{F11}", "MonOff")
    HotKeySet("{F10}", "MonOn")
    HotKeySet("{Esc}", "Close")

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

    MonOff()
    BlockInput(1)
    Sleep(10000)
    BlockInput(0)
    MonOn()

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

    While 1
    Sleep(0x7fffffff)
    WEnd

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

    Func Close()
    $hwnd = WinGetHandle('classname=Progman')
    DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', 274, 'int', 61808, 'int', -1)
    MsgBox(0, "Closing...", "Closing program.....")
    Exit
    EndFunc;==>Close

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

    Func MonOn()
    $hwnd = WinGetHandle('classname=Progman')
    DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', 274, 'int', 61808, 'int', -1)
    EndFunc;==>MonOn
    Func MonOff()
    $hwnd = WinGetHandle('classname=Progman')
    Sleep(500)
    DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hwnd, 'int', 274, 'int', 61808, 'int', 2)
    EndFunc;==>MonOff

    [/autoit]

    So long,

    Mega

  • Hallo,

    folgende Fehlermeldung erscheint, wenn ich das erste Script starten will:

    Line 26 (File "C:\Dokumente und Einstellungen\thomasb\Desktop\autoit-v3\Include\test.au3"):

    If _IsPressed($TRY,$LOCK) Or IsPressed("0D",$LOCK) Then
    If ^ Error

    Error: Unknown function name.


    Kannst du mir sagen, was falsch gelaufen ist?

    MfG