AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Tastaturhook -> Tasten manupulieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tastaturhook -> Tasten manupulieren

Ein Thema von webby · begonnen am 16. Apr 2003 · letzter Beitrag vom 20. Jun 2003
Antwort Antwort
Seite 1 von 3  1 23      
webby
(Gast)

n/a Beiträge
 
#1

Tastaturhook -> Tasten manupulieren

  Alt 16. Apr 2003, 11:29
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?
  Mit Zitat antworten Zitat
dadu

Registriert seit: 17. Apr 2003
Ort: Dattenberg
102 Beiträge
 
Delphi 2005 Personal
 
#2
  Alt 1. Mai 2003, 19:54
Ich hoffe das hilft dir, wenn nicht sag bescheid!
Angehängte Dateien
Dateityp: zip ersetzen_durch_abk.zip (6,6 KB, 86x aufgerufen)
  Mit Zitat antworten Zitat
webby
(Gast)

n/a Beiträge
 
#3
  Alt 1. Mai 2003, 20: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
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#4
  Alt 18. Jun 2003, 20: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...
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
webby
(Gast)

n/a Beiträge
 
#5
  Alt 18. Jun 2003, 20: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...
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#6
  Alt 18. Jun 2003, 21: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
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
webby
(Gast)

n/a Beiträge
 
#7
  Alt 19. Jun 2003, 09: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...
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#8
  Alt 19. Jun 2003, 10:54
Jo, habs gefunden.
Muss es mir mal genauer ansehen.
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Minz

Registriert seit: 19. Dez 2002
476 Beiträge
 
#9
  Alt 19. Jun 2003, 13: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?

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
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#10
  Alt 19. Jun 2003, 13: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.
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:34 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