Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Globale Änderung der Tastaturbelegung (https://www.delphipraxis.net/125448-globale-aenderung-der-tastaturbelegung.html)

summer68 6. Dez 2008 02:07


Globale Änderung der Tastaturbelegung
 
Guten Morgen und Hallo,

vorne weg, möchte ich als Neuling um Nachsicht bitten.

Ich habe folgendes Problem:

Ich nutze zwei Arten von Programmen, die die Plus- und Minustaste des Nummernblocks jeweils vertauscht nutzen.
D.h. in dem einen Programm ist Plus-Taste "+" und in dem anderen "-". Dies gilt für die Minustaste umgekehrt. Was äußerst nervig ist, wenn ich sehr viele Daten eingeben und mal mit dem einen und mal mit dem anderen Programm arbeiten muss.

Nunmehr suche ich bereits Tag und Nacht seit meiner Anmeldung nach einer Lösung. Dabei bin ich auf die hook's gestoßen. Ich bin als Turbopascaldinosaurier schon ganz stolz, dass ich mittlerweile die Tastatureingabe zu einer Reaktion nutzen kann (Dank an assarbad). Für mehr reicht es leider "noch" nicht.

Deshalb die entscheidene Frage: Ist der Ansatz für mein Problem überhaupt der Richtige?
Ich stelle mir eine Lösung in Delphi vor, die den Tastentausch wahlweise eliminiert.

Für Eure Tipps, Anregungen und Hilfe schon mal vielen Dank

Torsten

Medium 6. Dez 2008 05:48

Re: Globale Änderung der Tastaturbelegung
 
In diesem Thread geht es ab ca. Seite 2 um etwas ähnliches. Ich denke dabei in diese Richtung:
0) Globaler Tastatur-Hook vorausgesetzt
1) Top-Level Fenster ermitteln
2a) Ist es das in dem die Eingabe okay ist, einfach tatenlos die Hookchain laufen lassen
2b) Ist es das in dem die Tasten getauscht werden sollen, weiter mit 3
3) Durch in o.g. Thread genannte Möglichkeit die Chain unterbrechen (=der Tastendruck kommt nicht im Programm an)
4) Geänderte Taste mittels MSDN-Library durchsuchenSendInput auslösen

Ich bin allerdings nicht sicher, ob man nicht gleich einen MSDN-Library durchsuchenLowLevel Hook (2. Eintrag) nehmen kann, bzw. ob Änderungen an den Werten in der übergebenen MSDN-Library durchsuchenKBDLLHOOKSTRUCT eine Auswirkung auf die weitere Verarbeitung haben. Dann könnte man einfach dort ansetzen, und müsste nicht erst noch mit SendInput rumfummeln. Nachteil bei den LowLevel Hooks: Man muss ein paar Konstanten und Structs selbst deklarieren, da man diese in Borland wohl für nicht sehr wichtig hielt ;).

toms 6. Dez 2008 06:05

Re: Globale Änderung der Tastaturbelegung
 
Zitat:

Zitat von Medium
4) Geänderte Taste mittels MSDN-Library durchsuchenSendInput auslösen

Ich bin allerdings nicht sicher, ob man nicht gleich einen MSDN-Library durchsuchenLowLevel Hook (2. Eintrag) nehmen kann, bzw. ob Änderungen an den Werten in der übergebenen MSDN-Library durchsuchenKBDLLHOOKSTRUCT eine Auswirkung auf die weitere Verarbeitung haben. Dann könnte man einfach dort ansetzen, und müsste nicht erst noch mit SendInput rumfummeln.

Ein WH_GETMESSAGE Hook erlaubt es die Nachricht abzuändern.

Zitat:

Zitat von msdn
The GetMsgProc hook procedure can examine or modify the message. After the hook procedure returns control to the system, the GetMessage or PeekMessage function returns the message, along with any modifications, to the application that originally called it.


summer68 6. Dez 2008 19:37

Re: Globale Änderung der Tastaturbelegung
 
Hallo,

vielen Dank.

Die Hook's funktionieren und damit lassen sich auch einige andere ungelöste Anforderungen, vorher gar nicht bedachte, bewerkstelligen.

Auf Grund der Tipps erledige ich jetzt erstmal meine "Hausaufgaben" und berichte.

Gruß


Torsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz