ich möchte mit der Tastenkombination Strg+F4 einen Tab in Firefox schließen.
Dazu möchte ich ein Skript erstellen:
SendKeys Strg ^(F4) (ist das richtig für Strg+F4?)
nun fehlt mir noch folgende Abfrage, ob das Tab Fenster – Vordergrundfenster – Firefox ist. Nur dann soll die Tastenkombination ausgeführt werden, die ich auf den Befehl "Tab schließen" legen möchte.
Die frage ich mit der Skriptsprache ab, ob das aktuelle Vordergrundfenster Firefox ist?
das mit Firefox ist nur ein allgemein verständliches Beispiel. Es geht um unterschiedliche Programme, die auf den grundlegenden Befehl "Tab schließen" unterschiedlich reagieren sollen.
Dazu ist es erforderlich, zuerst festzustellen, welches das Vordergrundfenster ist. Dieser Wert wird einer Variablen übergeben und dann ausgewertet. Soweit die Idee.
Nebenbei bemerkt: "Tab schließen" wird bei mir nicht als Befehl erkannt (wird ausgeschrieben, auch wenn Firefox im Vordergrund ist), aber das nur als Bemerkung am Rande.
übrigens – bei SendKeys "{Strg+F4}" erhalte ich folgende Fehlermeldung
--------------------------- Befehle --------------------------- Das Makro enthält diesen Fehler.
Befehl: "Tab schließen" Zeile: 2 Position: 0 Beschreibung: (10111) Invalid key name. - WSALookupServiceEnd wurde aufgerufen, obwohl ein solcher Aufruf noch verarbeitet wurde. Der Aufruf wurde abgebrochen.
Nehmen Sie die erforderlichen Korrekturen mit "Befehl erstellen" vor. --------------------------- OK ---------------------------
Aber der zweite genannte Befehl SendKeys "^{F4}" funktioniert.
Bleibt unter dem Strich die Frage, ob man das Topfenster ermitteln kann und in einer Variable speichern.
Bleibt unter dem Strich die Frage, ob man das Topfenster ermitteln kann und in einer Variable speichern.
Antwort:
1. ja, das tut Dragon von ganz alleine
2. nein, sondern man macht den Befehl anwendungsspezifisch. Damit hat man dann u.U. 20 verschiedene Befehle, die alle gleich heißen, alle in einer anderen Umgebung funktionieren und alle im Prinzip das gleiche tun – von der Verwaltung nicht besonders schön, aber genauso effektiv wie wenn man einen hätte, der erst ausliest, in welcher Anwendung sich der Cursor befindet und dann die entsprechende Tastenfolge sendet.
Noch ganz kurz zur Befehls Syntax: SendKeys nimmt die geschweiften Klammern, um bestimmte Tasten zu übergeben. Modifikatoren müssen vor den geschweiften Klammern stehen. Die Alternative, von Marius angegebene Syntax funktioniert vermutlich mit SendDragonKeys oder SendSystemKeys – aber da fehlt mir gerade die Motivation,es auszuprobieren.
Und unten noch mal der Skript-Text zur besseren Lesbarkeit - und um das Kopieren zu vereinfachen, for all the Guttenbergs in the world...
Rüdiger
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Declare Function GetForegroundWindow& Lib "user32" () Declare Function GetWindowTextLengthA& Lib "user32" _ (ByVal hwnd&) Declare Sub GetWindowTextA Lib "user32" _ (ByVal hwnd&, ByVal lpsz$, ByVal cbMax&) Function ActiveWindowTitle$() ActiveWindow = GetForegroundWindow() TitleLen = GetWindowTextLengthA(ActiveWindow) Title$ = Space$(TitleLen) GetWindowTextA ActiveWindow,Title$,TitleLen+1 ActiveWindowTitle$ = Title$ End Function Sub Main MsgBox ActiveWindowTitle$ End Sub
_______________________________________
Dragon Professional 16 auf Windows 10 Pro und Windows 11 SpeechMike Premium (LFH3500); Office 2019 Pro + Office 365 (monatliches Abo) HP ZBook Fury 17 G8 - i7-11800H - 24 MB SmartCache - 32 GB RAM - 1 TB SSD