defcon999 10 Geschrieben 5. Februar 2009 Melden Teilen Geschrieben 5. Februar 2009 Hallo, ich möchte unter XP ein Programm per Batch/Script-Datei schließen. Leider poppt beim Beenden des Programms ein Bestätigungsfenster auf :-( Der Befehl "Taskkill" haut das Programm ja rigoros aus dem Speicher und ich möchte verhindern, dass durch diese Art des Beendens Daten verloren gehen, die noch nicht geschrieben wurden. Gibt es eine Möglichkeit per VBS oder Batch das Programm zu beenden und das Popup-Fenster zu bestätigen?? Danke schon mal im Voraus! -- Peter Zitieren Link zu diesem Kommentar
d.stegemann 10 Geschrieben 5. Februar 2009 Melden Teilen Geschrieben 5. Februar 2009 Hallo, Deine Infos sind schon ein wenig spärlich :) evtl. geht das mit sendkey.. und davor denke ich mal ein wscript.sleep Ansonsten vielleich mit autoit... Gruß Dirk Zitieren Link zu diesem Kommentar
defcon999 10 Geschrieben 5. Februar 2009 Autor Melden Teilen Geschrieben 5. Februar 2009 Dann etwas mehr Input ... :-) Jeden Sonntag um 4 Uhr soll durch ein Script/Batch ein spezielles Programm "sauber" geschlossen werden, damit bestimmte LOG-Dateien aus dem Programmverzeichnis erst gesichert und anschließend gelöscht werden können. Danach startet dann das Programm wieder und erzeugt ein neues Log-File ... bis zum nächsten Sonntag. TASKKILL haut das Programm ja leider rigoros aus dem Speicher und ich habe Angst, dass dann die LOG-Dateien, die gesichert werden sollen, noch schreibgeschützt sind. Wird das Programm übers GUI beendet, erscheint ein Popup-Fenster "Wollen sie wirklich beenden!" ... und genau dieses Fenster müsste durchs Script/Batch geschlossen werden. Huiii, ich hoffe, jetzt reichen die Angaben?! :-) -- Peter Zitieren Link zu diesem Kommentar
d.stegemann 10 Geschrieben 5. Februar 2009 Melden Teilen Geschrieben 5. Februar 2009 Hallo Peter, die Infos sind ja schon ganz nett, aber reichen leider noch nicht... die Fragen kommenn jetzt: 1. Wie handelst du da im Moment? (bat, schtask...) 2. Hast du schon irgendein Stückchen Code dazu? 3. Wenn nein, hast du schon irgendeine Vorstellung, wie das laufen soll? Soll z.B. ein vbs mit schtask angestossen werden, um einen Prozess zu beenden? Gruß Dirk Zitieren Link zu diesem Kommentar
defcon999 10 Geschrieben 5. Februar 2009 Autor Melden Teilen Geschrieben 5. Februar 2009 Bis vor ein paar Woche hatte ich es über eine stinknormale Batch-Datei und TASKKILL realisiert :-( Es ergab sich aber bereits 2 Mal das Phänomen, dass das Programm dann beim Re-Start NICHT mehr anlief!!! Ich vermute einfach, dass durch den Taskkill-Befehl einfach irgendeine INI oder sonstige Systemdatei beschädigt wurde bzw. nicht vernünftig geschlossen/geschrieben wurde. Aus diesem Grund habe ich dann die letzten beiden Wochen das Programm händisch geschlossen und dann die Batch ohne den Taskkill-Befehl laufen lassen. VB-Erfahrung fehlt mir eigentlich völig ;-) DOS-Batch-Dateien kriege ich aber hin :-) Insofern bin ich für jeden "frischen Code" zur Problemlösung dankbar! -- Peter Zitieren Link zu diesem Kommentar
jaksa 10 Geschrieben 5. Februar 2009 Melden Teilen Geschrieben 5. Februar 2009 Ich benutze für solche zwecke AutoIT. Damit kannst Du auf das Fenster warten und dann OK klicken. Gruß, Jaksa Zitieren Link zu diesem Kommentar
defcon999 10 Geschrieben 5. Februar 2009 Autor Melden Teilen Geschrieben 5. Februar 2009 DAS sieht ja schon mal ganz gut aus!!!! Werde ich mir mal genauer ansehen :-) Danke schon mal für den Tipp! -- Peter Zitieren Link zu diesem Kommentar
d.stegemann 10 Geschrieben 5. Februar 2009 Melden Teilen Geschrieben 5. Februar 2009 Insofern bin ich für jeden "frischen Code" zur Problemlösung dankbar! Peter Dann schauen wir mal... Set WshShell = WScript.CreateObject("WScript.Shell") ' Vorbereitung WshShell.Run "%windir%\notepad " WshShell.AppActivate "Editor" WScript.Sleep 1500 WshShell.SendKeys "1{+}" WScript.Sleep 500 WshShell.SendKeys "2" WshShell.SendKeys "=" WshShell.SendKeys "3" WshShell.Run "calc" WScript.Sleep 900 WshShell.AppActivate "Calculator" WScript.Sleep 100 WshShell.SendKeys "1{+}" WScript.Sleep 500 WshShell.SendKeys "2" WScript.Sleep 500 WshShell.SendKeys "~" WScript.Sleep 500 WshShell.SendKeys "*3" WScript.Sleep 500 WshShell.SendKeys "~" WScript.Sleep 2500 'Ende Vorbereitung Set colProcessList = GetObject("Winmgmts:").ExecQuery ("Select * from Win32_Process") For Each objProcess in colProcessList If objProcess.name = "notepad.exe" then vFound = True Next If vFound = True then Set oAutoIt = WScript.CreateObject("AutoItX3.Control") oAutoIt.Sleep 100 WshShell.AppActivate "Editor" oAutoIt.Sleep 1000 oAutoIt.Send "!{F4}" oAutoIt.WinWaitActive "Editor", "Aktuelle Änderungen speichern?" oAutoIt.Sleep 1000 oAutoIt.Send "!n" oAutoIt.Sleep 1000 oAutoIt.WinWaitClose "Unbekannt - Notepad", "" End If Set WshShell = Nothing Set oAutoIt = Nothing MsgBox "Fertig! Rechner von Hand schliessen :-)" Dann fehlt dir nur noch AutoIt und ein deutsches System... AutoIt gibts hier: AutoIt v3 - Automate and Script Windows Tasks - For Free! Gruß Dirk Zitieren Link zu diesem Kommentar
jaksa 10 Geschrieben 5. Februar 2009 Melden Teilen Geschrieben 5. Februar 2009 Hi Dirk, warum nicht gleich das Ganze in AutoIT ? Gruß, Jaksa Zitieren Link zu diesem Kommentar
defcon999 10 Geschrieben 5. Februar 2009 Autor Melden Teilen Geschrieben 5. Februar 2009 Hi Dirk, Klasse ... Danke für den Code!!! Ich bin gerade dabei mich in "AutoIt" einzulesen und einzuarbeiten. Und nebenbei versuche ich auch noch DEINEN Code zu "entschlüsseln" :-) -- Peter Zitieren Link zu diesem Kommentar
d.stegemann 10 Geschrieben 5. Februar 2009 Melden Teilen Geschrieben 5. Februar 2009 Hi Dirk,warum nicht gleich das Ganze in AutoIT ? Gruß, Jaksa Ganz einfach... Wenn es evtl. mehrere Möglichkeiten gibt, warum nicht beide zumindest mal zeigen... Wenn es rein mit Boardmitteln realisierbar wäre, bräuchte keine 3'rd Party Software wie AutoIt eingesetzt werden. Das kann ich aber nicht beurteilen, sondern nur Peter. Daher zumindest mal die Andeutung mit Sendkeys. Gruß Dirk Zitieren Link zu diesem Kommentar
defcon999 10 Geschrieben 5. Februar 2009 Autor Melden Teilen Geschrieben 5. Februar 2009 An "Bordmitteln" steht hier ein "nacktes" XP-SP3 und seit ein paar Stunden "AutoIt" zur Verfügung :-) Zumindest habe ich durch Euch eine Menge Denkanstösse erhalten und ich denke, dass es mit "AutoIt" funktionieren wird! Dein VBS-Script muss ich mir mal Zeile für Zeile ansehen um zu verstehen, was da eigentlich abgeht, Dirk ;-) -- Peter Zitieren Link zu diesem Kommentar
jaksa 10 Geschrieben 5. Februar 2009 Melden Teilen Geschrieben 5. Februar 2009 Wenn es evtl. mehrere Möglichkeiten gibt, warum nicht beide zumindest mal zeigen... Wenn es rein mit Boardmitteln realisierbar wäre, bräuchte keine 3'rd Party Software wie AutoIt eingesetzt werden. Das kann ich aber nicht beurteilen, sondern nur Peter. Daher zumindest mal die Andeutung mit Sendkeys. OK, in diesem Fall bin ich einverstanden ;). Ich dachte das sollte ein Lösungsvorschlag für das Problem sein (habe es mir ehrlicherweise nicht genau angeschaut - Asche über mein Haupt), in diesem Fall würde ich bei einem Tool blieben. @Peter: Wenn Du noch Fragen hast, nur zu. Grüße, Jaksa Zitieren Link zu diesem Kommentar
defcon999 10 Geschrieben 5. Februar 2009 Autor Melden Teilen Geschrieben 5. Februar 2009 Ihr seid soo gut zu mir! Werde Euch in mein Nachtgebet einschließen :) "AutoIt" ist ja ein mächtiges Werkzeug, das scheinbar genau das kann, was ich suche ... ;-) Programm systemkonform schließen, auf der Netzwerkplatte ein neues Verzeichnis anlegen mit dem aktuellen Datum als Namen, dann die betreffenden Files aus dem eigentlich Programmverzeichnis kopieren bzw. verschieben ... und zu guter Letzt das Programm wieder starten ... :-) Das LIEST sich zumindest einfach ... jetzt muß ich mich nur noch in "AutoIt" reinknien! :confused: Zumindest war das ein wirklich toller Tipp, jaksa!! :D Aber auch Danke an Dirk für die ersten Tipps bezüglich VB ;) -- Peter Zitieren Link zu diesem Kommentar
d.stegemann 10 Geschrieben 5. Februar 2009 Melden Teilen Geschrieben 5. Februar 2009 Programm systemkonform schließen, auf der Netzwerkplatte ein neues Verzeichnis anlegen mit dem aktuellen Datum als Namen, dann die betreffenden Files aus dem eigentlich Programmverzeichnis kopieren bzw. verschieben ... und zu guter Letzt das Programm wieder starten ... :-) Das LIEST sich zumindest einfach ... -- Peter Eine kleine Impression zu dem Datum Laufwerkproblem :) Set oFSO = CreateObject("Scripting.FileSystemObject") aFolder = Split(DateAdd("d", Now(), 0), ".") Logpath = "\\Server\Share\" For i = UBound(aFolder) To LBound(aFolder) Step -1 sFolder = sFolder & aFolder(i) Next MsgBox sFolder If not oFSO.FolderExists (Logpath & sFolder) Then oFSO.CreateFolder(Logpath & sFolder) End If Sowas legt dir einen Ordner mit tagesaktuellem Datum an(20090205). Wenn du es anderrum brauchst muss du LBound to UBound machen und Step -1 entfernen. Files kopieren CopyFile Files verschieben MoveFile Starten WshShell.Run "Pfad\Programname " So und jetzt viel Spaß beim Coden Gruß Dirk Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.