2009-08-18 12 views
1

Gibt es eine Möglichkeit, die Ctrl +Alt + Del Tastenkombination zu handhaben. Nehmen wir zum Beispiel in einer Quiz-Anwendung (Win Forms), sollte der Benutzer nicht in der Lage sein, zu anderen Fenstern zu wechseln, bis der Test beendet ist.Wie zu stoppen die Tastatur auf einem C# win streicht Forms-Anwendung (Strg + Alt + Entf)

Ich bin in der Lage, die Ctrl und Alt Tastenanschläge einzeln unter Verwendung von C# Standardeigenschaften zu erfassen. aber sobald sie Benutzer den Del Schlüssel schlagen. Das Steuerelement wird aus meiner Anwendung entfernt und Windows verarbeitet es.

Alle Gedanken wären hilfreich.

danke.

+0

Eine bessere Lösung ist ein Test beaufsichtigte haben, wie in einer Bibliothek usw. –

+1

Das ist nur eine von vielen Tastenkombinationen ist ... STRG + Shift + Esc zieht der Taskmanager und sie können von dort aus ein neues Programm starten. – Hugoware

+1

Wird die Anwendung auf einem Kioskcomputer gehostet oder auf einem Heimcomputer installiert? –

Antwort

2

Ich denke nicht, dass dies ein guter Ansatz ist.

Sie entwickeln eine Anwendung für den Benutzer und sollten nicht versuchen, seine allgemeinen Aktionen zu behindern.

Für Alt + Strg + Entf Tastenkombination lesen this Artikel.

+1

Wenn das der Fall ist, können alle Online-Studenten, die den Test aufnehmen, die Antwort von Google bekommen (indem sie zum Browser wechseln). – vijaysylvester

+0

Sie können eine andere Maschine verwenden oder ein Buch auch verwenden, um die Antworten zu erhalten. – rahul

+1

Der Zugriff auf eine andere Maschine oder ein Buch kann gehandhabt werden. Wenn Sie Strg-Alt-Entf nicht blockieren und es ihnen erlauben, eine Browser-Instanz auszuführen, ist das viel zu einfach. – Jim

2

AFAIK, Strg + Alt + Entf erzeugt einen Hardware-Interrupt und kann nicht über Softwareanwendungen gehandhabt werden. Wahrscheinlich kann dies über System-Level Keyboard Hooks gehandhabt werden, aber ich bin mir da auch nicht so sicher.

+0

nein, System-Level-Haken fangen es nicht –

5

Basierend auf anderen Antworten scheint es, dass dies möglich ist. Obwohl ich das sehr ablehne. Nehmen Sie zum Beispiel an, dass Ihr Programm aus irgendeinem Grund hängen sollte (Gott bewahre ...). Dann hätten Sie die Situation, dass das einzige, was der Benutzer tun kann, ist, den Computer mit dem Netzschalter auszuschalten (oder den Stecker zu ziehen ...).

Es ist für einen guten Grund, dass dies zu tun ist schwierig, und die Methoden sind schlecht dokumentiert ...

Der einzige Weg, dies wie die Art und Weise, zu gehen aussieht, ist der Kommentar von Pierre-Alain Vigeant Wenn dies ein Kiosk-Computer oder etwas ist. Dann wäre es sinnvoll, dies zu tun!

+0

Aber ich nahm einen Online-Test auf. es hatte die zitierten Funktionen eingebaut – vijaysylvester

+0

Siehe RRUZ's Antwort, der zweite Link ist erstaunlich – Andomar

+0

@Andomar - Ja, ich habe diesen Link angesehen. Und die Lösung war eine von zwei: 1. Deaktivieren Sie den Task-Manager in der Registrierung (nicht Trap Keybord-Ereignis), die eine Meldung angezeigt, dass es deaktiviert wurde. 2. Schreiben Sie Ihre eigene MyGina.dll, die die Standardfunktionalität von Ctr + Alt + Entf überschreibt. Beide Methoden "hacken" das System durch permanente Änderungen am System. Ich denke, keiner von diesen ist im Bereich der nur deaktivieren Sie die Tastenfolge während der Durchführung einer Quiz-Anwendung. – awe

-1

Setzen Sie Form.TopMost auf True, rufen Sie jede Millisekunde Form.Activate() auf, und erhöhen Sie die Prozess- und Eingabe-Threadprioritäten.

(Und siehe da, die Armen Benutzer, die Ihre Anwendung abstürzt auf.)

+1

Dies würde nicht mit dem Control + Alt + Del Problem helfen. – BlueSilver

+0

+1, aber es würde das Problem des Benutzers lösen –

0

Hmm, altes Thema ohne eine wirkliche Antwort.

Kurzversion:

  • Sie benötigen Treiber Fallensystem Tastenanschläge verwenden
  • so zu tun, verwenden Sie die Interception Api, die zu diesem Zweck signierte Treiber zur Verfügung stellt.
  • Um in der Lage sein verwenden Interception Sie das WDK (Windows Driver Kid)
  • Um zu testen, Ihr Programm verwenden, um eine virtuelle Maschine mit einem Testsystem herunterladen und installieren müssen. Sie möchten keine Treiber in Ihrem laufenden Produktivsystem testen.

Lange Version:

Ja, ist es möglich. Um diese Tastenkombination abfangen zu können, müssen Sie einen Tastaturtreiber in der Kernel-Ebene bereitstellen. Um zu erklären, warum: Im Allgemeinen gibt es zwei verschiedene Arten von Tastenanschlägen in Windows. Es gibt Systemanschläge (WM_SYSKEYDOWN oder WM_SYSKEYUP) und Nicht-System-Tastenanschläge (WM_KEYDOWN oder WM_KEYUP). Nur die Nicht-System-Tastenanschläge können durch einen Haken unterbrochen werden. Diese Tastendrucknachrichten werden im Treiber generiert und dann in die Systemnachrichtenwarteschlange übertragen. Wenn sich ein WM_SYSKEYDOWN oder WM_SYSKEYUP in dieser Warteschlange befindet, besteht keine Möglichkeit, sie zu entfernen, bevor Windows selbst damit umgehen kann.

Was kann ich tun, um zu verhindern, dass System-Key-Strokes in die SMQ gedrückt werden? Stellen Sie einen signierten Treiber bereit, um diese zu filtern. Einen Fahrer selbst zu erstellen und zu unterschreiben, ist nicht das Einfachste, was man tun kann. Aber es gibt APIs, die wir verwenden können. Zum Beispiel: Interception von oblita. Diese API bietet signierte Treiber für die Interaktion mit den Tastaturen oder den unteren Treibern.

Referenz für Schlüsselereignisse unter Windows: https://msdn.microsoft.com/en-us/library/windows/desktop/ms646267(v=vs.85).aspx