Hallo Kollege Timo,
Tut mir leid, wenn ich erst so spät darauf antworte. Hatte am WE schon was anderes vorgehabt.
Zur Frage:
Was Michael schreibt ist wahrscheinlich richtig, AutoIt orientiert sich entweder relativ zur Fenstergröße oder relativ zum gesamten Bildschirm (oben links = Position 0,0). Dürfte aber wohl in bestimmten Basisdefinitionen (fangen u.a. mit <@_> einzustellen sein.
Ich versuche es zu umgehen, indem ich immer eine bestimmtee Fenstergröße (meistens Vollbild) vorgebe.
Es gibt den Befehl <WinSetState()>. Hier ist ein Parameter möglich, der sich <@SW_RESTORE> nennt. Damit wird das Fenster auf die übliche Fenstergröße zurückgestellt. Wenn das erledigt ist, kann man <WinSetState("", "", @SW_MAXIMIZE> und anderen Parametern eingegeben oder über <WinMove()> dem Fenster die gewünschte Größe und Position zuweisen.
Im Internet kursiert übrigens auch eine deutschsprachige Hilfedatei für die Version 3.1.x (wobei hier ganz selten benötigte Begriffe nicht mit aufgenommen wurden. Warum?? Keine Ahnung.) Ob diese aber mit der Version 3.2 zusammenläuft, da bleibt nur ausprobieren.
Sehr hilfreich ist der "Scriptwriter", im Verzeichnis des Editors "SciTE" zu finden. Er funktioniert wie eine Makroaufzeichnung. Alle Tastaturanschläge und Mausbewegungen werden aufgezeichnet. In der Regel kann man sich daran ganz gut entlang hangeln und dann etwas kompaktes zusammen bekommen. Einfache Sache können auch sofort funktionsfähig übernommen werden.
Anliegend ein Beispiel, was machbar ist. Habe das File gerade eben ausprobiert, klappt einwandfrei. Beste Voraussetzung ist aber, wenn in TM von vornherein schon KEIN Fenster mehr geöffnet ist. (Bitte die Angaben zu den Pfaden vorher anpassen !!)
Und zum Scripte veröffentlichen: Ein Beispiel anbei.
Lasst uns das Rad gemeinsam erfinden. Jeder fügt einen Baustein hinzu.
(Damit TM endlich Beine bekommt).
Gruß
LEM
Script AutoIt (mit sehr ausführl. Deklarationen)
Nicht erschrecken, es sieht nur im allerersten Moment
schlimmer aus, als es in Wirklichkeit ist.
hat geschrieben:
;==============================================
; Beispiel zur Durchführung einer Datensicherung, welche automatisch auf dem TM-Sicherungs-PC abläuft.
; Es wurden jetzt nur die Sicherungsdaten genommen, die standardmäßig gezogen werden können,
; auch wenn das ganze Netz läuft.
;==============================================
; Ergänzung / Erweiterung möglich für Praxisdaten, Druckaufträge, Datenstämme und Externe Daten.
; Hier ist zu beachten, dass dies nur erfolgen kann, wenn man TMAdmin nutzt
; (habe ich persönlich aber noch nicht ausprobiert) oder wenn der PC zur Datensicherung
; nur noch der TM-Sicherungs-PC im Netz aktiv ist.
;==============================================
; Sieht zwar etwas komplex aus, dieser Teil konnte aber in etwa 45-60 Minuten erstellt werden,
; (Als ich nicht nicht sonderlich viel Erfahrung mit AutoIt Programmnierung hatte.)
;==============================================
DIM $Meldung
DIM $Sicherungskontrolle = "!n" ; Durch ändern in <"!J"> kann hier die Überprüfung der Datensicherung eingeschaltet werden (Verbraucht aber mehr Zeit).
;==============================================
DIM $days = StringSplit("So,Mo,Di,Mi,Do,Fr,Sa", ",")
DIM $TempDir = @TempDir
;==============================================
;==============================================
; Sicherungsabfrage, ob die Sicherungslaufwerke / -verzeichnisse vorhanden sind.
;==============================================
; Für "J:" muss hier der Pfad für die DatenSICHERung angegeben werden (Über Grundeinstellungen nachzuschauen) !!!
; Für "K:" muss hier der Pfad für die DatenSPIEGELung angegeben werden (Über Grundeinstellungen nachzuschauen) !!!
; Oder ggf. auf diese Abfrage verzichten.
;==============================================
If FileExists("J:") = 0 OR FileExists("K:") = 0 then
MsgBox(48, "Turbomed", "TM scheint nicht korrekt gestartet worden zu sein !" & @CRLF & @CRLF & "Es fehlen die Verzeichnisse:" & @CRLF & "<J:\> und <K:\>",12)
Exit
EndIf
;==============================================
; Sicherungsabfrage, ob TM überhaupt läuft. Sonst endet dieser Zug hier.
;==============================================
If WinExists("TurboMed") Then
WinActivate("TurboMed")
Sleep(1000)
Send("{ESC 12}")
Sleep(5000)
Else
MsgBox(48,"WARNUNG", "Turbomed ist nicht aktiv !", 3)
MsgBox(48,"Kommentar", "Datensicherung kann nicht gezogen werden," _
& @CRLF & "weil TURBOMED nicht getartet wurde !")
EXIT
EndIf
;==============================================
; Aufruf der Befehle, um die einzelnen SICHERungsschritte durchzuführen
;==============================================
; Hier kann noch eine Zeitabfrage oder erweitert auch eine Zeitsteuerung eingetragen werden, etwa dieser Art:
;~ If $days[@Wday] = "Di" OR $days[@Wday] = "Do" OR $days[@Wday] = "Fr" Then
;==============================================
WinActivate("TurboMed")
Send("{F12}!Csv")
Sicherungsbefehl("Vorlagen")
;==============================================
WinWait("TurboMed")
Send("{F12}!Csb{ENTER}")
Sicherungsbefehl("Befunde")
;==============================================
WinWait("TurboMed")
Send("{F12}!Csf")
Sicherungsbefehl("Formulare")
;==============================================
WinWait("TurboMed")
Send("{F12}!Csdd")
Sicherungsbefehl("Dokumente")
;==============================================
; Falls jemand den Rest wirklich einzeln gesichert haben möchte, dann bitte ";" entfernen.
; (Markieren und Minus-Taste im Zahlenblock oder Strg-Q im SciTE Editor)
;==============================================
;~ WinWait("TurboMed")
;~ Send("{F12}!Csda")
;~ Sicherungsbefehl("Audio")
;~ ;==============================================
;~ WinWait("TurboMed")
;~ Send("{F12}!Csdv")
;~ Sicherungsbefehl("Video")
;~ ;==============================================
;~ WinWait("TurboMed")
;~ Send("{F12}!Csdb")
;~ Sicherungsbefehl("Briefe")
;==============================================
;~ EndIf
;==============================================
;==============================================
; Eintrag für die Abschlussmeldung zur optischen Trennung von SICHERung und SPIEGELung
;==============================================
Verlauf("===================================")
;==============================================
;==============================================
; Aufruf der Befehle, um die einzelnen SICHERungsschritte durchzuführen
;==============================================
; Hier kann noch eine Zeitabfrage oder erweitert auch eine Zeitsteuerung eingetragen werden, etwa dieser Art:
;~ If $days[@Wday] = "Mo" OR $days[@Wday] = "Mi" OR $days[@Wday] = "Fr" Then
;==============================================
MonitorMeldung("Vorlagen auf dem SPIEGELLAUFWERK werden gelöscht - einen Moment bitte")
RunWait("cmd /c RD /S /Q K:\Vorlagen", $TempDir, @SW_MINIMIZE)
WinWait("TurboMed")
Send("{F12}!Cpv")
Spiegelbefehl("Vorlagen")
;==============================================
MonitorMeldung("Befunde auf dem SPIEGELLAUFWERK werden gelöscht - einen Moment bitte")
RunWait("cmd /c RD /S /Q K:\Befunde", $TempDir, @SW_MINIMIZE)
WinWait("TurboMed")
Send("{F12}!Cpb{ENTER}")
Spiegelbefehl("Befunde")
;==============================================
MonitorMeldung("Formulare auf dem SPIEGELLAUFWERK werden gelöscht - einen Moment bitte")
RunWait("cmd /c RD /S /Q K:\Formulare", $TempDir, @SW_MINIMIZE)
WinWait("TurboMed")
Send("{F12}!Cpf")
Spiegelbefehl("Formulare")
;==============================================
MonitorMeldung("Dokumente auf dem SPIEGELLAUFWERK werden gelöscht - einen Moment bitte")
RunWait("cmd /c RD /S /Q K:\Dokumente", $TempDir, @SW_MINIMIZE)
WinWait("TurboMed")
Send("{F12}!Cpdd")
Spiegelbefehl("Dokumente")
;==============================================
;~ EndIf
;==============================================
;==============================================
; Abschlussmeldung
;==============================================
MsgBox(0,"Folgende DATENSICHERUNGEN wurden durchgeführt:", $Meldung)
;==============================================
;ProgrammEnde
;==============================================
EXIT
;==============================================
;==============================================
; Hier beginnen selbsterstellte Funktionen, die oben aufgerufen werden.
;==============================================
;==============================================
; Der Funktionsname sagt es.
;==============================================
Func MonitorMeldung($Mitteilung)
SplashTextOn("", $Mitteilung, 1000, 33, -1, 300, 1, "", 20)
EndFunc
;==============================================
; Hier wird die MEldung zusammengestellt, die am Programmende angezeigt wird.
;==============================================
Func Verlauf($Antwort)
$Meldung = $Meldung & $Antwort & @CRLF
EndFunc
;==============================================
; Wenn die SICHERung erfolgt ist, tauchen diverse Fenster mit abfragen auf.
; Hier werden die möglichen Fenster abgefragt und beantwortet.
;==============================================
Func Sicherungsbefehl($SicherungsName)
MonitorMeldung("SICHERUNG - Turbomed - " & $SicherungsName)
WinWait("Hinweis","Wollen Sie wirklich eine Sicherung")
Send("!J")
While 1
$msg = WinWaitActive("Hinweis","TurboMed bietet Ihnen eine zeitraumbegrenzte Sicherung Ihrer Daten an.",1)
If $msg = 1 Then
Send("!J")
$msg = ""
EndIF
$msg = WinWaitActive("Hinweis", "Wollen Sie die heutige Sicherung", 1)
If $msg = 1 Then
Send("!J")
$msg = ""
EndIF
If WinWaitActive("Hinweis", "Wollen Sie die jetzt löschen?", 1) = 1 Then
Send("!J")
$msg = ""
EndIF
$msg = WinWaitActive("Hinweis", "Wollen Sie Ihre Sicherung",1)
If $msg = 1 Then
Send($Sicherungskontrolle)
$msg = ""
EndIF
$msg = WinWaitActive("Hinweis", "wurde erfolgreich beendet!",1)
If $msg = 1 Then
Send("!O")
$msg = ""
ExitLoop
EndIF
Wend
Verlauf("DatenSICHERUNG: " & $SicherungsName)
EndFunc
;==============================================
; Wenn die SPIEGELung erfolgt ist, taucht ein Fenster mit eine Abfrage auf.
; Hier wird das Fenster abgefragt und beantwortet.
;==============================================
Func Spiegelbefehl($SicherungsName)
MonitorMeldung("SPIEGELUNG - Turbomed - " & $SicherungsName)
WinWait("Hinweis","Wollen Sie wirklich eine Spiegelung")
Send("!J")
WinWait("Hinweis", "Die Spiegelung der ")
Send("!O")
Verlauf("DatenSPIEGELUNG: " & $SicherungsName)
EndFunc
;==============================================