Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Programmbeendigung verhindern (https://www.delphipraxis.net/101818-programmbeendigung-verhindern.html)

KPBecker 18. Okt 2007 16:08


Programmbeendigung verhindern
 
Hallo, Delphi-Praktiker,

wie kann ich verhindern, daß ein Benutzer über das "X" oben rechts oder mit alt-F4 ein Programm beenden kann ?

Beste Grüße
Klaus-Peter

Bernhard Geyer 18. Okt 2007 16:09

Re: Programmbeendigung verhindern
 
Was ist der Sinn davon das der User nicht mehr die auf seinem PC gestarteten Programme beenden kann? Das würde mich stören und das Programm sofort wieder löschen.

bernau 18. Okt 2007 16:11

Re: Programmbeendigung verhindern
 
Im Ereignis OnCloseQuery die Variable CanClose auf False setzen.

KPBecker 18. Okt 2007 16:14

Re: Programmbeendigung verhindern
 
Hallo, Bernhard,

wenn das Programm von einem berechtigten/ registrierten Benutzer gestartet wurde (und laufend vor sich hin arbeitet), soll es auch nur von einem solchen Benutzer wieder beendet werden können und nicht von jemandem, der zufällig auf den Bildschirm schaut.

Klaus-Peter

OregonGhost 18. Okt 2007 16:16

Re: Programmbeendigung verhindern
 
Geht es also um fremde Programme?

Cyberbob 18. Okt 2007 16:18

Re: Programmbeendigung verhindern
 
Und wie soll er das können, wenn der Button nicht mehr funktioniert.




entweder du schreibst im OnClose ereigns deines Formulares
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caNone;
end;
dadurch kann das formular nur noch über Application.Terminate geschlossen werden. Das ganze Programm wird beendet


Den Button selbst kannst du so deaktivieren

Delphi-Quellcode:
EnableMenuItem(GetSystemMenu(Form1.Handle, False), SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
und so wieder aktivieren

Delphi-Quellcode:
EnableMenuItem(GetSystemMenu(Form1.Handle, False), SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
dabei kann das rogramm noch über Alt+F4 schliessen

KPBecker 18. Okt 2007 16:19

Re: Programmbeendigung verhindern
 
Hallo, Oregon,

ich verstehe den Sinn der Rückfrage nicht.

Ich entwickle ein Programm, bei dem ein (kleiner) Schutz vor unberechtigtem Beenden eingebaut werden soll.

Klaus-Peter

Cyberbob 18. Okt 2007 16:20

Re: Programmbeendigung verhindern
 
Die Frage war so gemeint, ob du dein eigenes Programm so schützen willst oder ein Fremdes (z.B. Notepad oder sonst ein Programm)

Bernhard Geyer 18. Okt 2007 16:22

Re: Programmbeendigung verhindern
 
Zitat:

Zitat von KPBecker
wenn das Programm von einem berechtigten/ registrierten Benutzer gestartet wurde (und laufend vor sich hin arbeitet), soll es auch nur von einem solchen Benutzer wieder beendet werden können und nicht von jemandem, der zufällig auf den Bildschirm schaut.

Und was spricht dagegen das der User einfach den Rechner mit Windows-Bordmitteln sperren läßt?

freak4fun 18. Okt 2007 16:23

Re: Programmbeendigung verhindern
 
Alternativ auch das Programm mit einer Sperrvorrichtung ausstatten. Alos eine kleine Passwortabfrage oder etwas vergleichbares. :)

KPBecker 18. Okt 2007 16:36

Re: Programmbeendigung verhindern
 
- Zur Benutzung ist eine Anmeldung notwendig. Für Angemeldete (und damit Berechtigte) kann das Programm über einen Ende-Button komplett beendet werden.

- Das Programm soll allerdings in der Regel ständig (z.B. in minimierter Form) laufen, da ständig Verarbeitungen neu eintreffender Daten stattfinden, die nicht notwendigerweise einen Benutzereingriff notwendig machen.

- Wenn Berechtigte ihre direkte Tätigkeit mit dem Programm beendet haben, sollen sie sich abmelden (Knopfdruck oder einige Zeit ohne Benutzeraktivität genügt) und damit den Zugriff auf das weiterlaufende Programm sperren. --> Daher die Ausgangsfrage.

- Eine erneute korrekte Anmeldung ist in diesem Zustand natürlich möglich.

- Deswegen über Windows den Zugriff zum ganzen Rechner zu sperren, ist nicht gewünscht.

- Mir ist klar, daß das kein Schutz gegen Leute ist, die den Task-Manager benutzen können / wollen.

Klaus-Peter

Bernhard Geyer 18. Okt 2007 16:41

Re: Programmbeendigung verhindern
 
Wenn es eh Hintergrundaktivitäten sind so wäre doch die realisierung als NT-Dienst auch 'ne Möglichkeit. Die GUI kommuniziert über named-pipes, ... mit dem Dienst und so bräuchte gar kein User angemeldet sein.

OregonGhost 18. Okt 2007 16:45

Re: Programmbeendigung verhindern
 
Kommt in dem Fall vielleicht das Fast User Switching in Frage?

Ansonsten wäre es vermutlich wirklich das sinnvollste, per OnCloseQuery zu entscheiden, was genau zu tun ist. Wenn ich dich richtig verstehe, meldet man sich bei diesem Programm an und auch wieder ab, dann läuft es jedoch weiter und soll in diesem Zustand nur beendet werden können, wenn sich jemand wieder erneut anmeldet, oder? Also hast du ja die Information Angemeldet/Nicht angemeldet (bzw. mit entsprechenden Rechten angemeldet / nicht mit entsprechenden Rechten angemeldet) und kannst diese im OnCloseQuery abfragen und entsprechend bearbeiten.

Oder aber das Programm führt seine Dinge in einem Dienst, den ein normaler Benutzer somit nicht beenden kann?
Edit: Sowas, schreibt Bernhard genau das mit dem Dienst, während ich es denke. Böser Bernhard.

Luckie 18. Okt 2007 17:47

Re: Programmbeendigung verhindern
 
Zitat:

Zitat von KPBecker
- Zur Benutzung ist eine Anmeldung notwendig. Für Angemeldete (und damit Berechtigte) kann das Programm über einen Ende-Button komplett beendet werden.

- Das Programm soll allerdings in der Regel ständig (z.B. in minimierter Form) laufen, da ständig Verarbeitungen neu eintreffender Daten stattfinden, die nicht notwendigerweise einen Benutzereingriff notwendig machen.

- Wenn Berechtigte ihre direkte Tätigkeit mit dem Programm beendet haben, sollen sie sich abmelden (Knopfdruck oder einige Zeit ohne Benutzeraktivität genügt) und damit den Zugriff auf das weiterlaufende Programm sperren. --> Daher die Ausgangsfrage.

- Eine erneute korrekte Anmeldung ist in diesem Zustand natürlich möglich.

- Deswegen über Windows den Zugriff zum ganzen Rechner zu sperren, ist nicht gewünscht.

- Mir ist klar, daß das kein Schutz gegen Leute ist, die den Task-Manager benutzen können / wollen.

Klaus-Peter

Das schreit ja gerade zu nach einem Service.

KPBecker 19. Okt 2007 07:46

Re: Programmbeendigung verhindern
 
Das mit dem Dienst habe ich mir auch kurz überlegt. Das ist sicher eine Alternative, aber 1. müßte ich dann zusätzlich wieder ein Programm schreiben, das die Bedienung ermöglicht und 2. kenne ich mich mit dem Einhängen eines Programms als Dienst noch nicht aus.

Ich werd's (zunächst) über den genannten Weg versuchen.

Die Umstellung auf einen Dienst / Service bleibt im Hinterkopf.

Vielen Dank,
Klaus-Peter


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz