Seite 1 von 1

Fenster-Beenden verhindern

Verfasst: Sonntag 27. Juni 2010, 10:14
von OpenCV
Hallo Community!

Ich hätte eine Frage an euch: Wie kann man bei einer Tkinter-GUI das kleine "x" oben in der Titelleiste deaktivieren, so dass man das Programm nicht beenden kann?

MFG
OpenCV

Re: Fenster-Beenden verhindern

Verfasst: Sonntag 27. Juni 2010, 13:08
von numerix

Code: Alles auswählen

import Tkinter as tk

root = tk.Tk()
root.protocol("WM_DELETE_WINDOW",0)
tk.Button(text="Beenden",command=root.quit).pack()
root.mainloop()

Re: Fenster-Beenden verhindern

Verfasst: Mittwoch 30. Juni 2010, 16:45
von OpenCV
Vielen Dank für die Antwort!

Ich hätte noch 2 kleine Fragen:
1) Wie kann ich auch das Minimieren verhindern?
2) Wie kann ich es schaffen, dass ich den Prozess über den Task-Manager z.B. nicht killen kann?

MFG

Re: Fenster-Beenden verhindern

Verfasst: Mittwoch 30. Juni 2010, 16:56
von Dav1d
zu 1) keine Ahnung
zu 2) Garnicht, du könntest aber einen 2 Prozess starten, der den 1. überwacht, falls der 1. beendet wird, kann der 2. den 1 wieder starten

Re: Fenster-Beenden verhindern

Verfasst: Mittwoch 30. Juni 2010, 17:01
von OpenCV
OK oder ich hab eine bessere Idee:

Wie kann ich während das Programm läuft, alle anderen Prozesse "blockieren", also verhindern, dass man auf sie zugreifen kann?
Also ich will, dass nur dieses Programm auf dem OS läuft bis zur Terminierung und alle anderen nicht aufrufbar sind für den Benutzer...

Re: Fenster-Beenden verhindern

Verfasst: Mittwoch 30. Juni 2010, 19:31
von problembär
OpenCV hat geschrieben:bis zur Terminierung
Bild

Kommt auf's OS an.

Re: Fenster-Beenden verhindern

Verfasst: Freitag 2. Juli 2010, 08:42
von frabron
Das ist aber eher keine Python-Frage mehr, sondern Benutzeradministration. Wie man unpriviligierte Benutzer anlegt, ist natürlich abhängig vom System selber. Da du vom Taskmanager redest, wirst du wohl Windows einsetzen. Unter XP Home wird da wenig gehen, da dort die Bordmittel fehlen. Ab Vista gibt es ja die UAC, vllt. geht ja damit was, ansonsten mal das Technet durchforsten, da findet sich mit Sicherheit was zur Benutzerverwaltung und -rechten.

Re: Fenster-Beenden verhindern

Verfasst: Freitag 2. Juli 2010, 18:15
von OpenCV
Ich habe da eine bessere Idee zur Umsetzung meines Problems gefunden:
Das Tk-Fenster soll sich einfach nach 10 Sekunden zerstören.

Wie geht das? Gibt es bei root.mainloop() vllt. ein time-Parameter, für wielange es laufen soll?

Re: Fenster-Beenden verhindern

Verfasst: Freitag 2. Juli 2010, 19:31
von problembär

Code: Alles auswählen

root.after(10000, root.destroy)
(vor .mainloop() setzen)

Re: Fenster-Beenden verhindern

Verfasst: Dienstag 26. Januar 2021, 22:12
von Tomary
Ich meine mit einer .vbs datei

die mit subprocess ausgeführt wird

Befehl:

Code: Alles auswählen

subprocess.Popen(['wscript.exe', r't.vbs'])
Datei:

Code: Alles auswählen


On Error Resume Next
Set objWshShl = WScript.CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!//./root/cimv2")
Set colMonitoredProcesses = objWMIService.ExecNotificationQuery("select * from __instancecreationevent " & " within 1 where TargetInstance isa 'Win32_Process'")
Do
    Set objLatestProcess = colMonitoredProcesses.NextEvent
    If LCase(objLatestProcess.TargetInstance.Name) = "taskmgr.exe" Then
        objLatestProcess.TargetInstance.Terminate
    ' fake popup message
		objWshShl.Popup "Task Manager has been disabled by your administrator.", 3, "Task Manager", 16
    End If
Loop


Re: Fenster-Beenden verhindern

Verfasst: Dienstag 26. Januar 2021, 22:21
von __deets__
Das ändert die Antwort nicht. Auch eine subprocess kannst du im after killen. Aber du kannst den VB-Code auch durch die Python win32 API ersetzen. Und dir so den zweiten Prozess ganz sparen.