Entwickler-Ecke
Sonstiges (.NET) - C# Tastatur bzw. eine Tasten Sperren
Gary 0n T0ur - Mo 10.01.11 15:39
Titel: C# Tastatur bzw. eine Tasten Sperren
Schönen Nachmittag wünsch ich euch allen.
Hab mal wieder eine Frage an euch. Und zwar:
Könnt ihr mir bitte erklären wie man mit C# einzelne Tasten Sperrt oder die ganze Tastatur und auch Tasten Kombinationen z.B. Taskmanager (Strg + Alt + Entf). Ein paar Tipps wären sehr nett.
Danke euch!!! :D :D :D
MFG Gary
Moderiert von
Kha: Topic aus C# - Die Sprache verschoben am Mo 10.01.2011 um 19:50
danielf - Di 11.01.11 23:48
Hallo,
willst du die Tasten generell sperren oder nur für dein Programm?
Gruß
Gary 0n T0ur - Do 13.01.11 09:18
hallo,
ich will generell Tasten sperren und auch Tasten Kombis z.b "strg + alt +entf".
geht das nicht mit "KeyHook", könnt ihr mir das genauer erklären?
Danke
Mfg Gary
ThoMa - Do 13.01.11 15:54
Hallo Gary,
Du solltest erst einmal gucken wie Windows einen Tastaturdruck verarbeitet (WM_Messages) und Dir dann klar machen, dass ein Hook nichts anderes ist als ein Algorithmus durch welchen die entsprechenden Messages erst laufen bevor sie an darunterliegende Elemente weitergereicht werden.
Also kannst Du in einem Hook auch die Nachrichten filtern, die weitergereicht werden sollen, oder eben dies unterbinden. Spezielle Fragen werden Dir hier sicherlich gerne beantwortet.
Mit der Tastenkombination Strg+Alt+Entf wirst Du mit dem Ansatz weniger Glück haben, da die Tastenkombination einen Interrupt wirft. Also müsstest Du schon die IDT (Interrupt Descriptor Table) verbiegen und eine eigene Funktionalität dort einschleusen. Mit C# hast Du an der Stelle aber keine Chance.
Grüße
Thorsten
Greenberet - Do 13.01.11 20:13
ThoMa hat folgendes geschrieben : |
Hallo Gary,
Du solltest erst einmal gucken wie Windows einen Tastaturdruck verarbeitet (WM_Messages) und Dir dann klar machen, dass ein Hook nichts anderes ist als ein Algorithmus durch welchen die entsprechenden Messages erst laufen bevor sie an darunterliegende Elemente weitergereicht werden.
Also kannst Du in einem Hook auch die Nachrichten filtern, die weitergereicht werden sollen, oder eben dies unterbinden. Spezielle Fragen werden Dir hier sicherlich gerne beantwortet.
Mit der Tastenkombination Strg+Alt+Entf wirst Du mit dem Ansatz weniger Glück haben, da die Tastenkombination einen Interrupt wirft. Also müsstest Du schon die IDT (Interrupt Descriptor Table) verbiegen und eine eigene Funktionalität dort einschleusen. Mit C# hast Du an der Stelle aber keine Chance.
Grüße
Thorsten |
Das ist so nicht ganz richtig.
Wenn er einen
Low Level Keyboard Hook(WINAPI) [
http://msdn.microsoft.com/en-us/library/ms644985%28v=vs.85%29.aspx] verwendet, dann kann er strg+alt+entf Problemlos blocken. Ich muss gestehen, ich habe das bis jetzt nur in C++ gemacht. In C# sollte es allerdings auch möglich sein.
ThoMa - Do 13.01.11 22:59
Hm... Hooks fangen doch nur Windows-Nachrichten ab und Strg+Alt+Entf löst doch einen Interrupt aus.
Bist Du Dir wirklich sicher, dass sich damit Strg+Alt+Entf blockieren lässt? Das dürfte nämlich eigentlich nicht so sein.
Greenberet - Fr 14.01.11 00:57
ja bin ich.
Was du meinst ist ein KeyboardHook ( WH_KEYBOARD ). Bei diesem werden die Nachrichten gesendet sobald man über GetMessage und PeekMessage ein Keyboard Event empfängt( WM_KEYUP, WM_KEYDOWN ).
Ich meine einen LowLevelKeyboardHook ( WH_KEYBOARD_LL ). Bei diesem wird die Funktion aufgerufen sobald ein Tastaturereignis auftritt. Die Meldungen kommen direkt vom Treiber( oder wenn keybd_event aufgerufen wird).
MSDN LowLevelKeyboardProc Callback Function hat folgendes geschrieben: |
The keyboard input can come from the local keyboard driver or from calls to the keybd_event function |
Th69 - Fr 14.01.11 14:14
Hallo greenberet,
da scheinst du dich zu irren (oder aber noch mit Win9x-Systemen getestet zu haben), denn die Tastenkombination "Ctrl+Alt+Del" wird definitiv nicht (bei WinNT-Systemen) an die Keyboard Hook Chain weitergeleitet, s.a.
http://www.codeproject.com/KB/winsdk/AntonioWinLock.aspx (unter "II. Disabling System Keys").
Es ist zwar möglich den TaskManager zu sperren (mittels Registry-Eintrag), aber dies verhindert trotzdem nicht die Behandlung von Ctrl+Alt+Del (auch wenn der TaskManager bei dieser Tastenkombi standardmäßig aufgerufen wird).
ThoMa - Fr 14.01.11 14:22
Hallo,
also - ich habe es spaßeshalber mal ausprobiert. Strg+Alt+Entf ist auch durch einen Low Level Keyboard Hook nicht abzufangen. Strg+Esc (Taskmanager) & Alt+Tab und so Sachen kann ich dadurch abfangen, aber nicht Strg+Alt+Entf. Hier müsste ich an die IDT oder eben die Befehlszuordnung in der Windows-Registry aushebeln. Nur wenn ich in der IDT den Routinenzeiger auf eine eigene Routine umbiege, gelingt es, Strg+Alt+Entf abzufangen.
Grüße
Thorsten
Greenberet - So 16.01.11 13:58
Okay, mein Fehler...
ich dachte echt das strg+alt+entf damit geht. Macht natürlich auch irgendwie Sinn, dass es nicht geht.
Delete - So 16.01.11 21:14
Um Strg+Alt+Entf abzufangen benötigt man einen eigenen Tastaturtreiber. Und da ist auch gut so.
Aber darf ich mal fragen, was dieser Unfug wieder soll?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!