Powershell "SendKeys" - simulierte keystrokes an Anwendungen schicken?
Guten Tag,
Ich möchte ein kleines script in Powershell schreiben, welches alle 3 Minuten zuerst ein "-", und 2 Sekunden später ein "+" an die Anwendung Teamspeak3 übergiebt.
Aus Testzwecken habe ich mal an der Numlock taste geübt, da ich ja dabei das Resultat sofort an der LED auf meiner Tastatur checken kann.
Skript:
$wsh = New-Object -ComObject WScript.Shell
$wsh.SendKeys('{NUMLOCK}')
start-sleep 2
$wsh.SendKeys('{NUMLOCK}')
Das scheint reibungslos zu laufen!
Habe das erste NUMLOCK durch ein "-" ersetzt und das zweite durch ein "+". (Numpad)
WIESO AUCH IMMER (was mir total auf den sack geht) sind das ja keine GENERELLEN Tastenanschläte sondern nur auf ein Programm bezogen (in diesem fall PS).
Korrigiert mich bitte, wenn es nicht so ist...
Nun wie bekomme ich diese beiden Tastenanschläge denn nun zu meiner Teamspeak Anwendung geschickt?
PS: Das ich die 3 minuten delay noch nicht drin habe ist mir bewusst.
2 Antworten
Die Tastenanschläge werden immer an das Fenster (oder genauer Steuerelement) gesendet, das gerade den Fokus hat.
Wenn also das also das entsprechende TS-Fenster ist, dann kommen die Tastenanschläge auch da an.
Erteile deinem Zielfenster den Focus!
....nötigenfalls vor jedem sendkey erneut
Im einfachsten Fall nutze ebenso wie bei sendkey ein wsh-script:
$wsh = New-Object -ComObject WScript.Shell
$wsh.AppActivate("FenstertitleDeinerAnwendung")
$wsh.SendKeys('{NUMLOCK}')
...usw.
https://ss64.com/vb/appactivate.html
Alternativ zum wsh kannst du auch mit Systemassemlys artbeiten:
https://stackoverflow.com/questions/35679178/appactivate-working-inconsistently-in-powershell
Stichwort PInvoke
Du kannst aus Powershell auf WindowsAPIs zugreifen:
https://www.leeholmes.com/blog/2009/01/19/powershell-pinvoke-walkthrough/
PInvoke.net listet alle Systembibliotheken und deren Funktionen....
Hier das für Deinen Fall entsprechende: https://www.pinvoke.net/default.aspx/user32/SetFocus.html?diff=y