Tastatureingabe einlesen / abfangen

KSebi

Grünschnabel
Hi tut-community,

und zwar habe ich mal eine Frage mit C++.

Ich habe ne Zeit lang mit Delphi programmiert, habe aber auch ein bischen Erfahrung mit C++.


Und zwar möchte ich mir ein Passwortschutz programmieren - das Prinzip ist sehr Simpel.

Ich habe ein Programm, dass im Vollbildmodus läuft und den Taskmanager deaktiviert.
Das reicht natürlich nicht.

Daher meine Frage: Wie kann ich abfragen, ob der Benutzer z.B. ALT+F4 drückt oder ALT+TAB um das Programm zu beenden. Dies soll natürlich verhindert werden, sonst bringt der Schutz ja nicht, wenn man den einfach ausschalten kann.

Das Programm soll nur schließen, wenn man eine bestimmte Zeichenfolge richtig eingibt. Hierzu möchte ich aber kein Edit-Feld nehmen, gerade weil das Programm im Vollbildmodus einfach nur eine Grafik anzeigen soll und den Benutzer hindern soll Aktionen durchzuführer, außer er gibt das Passwort ein um sich zu autorisieren.


Meine Fragen nochmal:
- Wie kann ich ALT+TAB und ALT+F4 abfangen und den close-querry verhindern?
- Wie kann ich ohne das Edit Feld Tastatureingabe einlesen?


Wie gesagt - hatte in letzter Zeit kaum was mit C++ zu tun, möchte das Proggy aber in C++ schreiben, obwohl ich Delphi besser kann. C++ wird einfach öfter verwendet und möchte einfach etwas lernen, wenn ich proggies Programmiere...

Vielen Dank für eine Antwort ;-)

S.Klose
 
erst einmal danke für deine antwort - aber leider bin ich in der c++ umgebung noch recht hilflos...

Ich denk werde mich mal wieder etwas reinlesen - wäre es aber vielleicht möglich, hier zu schreiben, wie ich das mit dem hook hinbekomme, dass ich bestimmte tastatureingaben abfangen kann?

Brauch mal ne Starthilfe :S

Vielen Dank schonmal :)
 
weiß denn niemand wie das geht :S

oje - das wird ja richtig lustig - ma sehn ob ich dann irgendwann ma schaffe ....

brauche dringend hilfee

danke schonma ;-)
 
Na, das ist doch gar nicht so schwer!;)
Als ersted definiert Du eine Callback-Methode für Keyboard Hooks, etwa so:
Code:
LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
  if((code < 0) || (code != VK_TAB && code != VK_F4))
    //code ist <0 und nicht VK_TAB oder VK_F4
    return CallNextHookEx(hKBHook, code, wParam, lParam);
  
  //code ist VK_TAB oder VK_F4
  if ((lParam & KF_ALTDOWN) == 0)
    // ALT ist nicht gedrückt!
    return CallNextHookEx(hKBHook, code, wParam, lParam);

  //ALT-Tab oder ALT-F4 wurde gedrückt!
  //andere Hook-Prozeduren aufrufen (muß nicht, aber sollte sein)
  CallNextHookEx(hKBHook, code, wParam, lParam);

  //Wert != 0 zurückgeben, damit die Nachricht nicht weiterverarbeitet wird
  return 1;
}
Dann mußt Du die Hook-Prozedur noch registrieren. Falls Du Dich gefragt hast, wo Du hKBHook herbekommst und was das ist: hier kommt die Auflösung!
Code:
HHOOK hKBHook;

hKBHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, 0, 0);
hKBHook muß in diesem Fall natürlich global sein. Ich glaube auch, die Funktion KeyboardProc darf keine nicht-statische Memberfunktion einer Klasse sein (wie Threadfunktionen), da bin ich mir aber nicht sicher.

Das alles ist natürlich nicht getestet. Für genauere Informationen siehe mal wieder MSDN, Stichworte 'SetWindowsHookEx', 'KeyboardProc' und 'Keystroke Message Flags'.
 
Zuletzt bearbeitet:
vieeeeeelen dank - werd dann gleich ma alles testen :D

danke für die mühe den code zu schreiben - bist eine große hilfe thhhhxxxxxxxx
 
Ich mag solche Art von Hilfestellungen net, wo man als Hilfscoder degradiert wird.
Wenn du der C++ Sprache nicht mächtig bist, dann rufe eine Schleife auf die solange ausgeführt wird, bis du deine Wirtsprache-Wissen entsprechend approximiert hast, welches für WinApi benötigt wird.
 
Ich normalerweise auch nicht.
Aber wenn ich wie hier nur mal schnell ein paar Zeilen reinhacken muß und er dann das Hook-Komzept evtl. besser versteht, dann mach ich das schon mal. Die 5 Minuten kann ich mir nehmen. Außerdem hab ich erstmal ein paar Tage gewartet, ob er's vielleicht selber schafft.
 
Also normalerweise frage icih auch nicht, wie der Quellcode für dies oder jenes ist, nur bin ich mit dem Hook gescheitert, gerade weil ich in letzter Zeit eher mit Delphi zu tun hatte.

Diese Hilfe mit dem Quellcode ist mir sehr nützlich, nicht nur für dieses Problem sondern generell - dafür nochmal vielen Dank.
 
Zurück