Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Tastaturhook -> Tasten manupulieren (https://www.delphipraxis.net/4126-tastaturhook-tasten-manupulieren.html)

webby 16. Apr 2003 10:29


Tastaturhook -> Tasten manupulieren
 
Hallo,
vielleicht sollte ich euch erst einmal meine Problemstellung beschreiben:
Da ich ja in Wettberwerben in Tastschreiben (= Tastaturschreiben) teilnehme, bin ich natürlich sehr interessiert in Möglichkeiten wie ich schneller werde.
Ein paar gewürfelte Menschen haben sich schon ausgedacht, in Word die Autokorrektur-Funktion zu benutzen, damit sie häufige Wörter abkürzen können. Ein paar Beispiele:
der -> r
die -> i
das -> s
werden -> wn
unseren -> usn
Es sieht zwar irgenwie aus als würde es nicht viel bringen, doch wenn man Texte genauer ansieht, wird man feststellen, dass viele solche Wörter vorhanden sind und man so in der Minute 50-100 Anschläge mehr bekommen kann.
Nun nochmal zurück, natürlich gibt man sich als Programmierer nicht mit dieser simplen Word-Funktion zufrieden. :) Und es hat natürlich noch einen anderen Grund: Ich kann die Abkürzungen nur in Word benutzen, will ich aber beim Chatten oder bei Fragen in die Delphi-Praxis schreiben muss ich wieder alles ausschreiben. :)

Ich dachte jetzt daran, dass ich vielleicht einen Tataturhook dafür benutzen sollte, aber wie manipulier ich dann die Tasten. Das blöde ist halt z. B. bei "werden" was ja mit "wn" abgekürzt wird, da müsste ich erst wieder das "n" löschen...

Könnt ihr mir helfen?

dadu 1. Mai 2003 18:54

Liste der Anhänge anzeigen (Anzahl: 1)
Ich hoffe das hilft dir, wenn nicht sag bescheid!

webby 1. Mai 2003 19:03

Erst mal Danke für den Quellcode!

Leider hat er aber einen kleinen Bug:
Er ersetzt auch, wenn ich nur "n" eintippe... :-/

Aber die Idee an sich ist nicht schlecht!
Ich glaub ich kann den jetzt auch selber ausbauen!
Thx

S - tefano 18. Jun 2003 19:34

@dadu:
Gibts vielleicht irgendeine Systemmessage auf die man reagieren kann, um die Tastendrücke zu lesen?
Mit nem Timer is das ziemlich ungenau, weil man ja nich in gleichen Intervallen Tasten drückt...

webby 18. Jun 2003 19:49

Naja, ich denke mal man kommt nicht drum rum für jede Taste einen Hook zu schreiben, oder?
Ich selber hab mein kleines Projekt eingestellt, weil ich jetzt eh mehr oder weniger komplett auf Linux umgestiegen bin... :)

S - tefano 18. Jun 2003 20:27

Diesen Code verwendet dadu um rauszufinden, ob und wenn ja welche Taste (in diesem Code erstmal nur Buchstaben) gedrückt wurde:

Delphi-Quellcode:
  //65 - 96 = Chars A- '
  for i := 65 to 96 do
    //Wenn eine Taste gedrückt wird
    if (GetasyncKeyState(word(i)) <> 0) then
      str := str + char(i);
Das Ganze hat er in einen Timer gesetzt, damit man alles mitbekommt.
Gibts halt nur das Problem, dass man wenn man den Timer z.B. auf 10ms stellt, das Programm dann glaubt eine Taste (die man halt nur etwas länger gedrückt hat, aber trotzdem nur einen Buchstaben geschrieben hat) wäre häufiger als 1 Mal gedrückt worden.
Wenn man den Timer dann aber zu langsam einstellt (z.B. 100ms), werden manche Tasten nicht empfangen weil sie außerhalb des Intervalls gedrückt werden.
Da man ja nicht immer in selben Abständen beim Tippen Tasten betätigt, ist es mit einem Timer nicht sicher möglich, jeden Tastendruck zu erwischen.
Und deshalb frag ich mich halt, obs irgendeine Art systemweite Message gibt, die bei einem Tastendruck ausgelöst wird.
Baut man dann oben Code in eine Ereignisbehandlung für so eine Message ein, hat man wohl eine bessere Trefferquote.
Son Programm würd mich nämlich auch mal interessieren, aber wenn das Programm manchmal meine Abkürzungen nich erwischt, dann bringts mir ja auch nix...

Bis dann,

S - tefano

webby 19. Jun 2003 08:13

Ich hab dein Problem verstanden, das hatte ich ja auch...
Naja, aber man braucht wahrscheinlich doch nicht, so wie ich es oben geschrieben habe, für jede Taste einen einzelnen Hook. Ein kompletter Tastaturhook müsste nämlich seine Dienste erfüllen...
Hier im Forum müsste aber schon stehen, wie man einen solchen Tastaturhook bastelt...

S - tefano 19. Jun 2003 09:54

Jo, habs gefunden.
Muss es mir mal genauer ansehen.

Minz 19. Jun 2003 12:24

verstehe dat Problem evtl nicht ABER:

Dass Ihr eine Nachricht bekommt, wenn eine Tate gedrückt wird
setze ich jetzt mal voraus.

Außerdem setze ich voraus, dass Ihr wisst um welche Taste es
sich handelt.

Wo ist dann dat Problem die Tasten in einem String zwischen-
zuspeichern und bei jedem neuen Empfang den String auf eine
Abkürzung zu überprüfen? :freak:

Da brauch man dann auch nix mit Timern und so...
Achso...der String muss natürlich dann gelöscht werden,
wenn eine Textausgabe erfolgte, die endgültig ist, also
eine Abkürzung in einen Text umgewandelt wurde, oder halt
ein Buchstabe als solcher feststeht.

Gruß Minz

S - tefano 19. Jun 2003 12:39

Das Problem liegt nicht da wo dus beschrieben hast, sondern ganz an der "Wurzel", die du auch in deinem Post erwähnt hast.
Das Problem ist halt eine Message zu bekommen wann eine Taste gedrückt worden ist, man will ja darauf reagieren.
Aber das geht halt mit Hooks. Also ist das Problem fast gelöst. Nur, dass es so wie in Assarbads Tutorial beschrieben unter NT- Systemen nich geht.
Zumindest bei mir nich, weil in meiner Windows- Unit die entsprechende Hook- Definition fehlt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 Uhr.
Seite 1 von 3  1 23      

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