Ich habe eine Bildschirmtastatur geschrieben. Die überwacht mit einem Hook, wodrauf der Benutzer geklickt hat und wertet den Klick aus, ob es ein Element ist, dass Tastatureingaben verarbeitet.
Wenn der Benutzer jetzt auf einen Button in meinem Programm geclickt hat (also die entsprechende Taste auf der Tastatur), hat eben dieser Button den Fokus.
Jetzt gebe ich mit
SetForegroundWindow(actHWND); dem letzten Element, das Tastatureingaben verarbeitet, den Fokus (SetFocus klappt aus irgendeinem Grund nicht immer) und löse ein Keyboardevent aus.
Delphi-Quelltext
1: 2: 3: 4: 5:
| if SetForegroundWindow(actHWND) then begin keybd_event(VK_BACK, MapVirtualKey(VK_BACK, 0), 0, 0); keybd_event(VK_BACK, MapVirtualKey(VK_BACK, 0), KEYEVENTF_KEYUP, 0); end; |
Mein Problem ist jetzt, dass ich über die Abfrage der Klassennamen nur auf bekannte Klassen(Namen) reagieren kann (bzw. den Fokus setzen kann). Sobald eine Anwendung kommt, die andere Klassennamen besitzt, stehe ich mit dieser Methode auf dem Schlauch. Genau so gibt es ja noch andere Felder, die Tastatureingaben akzeptieren/verarbeiten als Edits, Memos, Combos (unter Trillian z.B. heißt ein einfaches Edit-Feld "Trillian Displa").