Autohotkey mittels Kommandozeile starten/neu laden

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

wernho
Posts: 34
Joined: 27 Dec 2019, 12:02

Autohotkey mittels Kommandozeile starten/neu laden

20 Sep 2023, 08:07

Folgendes Problem:
Ich möchte mittels VB-Script Autohotkey mit einem Script starten, welches immer bei mir läuft (wo alle meine Hotkeys gespeichert sind, heißt "AutohotkeySammeln.ahk").
Danach soll mit einem Hotkey im Script KeePass Passwort Manager gestartet und minimiert werden und NC95 Scheduler aufgerufen und minimiert werden.
Das VB-Script steht im Autostart.

Leider ist es aber so, dass manchmal zwar KeePass aufgerufen wird, aber das im Hotkey eingegebene Passwort nicht eingegeben wird bzw. es wird nicht eingelogged. Dann rufe ich den Hotkey händisch auf, aber der funktioniert nicht auf Anhieb. Erst wenn ich Autohotkey reloade, funktioniert der Hotkey.

Hier einmal das VB-Script, mit welchem Autohotkey mit Script aufgerufen wird und danach der Hotkey, der mir KeePass und NC95 steuert:

Code: Select all

wshshell.run "E:\Autohotkey\Autohotkey.exe E:\Dateien\AutohotkeySammeln.ahk"
WScript.Sleep 3000
WScript.Sleep 30000
wshshell.sendkeys "^%+k"
set wshshell = nothing
Und hier der Hotkey, mit dem KeePass mit Passwort & NC95 Scheduler aufgerufen und beide minimiert werden:

Code: Select all

;KeePass Passwort Manager
; Strg - Alt - Shift - K
^!+k::
Run D:\KeePass Password Safe 2\KeePass.exe
Sleep 500
WinWait Datenbank.kdbx [Gesperrt] - KeePass
Sleep 1000
Run D:\KeePass Password Safe 2\KeePass.exe
Sleep 500
Send DasPasswort
Sleep 500
Send {Enter}
Sleep 1000
WinMinimize Datenbank.kdbx - KeePass
Sleep 1000
Run E:\NC95\Nc_sched.exe
WinWait NC Scheduler
Sleep 1000
if WinExist("NC Scheduler") 
   WinActivate ; zuletzt gefundenes Fenster verwenden
Sleep 750
; NC95-Scheduler minimieren
Send !{F4}
Return
Und danach ist es manchmal so, dass anscheinend das Passwort von KeePass nicht eingegeben wurde und auch NC95-Scheduler nicht minimiert wurde.
Wenn ich dann nochmals händisch den Shortcut Strg - Alt - Shift - K verwende, wird das oeben angeführte Script nicht ausgeführt. Erst wenn ich AHK mittels Rechtsklick-Reload neu lade, funktioniert Strg - Alt - Shift - K.

Daher möchte ich bitte dieses Reload, welches ich mit Rechtsklick-Reload aufrufe, mittels Kommandozeile (mit Batch-Befehl) aufrufen.
Also so in der Art wie:
E:\Authotkey\Autohotkey.exe /reload
Gegoogelt habe ich bereits, aber ich finde nirgends im Internet eine Lösung.
Aber vermutlich ist auch entweder das VB-Script oder der Code in AHK falsch.

Daher bitte ich Euch, die Wissenden, um Hilfe bei meinem Problem.
Es wäre mir natürlich recht, wenn das VB-Script (im Autostart) immer funktionieren würde, aber auch ein Reload würde mir helfen.
Und ich hoffe, mich verständlich ausgedrückt zu haben (ist leider eine kleine Schwäche von mir). Wenn nicht, bitte Unklares erfragen.

Somit hoffe ich auf Eure Hilfe und bedanke mich im Voraus.
Stroker-007
Posts: 135
Joined: 28 Jan 2021, 17:09
Location: Germany

Re: Autohotkey mittels Kommandozeile starten/neu laden

