AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Absolut jeden Tastendruck empfangen

Ein Thema von Cicaro · begonnen am 8. Jun 2005 · letzter Beitrag vom 9. Jun 2005
Antwort Antwort
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#1

Absolut jeden Tastendruck empfangen

  Alt 8. Jun 2005, 10:16
Hallo!

Wie kann ich in meinem Formular, das den Focus NICHT hat, weil es beispielsweise minimiert wurde, erkennen, ob eine Taste gedrückt wurde (Tastatur und/oder Maus) ? Es soll also auf Tastendruck in fremden Formularen oder auf dem Desktop reagieren können.

Mit GetKeyboardState scheint das nicht zu funktionieren. Gibt es andere Möglichkeiten ?
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: Absolut jeden Tastendruck empfangen

  Alt 8. Jun 2005, 10:33
Zitat von Cicaro:
Wie kann ich in meinem Formular, das den Focus NICHT hat, weil es beispielsweise minimiert wurde, erkennen, ob eine Taste gedrückt wurde (Tastatur und/oder Maus) ? Es soll also auf Tastendruck in fremden Formularen oder auf dem Desktop reagieren können.
Mit globalen Hooks kannst du auch auf anderen Forms Eingaben abfangen (und ggf. weiterleiten).

Zitat von Cicaro:
Mit GetKeyboardState scheint das nicht zu funktionieren. Gibt es andere Möglichkeiten ?
S.o.
Aber was ist das Ziel? Vielleicht geht's auch ganz anders?!
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#3

Re: Absolut jeden Tastendruck empfangen

  Alt 8. Jun 2005, 10:48
Zitat von Olli:
Zitat von Cicaro:
Wie kann ich in meinem Formular, das den Focus NICHT hat, weil es beispielsweise minimiert wurde, erkennen, ob eine Taste gedrückt wurde (Tastatur und/oder Maus) ? Es soll also auf Tastendruck in fremden Formularen oder auf dem Desktop reagieren können.
Mit globalen Hooks kannst du auch auf anderen Forms Eingaben abfangen (und ggf. weiterleiten).
In Screen, Mouse und Application hab ich auch schon nach passenden Methoden gesucht.

Zitat von Olli:
Zitat von Cicaro:
Mit GetKeyboardState scheint das nicht zu funktionieren. Gibt es andere Möglichkeiten ?
S.o.
Aber was ist das Ziel? Vielleicht geht's auch ganz anders?!
Meine Strategie mit GetKeyboardState war, dass ich 'nen Timer am Laufen hatte, in desses Ereignisprozedur ich diese Funktion aufgerufen hab'. Einen Tastendruck konnte ich nur feststellen, solange das Formular den Focus besaß.
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender:TObject);
begin
  Beep;
  GetKeyboardState(...);
  // usw.
end;
Den Ton höre ich in jeder Lage des Formulars, den Tastendruck kann ich im Fall ganz oben nicht empfangen. Wahrscheinlich ermittelt GetKeyboardState nur Tastendruck, der für das Formular selbst bestimmt war.

Ziel des ganzen ist, dass ich bei jedem Tastendruck, der während der Arbeit am PC gemacht wird, einen kleinen Prozess durchführe.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#4

Re: Absolut jeden Tastendruck empfangen

  Alt 8. Jun 2005, 11:06
Puh. Du stellst einen vor Aufgaben. Brauchst du wirklich alle Tastendrücke?

Mach dir folgendes bewußt: Nur das aktuelle Fenster bekommt die Eingaben, weil es potentiell tausende (alle Childs usw.) Fenster gibt die dann alle jeweils die Bearbeitung machen müßten. Du erhöhst von einem Fenster auf 2 (deins und das aktive) im schlechtesten Fall. Allerdings willst du etwas während des Tastendrucks machen. Das sollte sehr sehr sehr wenig sein. Ansonsten könnte es passieren, daß das Programm nur aufgrunddessen das System verlangsamt (insbesondere wenn du die Verarbeitung vor dem Weiterreichen des Tastendrucks machst).

Fensterhooks haben mit Methoden der genannten Klassen nix zu tun.
http://assarbad.net/de/stuff/tutorials/hooks/
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#5

Re: Absolut jeden Tastendruck empfangen

  Alt 8. Jun 2005, 11:34
Der Prozess, an den ich da denke, ist wirklich kurz und an die Verlangsamung habe ich auch schon gedacht.
Ich will die Eingaben ja filtern und bestimmte Tasten/Tastenkombinationen registrieren (egal ob vor oder nachdem das fremde Formular das Event erhält).

Kann man eigentlich Zeiger auf wildfremde Formulare erhalten ? Wenn das ginge, dann sehe ich 'ne Möglichkeit mein Problem zu lösen...
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#6

Re: Absolut jeden Tastendruck empfangen

  Alt 8. Jun 2005, 11:40
Zitat von Cicaro:
Kann man eigentlich Zeiger auf wildfremde Formulare erhalten ? Wenn das ginge, dann sehe ich 'ne Möglichkeit mein Problem zu lösen...
Prinzipiell ja, dürfte aber sehr kompliziert werden. Macht aber auch nur Sinn, wenn du die gleiche VCL/Compiler-Version benutzt und den Prototypen des Forms (inkl. aller Methoden) kennst.
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#7

Re: Absolut jeden Tastendruck empfangen

  Alt 9. Jun 2005, 09:34
Hooks und Zeiger hin oder her ich hab' eine einfache, schnelle und eine sehr praktische Lösung für mein Problem: GetAsyncKeyState()

Delphi-Quellcode:
// Beispiel Alt + D

uses Windows;

if (GetAsyncKeyState(VK_MENU) < 0) and (GetAsyncKeyState(Ord(D)) < 0) then ;
Nebenbei weiß ich auch, wie ich Tastatureingaben 'systemweit' versenden kann: Keybd_Event()
Delphi-Quellcode:
// Beispiel Alt + D

uses Windows;

Keybd_Event(VK_MENU,0,0,0);
Keybd_Event(Ord('D'),0,0,0);
Hab' bloß noch nicht mit den 3 anderen Parametern von Keybd_Event rumgealbert.

Danke trotzdem für die Mühe, Olli !

[edit]
Ach ja!
Da gab es ja noch die Mausevents. Hab' bis jetzt nix dazu gefunden. Bitte um Hilfen, wenn jemand welche hat !

Wahrscheinlich verstecken sich die richtigen Prozeduren/Funktionen in der Unit Windows.
[/edit]
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:23 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