bestimmte Tasten deaktivieren



  • hmm aber über Str-Alt-Entf kann er ja den Rechner einfach neustarten oder
    ausschalten ... das sollte auch vermieden werden...

    und er sollte auch keine andere Programme über die die Win Taste starten,
    zum Beispiel: Solitär etc.

    Deshalb habe ich schonmal die Taskleiste ausgeblendet.
    Taugt aber net viel, wegen der Win Taste



  • Wie gesagt, zieh den Tastatur-Stecker raus, dann hast du Ruhe 😃
    (oder du verzichtest auf Windows und startest das Programm direkt von der DOS-Oberfläche - dann hast du zwar keine vernünftige Grafik mehr, aber dafür gibt's auch kein Startmenü mehr, um das du dir Sorgen machen mußt)

    Für alles andere benötigst du tiefergehendes Verständnis für das Betriebssystem.



  • Tastatur rausziehen geht nicht, weil die benötigt wird.

    Und nen anderes OS geht auch nicht, weil das Kundenspezifisch ist,
    da können wir nix vorraussetzen.



  • De facto soll ausschließlich in deinem Programm gearbeitet werden dürfen oder wie?



  • hmm naja sagen wirs mal so:

    - es darf nicht neugestartet werden
    - der Taskmanager soll auch nicht angezeigt werden (Str-Alt-Entf)
    - die Tasten Alt+F4 sollten nach Möglichkeit deaktiviert werden,
    weil wenn alles geschloßen ist, dann das herunterfahren Menü kommt
    - das Startmenü (welches durch die Win Taste erscheint) deaktivieren

    so.... das wars glaube ich 😉



  • Neustart verhindern würde ich gleich ganz lassen. Geht schließlich sowieso nicht.
    Dann lieber in Autostart (RunOnce oder so) schreiben.

    Aber das andere müsstest du doch realisieren können.
    Bei Programmstart Task-Manager schließen falls offen.
    Keyboard-Hook installieren für Strg+Alt+Entf und meinetwegen Alt+Tab. Hooks sind wirklich nicht schwer.
    Alt+F4 in deinem Fenster abfangen.

    Hooks sind allgemein nützlich, sollte man eigentlich schon kennen als Programmierer. Und wenns "nur" Thread-weite Hooks sind...



  • hmm ja wie erstellt man solche Hooks ??

    habe ich noch nie gemacht..



  • Du brauchst SetWindowsHookEx, UnhookWindowsHookEx und deine eigene Hook-Funktion.
    Bei einem globalen Hook muss die Hook-Funktion in einer Dll gelagert sein.

    Fangen wir mal mit Thread-weiten Hooks an.
    Du deklarierst dir eine Hook-Funktion (diese ist speziell für Keyboard-Hooks):

    LRESULT CALLBACK KeyboardProc(
    
        int code,	// hook code
        WPARAM wParam,	// virtual-key code
        LPARAM lParam 	// keystroke-message information
       );
    

    Dann rufst du SetWindowsHookEx auf, mit WH_KEYBOARD, dem Namen deiner Hook-Funktion, NULL und deiner ThreadID.
    Den Rückgabewert gut speichern und am Ende UnhookWindowsHookEx wieder übergeben.

    Bei deiner Hook-Funktion dürfte der Parameter wParam für dich interessant sein, da ist der Code der Taste gespeichert (also VK_RETURN, 'A', oder sonstwas).



  • hmm habe das glaube ich zum Teil verstanden.

    Was tun die Funktionen SetWindowsHookEx bzw. UnhookWindowsHookEx ??

    Muss ich dafür die user32.dll ins Projekt inkludieren ??
    sorry wenn ich dauernd so blöd frage,
    aber habe sowas noch nie gemacht und kenne mich da auch nicht aus 😞

    Unerforschtes Neuland 😉



  • Ja, du musst die user32.lib ins Projekt mit reinnehmen.

    Was die Funktionen machen? Sie sagen Windows, dass es bei einer Aktion der Tastatur als erstes deine Hook-Funktion aufrufen soll. Mit UnhookWindowsHookEx sagst du Windows, dass es damit aufhören soll 🤡
    Für näheres guck einfach in der MSDN nach: www.msdn.microsoft.com. Rechts oben ist ein Such-Feld, einfach Begriff eingeben und go. Auf der Such-Ergebnis-Seite für (deutlich) mehr Treffer "alle Sprachen" anklicken.



  • ich hab mal ein wenig geschaut, das blöde auf der MSDN page,
    gibts Beispiele nur für VB...

    Ich arbeite mit dem Borland und kann leider das meiste davon,
    nicht so einfach anwenden.

    Was die Funktionen nun tun bzw. welche ich brauche ist mir
    nur klar...

    Aber wie mache ich diese Hauptfunktion, wo die ganzen Funktionen
    ablaufen sollen ??



  • budili schrieb:

    ich hab mal ein wenig geschaut, das blöde auf der MSDN page,
    gibts Beispiele nur für VB...

    Das halte ich für ein Gerücht... Außerdem ist die MSDN einfach nützlich wegen der Funktionsdefinitionen. Dass du z.B. sehen kannst, welche Parameter welche Funktion erwartet, was sie zurückgibt, eine Beschreibung der Funktion, Querverweise, etc.

    budili schrieb:

    Aber wie mache ich diese Hauptfunktion, wo die ganzen Funktionen
    ablaufen sollen ??

    Du suchst dir eine Stelle deines Programmes aus, an dem der Hook installiert werden soll. Und eine Stelle, an der er wieder entfernt werden soll.
    Wenn du ein Fenster-Programm hast, ist es das Beste, du installierst den Hook, während das Fenster initialisiert wird und entfernst ihn wieder, wenn das Fenster geschlossen wird.

    PS: Wenn du das nicht hinbekommst, solltest du auch besser kein Programm schreiben, was man nicht beenden kann, den Taskmanager lahmlegt und so 😉



  • ja ich weiß halt net genau, wie das gehen soll...
    will es halt mal probieren.
    gibt doch das eine schöne Sprichwort: Probieren geht über studieren 🙂

    bzw. habe auch net viel Zeit atm da zu recherchieren, weil muss an dem
    richtigen Projekt arbeiten, das mache ich so nebenbei in den Pausen 😃

    aber komme halt net so richtig weiter, deshalb frag ich euch ja ...



  • Versteh mich nicht falsch, Fragen ist super! Ist schließlich auch die Existenzgrundlage des Boards :xmas2:



  • gibt es eigentlich auch eine Möglichkeit,
    die Tastatur einfach zu deaktivieren ??

    oder den Treiber vllt abstellen ?

    ist sowas möglich ??



  • budili schrieb:

    bzw. habe auch net viel Zeit atm da zu recherchieren, weil muss an dem
    richtigen Projekt arbeiten, das mache ich so nebenbei in den Pausen 😃

    Dann solltest du das vielleicht etwas zurückstellen und dich erstmal auf den wesentlichen Teil des Projekts (sprich: Das Programm selber läuft fehlerfrei) konzentrieren. Und die Tastatur kannst du afaik nur entweder komplett abschalten (das wird nichts, wenn du sie im Programm noch brauchst) oder komplett einschalten (in dem Fall mußt du "verbotene" Tasten per Hook abfangen und neutralisieren).



  • ja schon, nur ich könnte es halt nach den Eingabe praktisch deaktivieren...

    weil danach bräuchte man die nicht.



  • Vielleicht reicht ja für denjenigen, der mit deinem Programm arbeitet, ein "Bitte nicht anfassen" Schild, das er auf die Tastatur legen kann 😃

    (ansonsten: Wir haben dir hier eine Lösung genannt - nimm sie oder lass es bleiben)



  • hmm.. nee andere Frage:

    und zwar gibts da ne Möglichkeit ne bestimmte Taste zu setzen?

    z.B. ich drücke einen Button und die Enter Taste oder WinTaste wird
    gesetzt und übergibt das dem OS ??

    thx



  • SendInput


Anmelden zum Antworten