Entwickler-Ecke
Windows API - Bestimmte Tasten blockieren?
D.Elphi - Fr 09.03.12 15:56
Titel: Bestimmte Tasten blockieren?
Hallo zusammen,
für ein Programm möchte ich die Tasten ALT, STRG, ESC, F4, ENTF und die Windows-Taste blocken. Mein bisheriger Ansatz:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.FormKeyDown(Sender: TObject; var Key: Char; Shift: TShiftState); begin if Key = 'VK_CONTROL' then Key := '0'; if Key = 'VK_ESCAPE' then Key := '0'; if Key = 'VK_F4' then Key := '0'; if Key = 'VK_DELETE' then Key := '0'; if Key = 'VK_MENU' then Key := '0'; if Key = 'VK_LWIN' then Key := '0'; if Key = 'VK_RWIN' then Key := '0'; end; |
Das klappt aber nicht :(. Mache ich was falsch? Bitte helft mir :)
gruß
D.Elphi
Moderiert von
Narses: Status "gelöst" gesetzt.
bummi - Fr 09.03.12 16:05
1. Key ist ein Char also nur ein Zeichen Du vergleichst mit einem String
2. Ein Teil der Tasten Du abfangen willst kommen nicht über den Key sondern über Shift
3. Ein Teil kommt gar nicht auf diese Art
Wenn Du es nur innerhalb Deiner Anwendung benötigst könntest Du Dich in Application.OnMessage hängen oder ein eine ApplicationEvents-Komponente verwenden und Dort OnMessage regieren.
Ich vermute aber Du möchtest Dich systemweit einhängen, das Stichwort wäre dann Keyhook und ist immer mit einer DLL verbunden.
Narses - Fr 09.03.12 16:07
Moin!
D.Elphi hat folgendes geschrieben : |
für ein Programm möchte ich die Tasten ALT, STRG, ESC, F4, ENTF und die Windows-Taste blocken. Mein bisheriger Ansatz: |
Zumindest Strg+Alt+Entf kann man nicht für ein spezielles Programm blockieren, da es eine Systemfunktion ist. Ob und wie auch immer man das machen kann, sei mal dahingestellt. Wofür brauchst du das denn?
cu
Narses
D.Elphi - Fr 09.03.12 16:22
@Narses: Ich versuche, so etwas ähnliches wie SiteKiosk oder Magic Desktop zu machen, wo diese Kombinationen auch nicht funktionieren.
Narses - Fr 09.03.12 16:42
Moin!
Du möchtest also die Rechte des Benutzers auf das Betriebssystem einschränken. Dafür verwendet man üblicherweise verschiedene Benutzerkonten und Gruppenrichtlinien. Die kann man auch nicht aushebeln und zentral Administrieren (wenn man denn einen Windows-Server zur Hand hat). :idea:
Ein Delphi-Programm ist hier leider kein gutes Mittel, dieses Ziel zu erreichen.
cu
Narses
D.Elphi - Fr 09.03.12 16:48
Ich glaube, mein Beitrag war ein wenig missverständlich :D. Ich möchte keines dieser Programme nachmachen, ich möchte lediglich verhindern, dass ein Programm sich per Klick auf "X" oder mit den Tastenkombis beenden lässt (momentan sieht es so aus: ein vom User festgelegtes Passwort muss eingegeben werden, damit das Programm sich beendet.)
Gausi - Fr 09.03.12 16:52
Das Schließen (Alt-F4, oder auch Klick auf [ X ]) kann man im OnCloseQuery verweigern. Gegen das Abschießen des Prozesses über den Taskmanager gibt es aber nichts sinnvolles - und das ist auch gut so.
D.Elphi - Fr 09.03.12 16:53
OK, danke. Aber wie sieht denn jetzt der Quelltext konkret aus?
danke im Voraus :)
bummi - Fr 09.03.12 16:53
Dann langt gegf. das?
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := PasswortPasst; end; |
Narses - Fr 09.03.12 16:55
Moin!
D.Elphi hat folgendes geschrieben : |
Ich glaube, mein Beitrag war ein wenig missverständlich :D. Ich möchte keines dieser Programme nachmachen, |
Oh, ja, das habe ich wohl falsch verstanden. ;)
D.Elphi hat folgendes geschrieben : |
ich möchte lediglich verhindern, dass ein Programm sich per Klick auf "X" oder mit den Tastenkombis beenden lässt (momentan sieht es so aus: ein vom User festgelegtes Passwort muss eingegeben werden, damit das Programm sich beendet.) |
In Delphi kannst du, zusätzlich zu
Gausis Tipp, auch das OnClose-Ereignis nutzen:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if NichtBeenden then Action := caNone; |
Dagegen, dass ein Computer-Administrator den Prozess deines Programms abschießt, kannst du erstmal nichts unternehmen. Und gleich der Hinweis: wie man das evtl. doch tun könnte, wollen wir in der EE nicht diskutieren. :idea:
cu
Narses
D.Elphi - Fr 09.03.12 16:56
Klasse :D Danke für eure Hilfe!
Tranx - Fr 09.03.12 17:33
Also, wenn ich ein Programm hätte, das sich nur mit Passwort beenden lässt, das würde bei mir gnadenlos per Taskmanager beendet. Und ich würde dann auch noch gleich das Programm herausfinden und mir Eraser von der Festplatte löschen. Ganz ehrlich, das klingt so, wie manche dieser Internetanwendungen, wo man auf das X des Fensters, was ja üblich für "Schießen" steht, klickt und dann öffnet sich irgendeine obskure Internetadresse. Da hab ich echt die Kappe dann auf.
Wenn ich auf meinem Rechner die Programme nicht schließen kann (Ausnahme irgendwelche Systemroputinen), wann ich will, dann haben die auf meinem Rechner nichts zu suchen.
Das nur mal zu dem Thema. Ansonsten ist die Frage wohl beantwortet.
Nersgatt - Fr 09.03.12 17:39
Man muss nicht immer Böses dabei vermuten.
Wir haben auch z.B. Touchscreenterminals, die man nicht per X schließen kann. Und das ist gewollt, denn die werden von Leuten bedient, die es einfach nicht schließen sollen. Die hängen unbeaufsichtigt in Pausenräumen, Hallen, etc... Man staunt, auf was für doofe Ideen Leute während einer langweiligen Nachtschicht kommen. Nach dem Motto "mal gucken, ob man mit der Kiste auch Solitär spielen kann". Und das ist noch die beste der doofen Ideen. :roll:
Man könnte die Terminals übrigens über ALT+F4 schließen. Geht aber nicht, weil 1. PC in verschlossenem Schrank und Tastatur ebenso. Bedienung ausschließlich über Touchscreen.
D.Elphi - Fr 09.03.12 23:24
Tranx, mal mal nicht den Teufel an die Wand :D Nersgatt hat Recht mit seinem Beitrag. Ich hab nix böses vor - dürfte ich eh nicht verbreiten weil wegen Educational-Version ;)
Delete - Sa 10.03.12 14:52
Narses hat folgendes geschrieben : |
Zumindest Strg+Alt+Entf kann man nicht für ein spezielles Programm blockieren, da es eine Systemfunktion ist. Ob und wie auch immer man das machen kann, sei mal dahingestellt. |
Nicht getestet:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| SystemParametersInfo(SPI_SCRE]ENSAVERRUNNING,1,Nil,0); .
SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,Nil,0);
oder: SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, 1, 0); Label1.Caption:='[Strg] + [Alt] + [Entf] ausgeschaltet'; . SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, 1, 0); Label1.Caption:= '[Strg] + [Alt] + [Entf] eingeschaltet'; |
Ausserdem:
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableLockWorkstation
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskMgr
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableChangePassword
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoLogoff
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoClose
All entries should be dword values: 1 enables the feature - 0 disables it.
Delete - Sa 10.03.12 15:37
Damit kannst du den Taskmanager deaktivieren, aber nicht Strg+Alt+Entf. Und darüber kann man wieder den Taskmanager erreichen.
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!