Autor Beitrag
D.Elphi
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 128
Erhaltene Danke: 10

Windows 10 Edu x64
Tokyo Starter, BlueJ
BeitragVerfasst: 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:

ausblenden 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'//Strg
if Key = 'VK_ESCAPE' then Key := '0'//ESC
if Key = 'VK_F4' then Key := '0';    //F4-Taste 
if Key = 'VK_DELETE' then Key := '0'//ENTF
if Key = 'VK_MENU' then Key := '0'//ALT
if Key = 'VK_LWIN' then Key := '0'//Linke Windowstaste
if Key = 'VK_RWIN' then Key := '0'//Rechte Windowstaste
end;


Das klappt aber nicht :(. Mache ich was falsch? Bitte helft mir :)

gruß
D.Elphi

Moderiert von user profile iconNarses: Status "gelöst" gesetzt.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 09.03.12 16:07 
Moin!

user profile iconD.Elphi hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 128
Erhaltene Danke: 10

Windows 10 Edu x64
Tokyo Starter, BlueJ
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
D.Elphi Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 128
Erhaltene Danke: 10

Windows 10 Edu x64
Tokyo Starter, BlueJ
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 128
Erhaltene Danke: 10

Windows 10 Edu x64
Tokyo Starter, BlueJ
BeitragVerfasst: Fr 09.03.12 16:53 
OK, danke. Aber wie sieht denn jetzt der Quelltext konkret aus?

danke im Voraus :)
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Fr 09.03.12 16:53 
Dann langt gegf. das?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 09.03.12 16:55 
Moin!

user profile iconD.Elphi hat folgendes geschrieben Zum zitierten Posting springen:
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. ;)

user profile iconD.Elphi hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconGausis Tipp, auch das OnClose-Ereignis nutzen:
ausblenden 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

_________________
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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 128
Erhaltene Danke: 10

Windows 10 Edu x64
Tokyo Starter, BlueJ
BeitragVerfasst: Fr 09.03.12 16:56 
Klasse :D Danke für eure Hilfe!
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
D.Elphi Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 128
Erhaltene Danke: 10

Windows 10 Edu x64
Tokyo Starter, BlueJ
BeitragVerfasst: 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 ;)
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 10.03.12 14:52 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
{Task-Manager disablen}
SystemParametersInfo(SPI_SCRE]ENSAVERRUNNING,1,Nil,0);
.
{Task-Manager enablen}
SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,Nil,0);

oder:
SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, 10);
Label1.Caption:='[Strg] + [Alt] + [Entf] ausgeschaltet';
.
SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, 10);
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



BeitragVerfasst: 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.