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
'** Start Dialog FF_CheckKey **
FF_AddDialog "FF_CheckKey",194,30
FF_AddControl "FF_CheckKey","Ermittelt den Rückgabewert von FF_CheckKey, wenn eine Taste gedrückt wird.","STATIC",2,1,192,11
FF_AddControl "FF_CheckKey","Abbruch mit <ESC>","STATIC",2,18,76,11
'** End Dialog FF_CheckKey **

Dim x, y
FF_openDialog "FF_CheckKey"
y = -1
 
Call Main
FF_CloseDialog "FF_CheckKey"
 
Sub Main
    do
        x = FF_CheckKey()
        if x = 27 then                   ' Abbruch mit ESC
            Msgbox "Tastencode:   " & x & vbNewLine & vbNewLine & "Script wird beendet."
            Exit Sub
        End If
        if x <> y and x <> 0 then
            MsgBox "Tastencode:   " & x
            y = x
        End If
    Loop
End Sub
 

FF_GetAsyncKeyState()

Ermittelt, ob die angegebene Taste derzeit gedrückt wurde.
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.
Bildanzahl = ubound(BildArray)
 
for n = 0 to Bildanzahl -1
 
       'vorzeitiger Abbruch?
       x = FF_CheckKey()
       if x = 8 then              '8 = Backspace
              Antwort = msgbox("Von " & Bildanzahl +1 & " Bildern wurden bisher " & n & _
             " Bilder bearbeitet." & vbNewLine & vbNewLine & _
             "Soll die weitere Bearbeitung abgebrochen werden?",vbYesNo or vbQuestion,"Abfrage")
 
             if Antwort = vbYes then exit for  'Schleife vorzeitig verlassen
       end if
 
       'Bildbearbeitung
       FF_LoadImage BildArray(n)
       'Bearbeitung - wie auch immer
       FF_SaveImage BildArray(n), 0
next
 
Besteht die Bearbeitung aus vielen Schritten, ist es sinnvoll, zwischen den einzelnen Schritten immer wieder eine Tastaturabfrage einzufügen.
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.
Set WshShell = CreateObject("WScript.Shell")
 
if FF_CheckKey(16) then    'Shift-Taste
    Anzeige = """" & FF_GetScriptPath & "\AutorOrdner\Kurzbeschreibung.pdf" & """"
    WshShell.Run Anzeige,1,false
    'evtl. Skript beenden (?)
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.