Tastaturabfrage


FF_CheckKey()

Gibt den Code der Taste zurück, die im Zeitpunkt des Funktionsaufrufs gedrückt ist.
Zeigt keine Wirkung, wenn ein Dialog mit FF_ShowDialog angezeigt wird, kann aber verwendet werden, wenn ein Dialog mit FF_OpenDialog aufgerufen wurde.

Die Tastencodes sind grundsätzlich die ASCII-Wert der Tasten. Welche Taste welchen Code zurück gibt, kann auch mit diesem Script erprobt werden:
VBScript

  1. '** Start Dialog FF_CheckKey **
  2. FF_AddDialog "FF_CheckKey",194,30
  3. FF_AddControl "FF_CheckKey","Ermittelt den Rückgabewert von FF_CheckKey, wenn eine Taste gedrückt wird.","STATIC",2,1,192,11
  4. FF_AddControl "FF_CheckKey","Abbruch mit <ESC>","STATIC",2,18,76,11
  5. '** End Dialog FF_CheckKey **
  6.  
  7. Dim x, y
  8. FF_openDialog "FF_CheckKey"
  9. y = -1
  10.  
  11. Call Main
  12. FF_CloseDialog "FF_CheckKey"
  13.  
  14. Sub Main
  15. do
  16. x = FF_CheckKey()
  17. if x = 27 then ' Abbruch mit ESC
  18. Msgbox "Tastencode: " & x & vbNewLine & vbNewLine & "Script wird beendet."
  19. Exit Sub
  20. End If
  21. if x <> y and x <> 0 then
  22. MsgBox "Tastencode: " & x
  23. y = x
  24. End If
  25. Loop
  26. End Sub
  27.  

FF_GetAsyncKeyState()

Ermittelt, ob die angegebene Taste derzeit gedrückt wurde.

  1. If FF_GetAsyncKeyState(32) = True Then Msgbox "Die Leertaste wurde gedrückt."

Einige Tastencodes

Taste
Tasten-Code
Bemerkung
linke Maustaste
1
nur FF_GetAsyncKeyState
rechte Maustaste
2
nur FF_GetAsyncKeyState
mittlere Maustaste
4
nur FF_GetAsyncKeyState
Backspace
8

Enter
13

Shift
16

Strg
17

Shift Lock
20

ESC
27

Leertaste
32

Pfeil links
37

Pfeil hoch
38

Pfeil rechts
39

Pfeil runter
40

Einfg
45

Entf
46

0 … 9
48 … 57

A … Z
65 … 90

Windows-Taste
91

F1
112
FF_CheckKey ruft zugleich die FF-Hilfe auf
FF_GetAsyncKeyState ruft zugleich die Windows-Hilfe auf
F2 … F12
113 … 123

-
189

.
190

,
191


Beispiele zur praktischen Anwendung

Im Folgenden werden zwei Beispiele für die Verwendung der Tastaturabfrage aufgeführt:

  • Unterbrechen einer Bearbeitungsschleife durch Tastenbetätigung
  • Sonderstart eines Skripts bei festgehaltener Taste

Zuerst muss man sich für eine Taste entscheiden, die keine andere Reaktion hervorruft. Dies sollte man testen, bevor man sich für eine Taste entscheidet. Gut geeignet sind beispielsweise die Backspace-Taste und die Shift-Taste.

Unterbrechen einer Bearbeitungsschleife durch Betätigung der Backspace-Taste

Wird in einem Skript eine Bearbeitungsschleife für viele Bilder durchlaufen, ist es sinnvoll, dem Anwender eine Möglichkeit zu bieten, diese Schleife zu unterbrechen und dann abzufragen, ob die Schleife fortgesetzt werden oder das Skript abgebrochen werden soll.

  1. Bildanzahl = ubound(BildArray)
  2.  
  3. for n = 0 to Bildanzahl -1
  4.  
  5. 'vorzeitiger Abbruch?
  6. x = FF_CheckKey()
  7. if x = 8 then '8 = Backspace
  8. Antwort = msgbox("Von " & Bildanzahl +1 & " Bildern wurden bisher " & n & _
  9. " Bilder bearbeitet." & vbNewLine & vbNewLine & _
  10. "Soll die weitere Bearbeitung abgebrochen werden?",vbYesNo or vbQuestion,"Abfrage")
  11.  
  12. if Antwort = vbYes then exit for 'Schleife vorzeitig verlassen
  13. end if
  14.  
  15. 'Bildbearbeitung
  16. FF_LoadImage BildArray(n)
  17. 'Bearbeitung - wie auch immer
  18. FF_SaveImage BildArray(n), 0
  19. next

Besteht die Bearbeitung aus vielen Schritten, ist es sinnvoll, zwischen den einzelnen Schritten immer wieder eine Tastaturabfrage einzufügen.

  1. x = FF_CheckKey()

Sonderstart eines Skripts bei festgehaltener Shift-Taste

Es gibt Skripte, bei denen eine Bedienoberfläche stört. Nur im Sonderfall wird eine Bedienoberfläche benötigt, beispielsweise um Voreinstellungen vorzunehmen oder eine Kurzbeschreibung anzuzeigen. Um nicht ein zweites Skript dazu aufrufen zu müssen, kann man sozusagen einen Sonderstart erzeugen, der bei Start des Skripts mit festgehaltener Taste wirksam wird.
Hier wird gezeigt, wie man beim Sonderstart z.B. eine PDF-Datei aufrufen kann.

  1. Set WshShell = CreateObject("WScript.Shell")
  2.  
  3. if FF_CheckKey(16) then 'Shift-Taste
  4. Anzeige = """" & FF_GetScriptPath & "\AutorOrdner\Kurzbeschreibung.pdf" & """"
  5. WshShell.Run Anzeige,1,false
  6. 'evtl. Skript beenden (?)
  7. end if

Die Abfrage muss im Skript vor der Bearbeitung stehen. Nach Ausführung des Sonderstarts muss man festlegen, ob anschließend das Skript ausgeführt oder abgebrochen werden soll.

Statt FF_CheckKey kann auch FF_GetAsyncKeyState eingesetzt werden.
Die Abfrage muss im Skript vor der Bearbeitung stehen. Nach Ausführung des Sonderstarts muss man festlegen, ob anschließend das Skript ausgeführt oder abgebrochen werden soll.