Autor |
Beitrag |
Gary 0n T0ur
      
Beiträge: 17
|
Verfasst: Mo 10.01.11 15:39
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!!!
MFG Gary Moderiert von Kha: Topic aus C# - Die Sprache verschoben am Mo 10.01.2011 um 19:50
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Di 11.01.11 23:48
Hallo,
willst du die Tasten generell sperren oder nur für dein Programm?
Gruß
|
|
Gary 0n T0ur 
      
Beiträge: 17
|
Verfasst: 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
      
Beiträge: 46
Erhaltene Danke: 3
|
Verfasst: 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
      
Beiträge: 339
Erhaltene Danke: 20
Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
|
Verfasst: 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) 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
      
Beiträge: 46
Erhaltene Danke: 3
|
Verfasst: Do 13.01.11 22:59
Greenberet hat folgendes geschrieben : |
Das ist so nicht ganz richtig.
Wenn er einen Low Level Keyboard Hook(WINAPI) 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. |
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
      
Beiträge: 339
Erhaltene Danke: 20
Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
|
Verfasst: 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
      

Beiträge: 4796
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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. www.codeproject.com/.../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
      
Beiträge: 46
Erhaltene Danke: 3
|
Verfasst: 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
      
Beiträge: 339
Erhaltene Danke: 20
Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
|
Verfasst: 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.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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?
|
|