Beenden verhindern

Hallo,

ich möchte verhindern, das mein Programm mit den herkömmlichen Mitteln (ALT+F4, ALT+TAB, Windows-Taste, etc.) verlassen werden kann. D.h. man soll weder den Task wechseln, noch das Programm beenden können, das Beenden erfolgt über einen speziellen Button (und nur diesen). Ich hab mal probiert die Tastaturereignisse mit KeyDown abzufangen kann das Programm aber trotzdem noch verlassen. Wie geht’s? Gibt es Beispiele?

Vielen Dank,
Sebastian

Hi Sebastian!

Wenn Du den Borderstyle gleich 0 setzt (none), dann funktioniert kein Alt+F4 (der [X]-Button ist dafür zuständig).

Einen Tabwechsel kannst Du nur umgehen, indem Du das Form mit API Always On Top machst.

LG, Stefan.

Vielen Dank schonmal, kannst Du mir vielleicht noch ein Beispiel schicken? Mit API-Funktionen kenne ich mich so aus, ich weiss nicht wie die entsprechende Funktion heisst…
-> [email protected]

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

So funktioniert ‚Always On Top‘ via API
Always on Top funktioniert so:

In der allgemeinen Deklaration gibts du folgendes an:
Public Declare Function SetWindowPos Lib „user32“ (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

So ruft’s die API auf und läßt das Form immer im Vordergrund stehen:
SetWindowPos Me.hWnd, -1, Me.Left / 15, Me.Top / 15, Me.Width / 15, Me.Height / 15, &H40

Damit schaltest Du das wieder aus:
SetWindowPos Me.hWnd, -1, Me.Left / 15, Me.Top / 15, Me.Width / 15, Me.Height / 15, &H40

VG, Stefan.

Danke, das funktioniert, aber man kann das Programm immer noch mit der Windows-Tase, oder mit CTRL-ALT-DEL verlassen, weisst Du auch, wie man das unterbinden kann? Oder gibt es eine Möglichkeit das Programm vom System aus modal zu starteb (soll auf WinNT laufen)?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke, das funktioniert, aber man kann das Programm immer noch
mit der Windows-Tase, oder mit CTRL-ALT-DEL verlassen, weisst
Du auch, wie man das unterbinden kann? Oder gibt es eine
Möglichkeit das Programm vom System aus modal zu starteb (soll
auf WinNT laufen)?

Also, um ein STRG-ALT-ENTF zu unterbinden müsstes Du den Kernel anpassen. Diese Tastenkombination ist derart tief im Betriebssystem verankert, sodass man sie nicht umgehen kann - auch gut so, sonst müsste man bei Zombies ständig den Rechner neu starten. Diese Tastenkombination bewirkt auch einen Wechsel in einen anderen „Zustand“, der auch die Sicherheit von NT/2000 ausmacht.

Eine Idee für ein permanentes Programm wäre auch einen Launcher zu schreiben, welcher ein Programm sofort wieder startet, sobald es beendet wurde. Das geht übrigens auch mit einer Batchdatei:

Start.CMD

BEGIN

program.exe
GOTO BEGIN

Grüße, Stefan.

Hi Sebastian,

versuchs mal über folgende Funktion. Es wird simuliert, daß der Screensaver aktiv sei. Dadurch werden die Windows-Taste, Alt-Tab, Ctrl-Alt-Entf deaktiviert.

'Deklaration:
Public Declare Function SystemParametersInfo Lib „user32“ Alias _
„SystemParametersInfoA“ (ByVal uAction As Long, ByVal _
uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni _
As Long) As Long

'Aufrufe:
'Systemtasten deaktivieren
SystemParametersInfo 97, True, „1“, 0

'Systemtasten aktivieren
SystemParametersInfo 97, False, „1“, 0

Falls du noch die Taskleiste verstecken willst:

'Deklaration
Public Declare Function FindWindow Lib „user32“ Alias _
„FindWindowA“ (ByVal lpClassName As String, ByVal _
lpWindowName As String) As Long

Public Declare Function SetWindowPos Lib „user32“ _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
ByVal cy As Long, ByVal wFlags As Long) As Long

Public Const SWP_HIDEWINDOW = &H80
Public Const SWP_SHOWWINDOW = &H40

'Aufrufe:
'Taskbar verstecken
dim h&
h& = FindWindow(„Shell_TrayWnd“, vbNullString)
SetWindowPos h, 0, 0, 0, 10, 10, SWP_HIDEWINDOW

'Taskbar anzeigen
dim h&
h& = FindWindow(„Shell_TrayWnd“, vbNullString)
SetWindowPos h, 0, 0, 0, 0, 0, SWP_SHOWWINDOW

Die API-Deklarationen in ein Modul kopieren oder aus „Public“ ein „Private“ machen.

Alt-F4 verhinderst du z.B. mit der Eigenschaft ControlBox = False.

Falls du noch Fragen hast, meld dich.

Viele Grüße
Andreas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

ich daechte das kannst Du mit der Form _ Unload() sub machen

Setzte den die eigenschaft cancel einfach wieder auf 1 und das Program beendet nicht.

Cu Alex

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]