Autor |
Beitrag |
D.Elphi
      
Beiträge: 128
Erhaltene Danke: 10
Windows 10 Edu x64
Tokyo Starter, BlueJ
|
Verfasst: Fr 09.03.12 15:56
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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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.
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
D.Elphi 
      
Beiträge: 128
Erhaltene Danke: 10
Windows 10 Edu x64
Tokyo Starter, BlueJ
|
Verfasst: 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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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).
Ein Delphi-Programm ist hier leider kein gutes Mittel, dieses Ziel zu erreichen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
D.Elphi 
      
Beiträge: 128
Erhaltene Danke: 10
Windows 10 Edu x64
Tokyo Starter, BlueJ
|
Verfasst: Fr 09.03.12 16:48
Ich glaube, mein Beitrag war ein wenig missverständlich  . 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
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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.
_________________ We are, we were and will not be.
|
|
D.Elphi 
      
Beiträge: 128
Erhaltene Danke: 10
Windows 10 Edu x64
Tokyo Starter, BlueJ
|
Verfasst: Fr 09.03.12 16:53
OK, danke. Aber wie sieht denn jetzt der Quelltext konkret aus?
danke im Voraus 
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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; |
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Für diesen Beitrag haben gedankt: D.Elphi
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 09.03.12 16:55
Moin!
D.Elphi hat folgendes geschrieben : | Ich glaube, mein Beitrag war ein wenig missverständlich . 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.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
Für diesen Beitrag haben gedankt: D.Elphi
|
|
D.Elphi 
      
Beiträge: 128
Erhaltene Danke: 10
Windows 10 Edu x64
Tokyo Starter, BlueJ
|
Verfasst: Fr 09.03.12 16:56
Klasse  Danke für eure Hilfe!
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: 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.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: 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.
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.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
D.Elphi 
      
Beiträge: 128
Erhaltene Danke: 10
Windows 10 Edu x64
Tokyo Starter, BlueJ
|
Verfasst: Fr 09.03.12 23:24
Tranx, mal mal nicht den Teufel an die Wand  Nersgatt hat Recht mit seinem Beitrag. Ich hab nix böses vor - dürfte ich eh nicht verbreiten weil wegen Educational-Version 
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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.
|
|