20 Sep 2023, 13:54

Hallo!

Also ich mache sowas mit einer guten alten Batch-Datei, frei nach dem Motto: Nur von außerhalb kannst du die Welt aus den Angeln heben. Stelle sie hier mal unredigiert ein, so wie ich sie einheitlich für viele Situationen und auch unterschiedliche Rechner verwende, die aber alle meine AHK-Skripte identisch benutzen. Und wie zu erkennen ist, wird das Skript bei mehreren verschiedenen Möglichkeit und Anforderungen benutzt. Steht aber auch mit Parameter "Start" im Autostart. Es ist mein universelles General-Management für AHK. Im einfachsten Fall das Beenden und ("Pause") Neustarten aller AHK-Prozesse, was anläßlich Skript-Updates auf einem der Rechner häufig vorkommt.

Code: Select all

@echo off

if "%1" == "start" goto start

REM Win 7+2 differenzierte Befehle, hier ein einfaches Beispiel.
REM Falls die Sache komplexer ist (z.B. bei ...errorlevel), dann siehe SET-Lösung bei StroScha.bat
if exist c:\2*.hdk kill -f AutoHotkey.exe & goto weiter
taskkill -F -IM AutoHotkey.exe

:weiter
echo.
echo Alle AutoHotkey.exe-Prozesse wurden beendet.
echo.
echo --- Jetzt alle Standard-Prozesse wieder starten? ---
echo.
if "%1" == "UpV7" goto UpdateV7
pause
goto start

:UpdateV7
wait 4

:start
start _Menu.ahk
start _Hotkeys.ahk

if exist c:\2*.hdk goto finish

start VolumeMausSystray.ahk
start ErrorStroke.ahk
:start ErrorEditClip.ahk

if exist c:\7W-C.hdk start 7Wwatch-Fritzbox.ahk

REM Wenn diese Batch per RK-Knopf zwecks Robo-Update aufgerufen wird
if not "%1" == "RK" goto finish
start C:\Y\AHK-Skript\runRemoteKeys.ahk
wait 1
start c:\Y\AHK-Skript\Eye.ahk neuID

:finish
wait 1
start c:\Y\AHK-Skript\ClearSystray.ahk

exit

Den Befehl "wait" gibts in der DOS-Welt bei Horst Schäfer, ansonsten halt "timeout" verwenden.
*.hdk-Dateien dienen zur Identifikation verschiedener Rechersysteme, um entsprechend deren Anforderungen die AHK-Prozesse zu schalten.

Und natürlich alles den eigenen Anforderungen anpassen bzw. lediglich als Ideen-Fundgrube benutzen. Viel Spaß!

Stroker-007
just me
Posts: 9532
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Autohotkey mittels Kommandozeile starten/neu laden

21 Sep 2023, 03:38

Moin,

ein paar Anmerkungen:

Mit Deinem VB-Skript startest Du Dei AHK-Skript und sendest dann nach 33 Sekunden den Hotkey ^!+k. Ich gehe deshalb davon aus, dass das aus bestimmten Gründen mit starker Verzögerung ausgeführt werden soll. Diese Verzögerung kannst Du auch im AHK-Skript abwarten. Dann hast Du auch die Möglichkeit, von 'innen' zu prüfen ob 'draußen' Alles bereit ist. Du kannst dafür direkt über dem Hotkey ein Label einfügen, dass Du per Gosub aufrufst.

In der Hotkeyroutine wird zuerst KeePass gestartet:

Code: Select all

Run D:\KeePass Password Safe 2\KeePass.exe
Dann wartest Du unbegrenzt auf ein Fenster:

Code: Select all

WinWait Datenbank.kdbx [Gesperrt] - KeePass
Wenn das Fenster gefunden wird, wird nach einer Sekunde nochmals Keepass gestartet:

Code: Select all

Run D:\KeePass Password Safe 2\KeePass.exe
Ich verwende das Programm nicht. Wofür braucht es zwei Startversuche?
wernho
Posts: 34
Joined: 27 Dec 2019, 12:02

