Moin,
meine Angabe zur CPU-Auslastung bezog sich auf die Abarbeitung einer mit
WinGet, Liste, List erstellten Fensterliste bei der Suche nach neuen Fenstern. Dein Timer macht schon andere Dinge.
Was in Deinem Code zu sehen ist, spricht auf den ersten Blick nicht unbedingt für eine so hohe CPU-Auslastung. Das ist aber narürlich auch abhängig von der Leitsungsfähigkeit der Hardware, auf der das Skript läuft, und von weiteren Einstellung im Skript, wie
Code: Select all
#NoEnv
SetBatchLines, ...
SetWinDelay, ...
SetControlDelay, ...
SetTitleMatchMode, ...
DetectHiddenWindows, ...
Dein Code macht es AHK aber auch nicht gerade leicht. Anweisungen wie
Code: Select all
If WinExist("ALBIS", "Patient hat in diesem Quartal") {
zwingen AHK immer wieder dazu, sich durch die Fensterliste und dann auch noch durch die Controls des Fensters zu hangeln. Die
Win... und
Control... Anweisungen bewirken viel weniger Aufwand, wenn man immer wenn möglich mit der
ahk_id (HWND) arbeitet und/oder das
"Zuletzt gefundene Fenster" 'benutzt', das von Anweisungen wie
WinExist() oder
IfWinActive gesetzt wird.
Als Beispiel für mögliche Verbesserungen mal
ChipKartenNachfrage() und
TeamViewerGSClose() (ungetestet):
Code: Select all
ChipKartenNachfrage() { ;automatisches Schließen des Fensters - der Patient hat in diesem Quartal seine Chipkarte noch nicht vorgelegt
SetTitleMatchMode, 2 ; Muss das hier geändert werden?
CoordMode, ToolTip, Window ; Warum? Es wird kein Tooltip angezeigt!
If WinExist("ALBIS ahk_class #32770", "Patient hat in diesem Quartal") { ; falls ahk_class #32770 benötigt wird
ControlGet, BHwnd, Hwnd, , Button1 ; last-found window
ToolTip, Chipkartennachfrage Fenster wurde gefunden`nEs wird geschlossen. Button "Ja" Hwnd ist: %BHwnd%, 100,2, 19
WinActivate ; last-found window
ControlFocus, , ahk_id %BHwnd% ; BHwnd benutzen
ControlClick, , ahk_id %BHwnd%, , LEFT, NA ; BHwnd benutzen
sleep, 1000
ToolTip,,,,19
}
CoordMode, ToolTip, Screen ; Warum? Siehe oben!
SetTitleMatchMode, Slow ; Ist das notwendig?
}
TeamViewerGSClose() { ;schließt das Teamviewer Fenster automatisch
;schließen des gesponserte Sitzung Fenster von Teamviewer
If WinExist("Gesponserte Sitzung ahk_class #32770 ahk_exe TeamViewer.exe") or WinExist("Verbindungs Timeout! ahk_class #32770 ahk_exe TeamViewer.exe")
ControlClick, Button4 ; last-found window
return
}
Es könnte auch noch ewas bringen,
MailAndTelegramWindow() und die zugehörige Abfrage
Code: Select all
;korrigiert die Fensterposition bei Veränderung der Position
If (WinActive("Telegram") or WinActive("Claws Mail")) {
MailAndTelegramWindow()
}
aufzuteilen. Aufgerufen wird die Funktion nur, wenn eines der Fenster aktiv ist. Innerhalb der Funktion spielt das dann aber keine Rolle. Hier könnte es sich auch lohnen, das zuletzt gefundene Handle (HWND) von "Claws Mail" in einer statischen Variablen zwischenzuspeichern. Es sollte eigentlich reichen, die
Style und
ExStyle Änderungen nur einmal zu machen.
Die Änderungenwirken sich aber nur aus, wenn die Fenster tatsächlich gefunden werden. Sollte die CPU-Last hauptsächlich durch die Fenstersuche im Timer entstehen, wird das nicht viel bringen. Es könnte aber etwas bringen, die wiederholten
IfWInActive Anweisungen im Timer durch ein
zu ersetzen und anschließend selbst zu prüfen, ob das Fenster die Kriterien erfüllt. Und wenn eines der Fenster aktiv ist, können es die anderen nicht sein.
Die Funktionen
AlbisHotKeyHilfe() und
AlbisCaveVonToolTip() fehlen leider. Darin mag sich auch noch Zündstoff verbergen.
Edit:
Noch ein kleiner 'Verbesserungsvorschlag' um ein
WinExist() einzusparen:
Code: Select all
;diese Routine zeigt ein Ausfüllhinweis für die Angestellten an
;der muss natürlich geschlossen werden wenn das Fenster nicht mehr da ist
If WinExist("Cave! von") {
If (CTTExist = 0)
AlbisCaveVonToolTip(compname)
} Else {
If (CTTExist = 1) {
CTTExist := 0
ToolTip,,,, 10
}
}