(GELÖST)Programmdeaktivierung Verhindern?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Soner
Beiträge: 435
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

(GELÖST)Programmdeaktivierung Verhindern?

Beitrag von Soner »

Wie kann man verhindern, dass der Benutzer Programm deaktiveren kann?
Folgendes funktioniert nur wenn man aus der IDE im Debugmodus startet:

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs;

type

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure AppOnDeactivate(Sender: TObject);
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnDeactivate:=@AppOnDeactivate;
end;
procedure TForm1.AppOnDeactivate(Sender: TObject);
begin
  Application.MainForm.BringToFront;
end;

end. 
P.S. Das Programm soll in Kioskmodus laufen und nur mit Kennwort beendet werden.
Zuletzt geändert von Soner am Sa 10. Apr 2021, 17:38, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 3686
Registriert: Fr 8. Apr 2011, 09:01

Re: Programmdeaktivierung Verhindern?

Beitrag von wp_xyz »

Soner hat geschrieben:
Sa 10. Apr 2021, 16:25
Das Programm soll in Kioskmodus laufen und nur mit Kennwort beendet werden.
Zu verhindern, dass das Programm jederzeit beendet werden kann, sollte mit Hilfe des OnCloseQuery-Ereignisses funktionieren (verhindert natürlich kein übergeordnetes "kill" oder Abschuss im Taskmanager).

Soner
Beiträge: 435
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Programmdeaktivierung Verhindern?

Beitrag von Soner »

wp_xyz hat geschrieben:
Sa 10. Apr 2021, 16:52
Soner hat geschrieben:
Sa 10. Apr 2021, 16:25
Das Programm soll in Kioskmodus laufen und nur mit Kennwort beendet werden.
Zu verhindern, dass das Programm jederzeit beendet werden kann, sollte mit Hilfe des OnCloseQuery-Ereignisses funktionieren (verhindert natürlich kein übergeordnetes "kill" oder Abschuss im Taskmanager).
Das ist schon klar, diesen Teil habe ich mit OnCloseQuery realisiert, es funktioniert gut.

Ich wollte auch verhindern, dass ein anderes Programm in den Vordergrund geholt wird.
Meine Lösung funktioniert nur im Debugmodus.

Benutzeravatar
Winni
Beiträge: 721
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.0.12, fpc 3.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Programmdeaktivierung Verhindern?

Beitrag von Winni »

Hi!

FormCloseQuery in das gleichnamige Event der Haupt-Form einhängen.

Code: Alles auswählen

uses ......, Dialogs;
....
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);

begin
 CanClose := PasswordBox('Nicht ohne Passwort','Passwort: ')
         = 'PazzWort';
end;


Wie Dein Passwort lautet und wo Du es ablegst ist Dir überlassen.

Winni

wp_xyz
Beiträge: 3686
Registriert: Fr 8. Apr 2011, 09:01

Re: Programmdeaktivierung Verhindern?

Beitrag von wp_xyz »