Re: Autohotkey mittels Kommandozeile starten/neu laden

23 Sep 2023, 01:21

Danke Euch beiden.
Den Batch-Befehl muss ich mir mal genauer ansehen.

@just me:
Warum ich es 2x aufrufe, weiß ich jetzt nicht mehr und es ist mir erst durch Dich aufgefallen. Das werde ich ändern.
Warum die starke Verzögerung: weil ich abwarten will, dass AHK auch tatsächlich gestartet ist UND weil es mit einer kürzeren Verzögerung fast nie funktioniert hat. Ich hatte vorher 10 Sekunden, aber da war ich nie angemeldet (das ist ja im Script mit drinnen) und ach NC95 war zwar gestartet, aber nicht minimiert. Mit den 30 Sekunden funktioniert es öfter, aber auch nicht immer.
Ich glaube mich zu erinnern, dass der 2. Aufruf da ist, um KeePass hervorzubringen, denn imho war KeePass nach dem ersten Aufruf noch nicht zu sehen.
Und das mit dem Laben und GoSub verstehe ich nicht. Kannst Du mir das bitte mal näher erläutern, was das macht und bezweckt? Danke vielmals.

Und noch etwas bitte: ich werde nicht per Email erinnert, dass eine Antwort gekommen ist. Warum ist das bitte so?
Denn ich habe alle Notification und Emails aufgedreht. Verwende zwar SuperSpamKiller Pro, aber da war auch nichts drinnen (schaue mir alle Mails an, ob tatsächlich Spam).

edit:
Jetzt ist es mir wieder eingefallen:
Die 30 Sekunden Verzögerung habe ich deswegen eingebaut, weil das VB-Script ja im Autostart drinnen ist und ich wollte sichergehen, dass der ganze Startvorgang vorbei ist, bevor ich KeePass aufrufe. Und die 2x ist tatsächlich, weil sich KeePass nicht öffnet. Aber ich versuche es mal mit WinWait.
wernho
Posts: 34
Joined: 27 Dec 2019, 12:02

Re: Autohotkey mittels Kommandozeile starten/neu laden

23 Sep 2023, 01:59

So, jetzt weiß ich auch, warum ich KeePass ein zweites Mal aufrufe:
Es gibt den Prozess, aber kein Fenster. Heißt: KeePass ist zwar rechts unten in der Symbolleiste vorhanden, aber kein Fenster.
KeePass kann durch Doppelklick auf das Symbol rechts unten in der Symbolleiste aktiviert werde, durch AHK schaffe ich es aber nicht.
Daher rufe ich KeePass ein zweites Mal auf und bekomme somit das Fenster (zur Anmeldung mit Passwort) aufgerufen, wo ich dann das PWD eingebe und das Fenster minimiere.
just me
Posts: 9532
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Autohotkey mittels Kommandozeile starten/neu laden

23 Sep 2023, 03:57

Moin,

erst einmal zum Thema "Reload per Batch":
Dafür gibt es die Option /r oder /restart -> Befehlszeilenparameter an ein Skript übergeben
"E:\Autohotkey\Autohotkey.exe /r E:\Dateien\AutohotkeySammeln.ahk"

Nun zum Thema "KeePass":
Auch KeePass kennt Kommandozeilenoptionen. Wenn ich die richtig verstehe, kannst du eine passwortgeschützte kdbx Datei mit der Option
-pw:DasPasswort beim Start automatisch entsperren. Beispiel:
If you got a database that is locked with a password 'abc', you could open it like this:
KeePass.exe "C:\My Documents\MyDatabaseWithPw.kdbx" -pw:abc
Und weil das Passwort ohnehin im AHK-Skript steht, schadet das auch nicht. Probier mal:

Code: Select all

Run D:\KeePass Password Safe 2\KeePass.exe -pw:DasPasswort
Wenn das Passwort Leerzeichen enthält, muss es in Anführungszeichen eingeschlossen werden.
Zum Minimieren könnte die Option Min der Run-Anweisung reichen:

Code: Select all

Run D:\KeePass Password Safe 2\KeePass.exe -pw:DasPasswort, , Min


Zuletzt zum "NC95-Scheduler":
Du kannst auch hier versuchen, die Option Min der Run-Anweisung zu nutzen. Wenn das nicht hilft, würde ich folgendes versuchen:

Code: Select all


Run E:\NC95\Nc_sched.exe, , , PID ; ; NC95-Scheduler starten und die Prozess-ID zurückgeben
WinWaitActive, ahk_pid %PID%, , 3 ; max. 3 Sekunden auf das Fenster warten
If (ErrorLevel) {
   MsgBox, 16, Fehler!, Nc_sched.exe wurde nicht gestartet!
Else
   Send !{F4} ; NC95-Scheduler minimieren
wernho
Posts: 34
Joined: 27 Dec 2019, 12:02

Re: Autohotkey mittels Kommandozeile starten/neu laden

26 Sep 2023, 06:28

Vielen lieben Dank für Deine Bemühungen.
Das mit NC95 Scheduler funktioniert wunderbar.

Aber mit KeePass habe ich immer noch Probleme. Denn wenn ich es so aufrufe, wie Du es vorgeschlagen hast (-pw::MeinPasswort), ist KeePass immer noch gesperrt.
Heißt: unten rechts in der Symbolleiste ist das Symbol für das gesperrte KeePass. Wenn ich es mit einem Doppelklick öffne, kommt das Fenster mit der Aufforderung, dass Passwort einzugeben.
Was nun aber sehr komisch ist: wenn ich das Passwort kopiere und dann hier in dem Fenster eingebe, kommt diese Fehlermeldung:
KeePassPwdFehler.jpg
KeePassPwdFehler.jpg (14.21 KiB) Viewed 1040 times
Wenn ich das PWD aber händisch eingebe, dann funktioniert es. Heißt: man muss die einzelnen Tasten drücken und kann das PWD nicht mit dem copy-Befehl einfügen.
Wenn ich den Run-Befehl nun mit dem richtigen Passwort in einem DOS-Fenster eingebe, habe ich folgende Eingaben gemacht:
1) D:\KeePass Password Safe 2\KeePass.exe -pw:MeinPWD
Fehlermeldung: Der Befehl "D:\KeePass" ist entweder falsch geschrieben oder konnte nicht gefunden werden
2) "D:\KeePass Password Safe 2\KeePass.exe -pw:reMwh321^4064"
Fehlermeldung: Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.
3) "D:\KeePass Password Safe 2\KeePass.exe" -pw:reMwh321^4064
Nun habe ich wieder das gesperrte KeyPass in der Symbolleiste und beim Doppelklicken kommt wieder das Fenster mit der Passworteingabe.

Leider funktioniert das Run im Scipt mit -pw:MeinPWD nicht, es bleibt beim gesperrten KeePass.
Aber ich habe Methoden mittels Google gefunden, die ev. funktionieren können.
Was mir aber immer noch schleierhaft ist, dass mein VB-Script manchmal funktioniert, manchmal nicht.
Aber ich habe es jetzt umgeschrieben und rufe zuerst NC95-Scheduler mit Minimieren auf (steht als eigenes Scipt nun im AHK) und danach mein Script, wo ich NC95-Scheduler rausgenommen habe. Denn das funktioniert ja dann, wenn ich es händisch mittels Shortkey aufmache. Also wo ich KeePass 2x aufrufen und dann das PWD mittels Script mit Senden der einzelnen Tasten des PWD's dann zum gewünschten Ergebnis (KeePass gestartet, Datenbank ist da und zum Schluss wird minimiert) komme.

Ich werde es jetzt ein paar Tage testen, eventuell auch noch das gegoogelte ausprobieren und danach berichten.
Danke

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 34 guests