Soner hat geschrieben:
Sa 10. Apr 2021, 17:13
Ich wollte auch verhindern, dass ein anderes Programm in den Vordergrund geholt wird.
Hast du das (https://lazplanet.blogspot.com/2014/02/ ... creen.html) mal probiert?

Warf
Beiträge: 1562
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: Programmdeaktivierung Verhindern?

Beitrag von Warf »

Wenn es auf Windows laufen soll könnte sowas funktionieren um die Form immer ganz oben zu halten: Link

Aber nicht vergessen nutzer mögen es gar nicht wenn anwendungen einem die PC nutzung untersagen

Soner
Beiträge: 435
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Programmdeaktivierung Verhindern?

Beitrag von Soner »

Danke für die Antoworten, also es gibt keine Crossplatform-Lösung.

Das einzige was funktioniert ist:

Code: Alles auswählen

SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
Und das ist für Windows, das reicht mir erstmal. Für die anderen Platformen suche die Lösung, falls ich es brauche.

Soner
Beiträge: 435
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Programmdeaktivierung Verhindern?

Beitrag von Soner »

Warf hat geschrieben:
Sa 10. Apr 2021, 17:32
Wenn es auf Windows laufen soll könnte sowas funktionieren um die Form immer ganz oben zu halten: Link

Aber nicht vergessen nutzer mögen es gar nicht wenn anwendungen einem die PC nutzung untersagen
Es ist Kiosk-Anwendung für eine Produktionsstraße, die Nutzer haben nichts zu sagen, Sie sollen das machen was das Programm anzeigt. Nur der Admin kann das Programm beenden.

wp_xyz
Beiträge: 3686
Registriert: Fr 8. Apr 2011, 09:01

Re: Programmdeaktivierung Verhindern?

Beitrag von wp_xyz »

Soner hat geschrieben:
Sa 10. Apr 2021, 17:40
Es ist Kiosk-Anwendung für eine Produktionsstraße, die Nutzer haben nichts zu sagen, Sie sollen das machen was das Programm anzeigt. Nur der Admin kann das Programm beenden.
Tastatur und PC wegsperren?

Ansonsten habe ich die LazPlanet-Lösung von oben gerade auch auf Linux ausprobiert, und ich habe keinen Weg gefunden, ein anderes Fenster in den Vordergrund zu bringen (ok - bin kein Linux-Spezialist, wahrscheinlich machen's die Freaks hier mit links...)

Soner
Beiträge: 435
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: (GELÖST)Programmdeaktivierung Verhindern?

Beitrag von Soner »

wp_xyz hat geschrieben:
Sa 10. Apr 2021, 17:47
Soner hat geschrieben:
Sa 10. Apr 2021, 17:40
Es ist Kiosk-Anwendung für eine Produktionsstraße, die Nutzer haben nichts zu sagen, Sie sollen das machen was das Programm anzeigt. Nur der Admin kann das Programm beenden.
Tastatur und PC wegsperren?
Nein, es soll noch bedienbar sein. Es geht auch nicht um die Sicherheit, sondern dass die Benutzer nicht aus versehen das Programm minimieren oder anderes Programm starten und dann verwirrt den Administrator, hier mich, anrufen.

Da das Programm mit sehr große Wahrscheinlichtkeit nur unter Windows laufen wird, reicht mir derzeitige Lösung.
Manchmal verleitet die Crossplatform-Fähigkeit von Lazarus, dass man nach Sachen sucht, die man im Leben nie brauchen wird.

Benutzeravatar
Winni
Beiträge: 721
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.0.12, fpc 3.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: (GELÖST)Programmdeaktivierung Verhindern?

Beitrag von Winni »

Hi!

Also die Doppel-Moppel-Lösung:

a) Borderstyle der Haupt-Form auf bsNone setzen - schon sind die System-Icons und Titlebar verschwunden.
Dann muss man aber die permanente Größe bei FormCreate auf die Bildschirmgröße setzen. Und man muss einen "Exit"-Button spendieren. Sonst kann das Programm nicht beendet werden.
b) Wenn das immer noch nicht ausreicht, Setze den FormStyle auf fsStayOnTop.
c) Paranoia mode: Desktop und Start-Menü leeräumen, so dass nichts anderes gestartet werden kann.

Winni

Benutzeravatar
six1
Beiträge: 369
Registriert: Do 1. Jul 2010, 19:01

Re: (GELÖST)Programmdeaktivierung Verhindern?

Beitrag von six1 »

und was ist mit ALT-F4 ?
Gruß, Michael

wp_xyz
Beiträge: 3686
Registriert: Fr 8. Apr 2011, 09:01

Re: (GELÖST)Programmdeaktivierung Verhindern?

Beitrag von wp_xyz »

Das wird vom OnCloseQuery-Handler abgefangen.

Benutzeravatar
Winni
Beiträge: 721
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.0.12, fpc 3.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: (GELÖST)Programmdeaktivierung Verhindern?

Beitrag von Winni »

six1 hat geschrieben:
Sa 10. Apr 2021, 21:37
und was ist mit ALT-F4 ?
Nee - nach meinen Tipps geht nur noch der Task-Manager.
Wenn der SysAd die Menschen daran lässt.

Winni

Soner
Beiträge: 435
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: (GELÖST)Programmdeaktivierung Verhindern?

Beitrag von Soner »

Ich lade meine Lösung als kleines Programm hier hoch, falls jemand es braucht darf es uneingeschrankt benutzen, es ist nichts neues. Vielleicht funktioniert es auch unter anderen Betriebssysteme.
Es verhindert Programm schließen, deaktvieren und minimieren.
Schließen über Task-Manager ist eine andere Geschichte.
activeform-pub.zip
[attachment=0]activeform-pub.zip[/attachment]
(63.44 KiB) 13-mal heruntergeladen

Edit: Ich hatte falsche Version hochgeladen, deshalb gelöscht und richtige Version hochgeladen falls jemand es heruntergeladen hatte, dann auchte drauf, dass es in cphack-Unit das steht:

Code: Alles auswählen

SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0,  SWP_NOMOVE or SWP_NOSIZE);

Antworten