Herunterfahren disablen

  • Hallo liebes Forum,
    ich bin auf der Suche nach einer Lösung, wie ich das Herunterfahren verhindern kann. Ziel des ganzen ist, dass wenn ein bestimmtes Programm gestartet wurde und läuft, der Herunterfahren Button im Startmenü disabled ist. Ich hab bereits nach einer ID gesucht um den Befehl Controldisable zu füttern,jedoch ohne Erfolgt. Ich habe nur folgende Angaben:

    >>>> Window <<<<
    Title: Startmenü
    Class: DV2ControlHost
    Position: 0, 266
    Size: 470, 502
    Style: 0x96000000
    ExStyle: 0x00000088
    Handle: 0x00050088

    >>>> Control <<<<
    Class: ToolbarWindow32
    Instance: 1
    ClassnameNN: ToolbarWindow321
    Name:
    Advanced (Class): [CLASS:ToolbarWindow32; INSTANCE:1]
    ID:
    Text:
    Position: 0, 466
    Size: 470, 34
    ControlClick Coords: 414, 8
    Style: 0x54009945
    ExStyle: 0x00000000
    Handle: 0x000600D4

    >>>> Mouse <<<<
    Position: 414, 740
    Cursor ID: 2
    Color: 0x3169C6

    >>>> StatusBar <<<<

    >>>> ToolsBar <<<<
    1: 4 Abd&ocken
    2: 0 Ab&melden
    3: 1 He&runterfahren
    4: 2 &Trennen

    >>>> Visible Text <<<<
    XPMUser
    Alle &Programme


    >>>> Hidden Text <<<<


    Gibt es eine Möglichkeit mit diesen Daten den Button zu disablen?
    PS: Benutze als Betriebssystem XP Prof.

    Grüße
    arGi :)

  • Warum ich das verhindern möchte? Weil es einige Anwender gibt, die einfach auf Herunterfahren klicken bevor die Programme Ordnungsgemäß geschlossen werden.

    Gibt es denn eine Möglichkeit? Evtl. mit der Class ? Wenn ja, wie?

  • @Xenobiologist: Habe es gerade getestet, jedoch leider ohne erfolg :(. Ich denke das Problem ist, dass ja vorher diverse Kill Befehle laufen und dadurch auch das Programm heruntergefahren wird, auf welches geachtet werden soll und somit der shutdown Befehl danach weiterläuft.

  • Ok sollte mit SP3 dieses Verhalten nicht auch geändert worden sein gibts da vermutlich eine Lösung.

    [autoit]

    $hGUI = GUICreate("", 1, 1, 1, 1)
    GUIRegisterMsg($WM_POWERBROADCAST, "WM_POWERBROADCAST")
    GUISetState(@SW_HIDE, $hGUI)
    While 1
    $GUIMsg = GUIGetMsg()
    Switch $GUIMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func WM_POWERBROADCAST($hWnd, $Msg, $wParam, $lParam)
    Switch $wParam
    Case ;hier die Konstante für das Herunterfahrn eintragen udn entsprechend reagieren (musste mal googeln).
    EndSwitch
    EndFunc ;==>Standby

    [/autoit]


    So ca.
    Mir fehlt jetzt nur die Konstante für den Shutdownbefehl.

  • Ohja ich denke du hast recht.
    Hier steht etwas mehr darüber: http://msdn.microsoft.com/en-us/library/bb394721(VS.85).aspx

    Spoiler anzeigen
    [autoit]


    $WM_QUERYENDSESSION = 0x11

    [/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("", 1, 1, 1, 1)
    GUIRegisterMsg($WM_QUERYENDSESSION, "WM_QUERYENDSESSION")
    GUISetState(@SW_HIDE, $hGUI)
    While 1
    $GUIMsg = GUIGetMsg()
    Switch $GUIMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_QUERYENDSESSION($hWnd, $Msg, $wParam, $lParam)
    return false
    EndFunc

    [/autoit]


    So vielleicht? (ungetestet)

    Müsste unter XP klappen 8)

    3 Mal editiert, zuletzt von nuts (19. März 2010 um 13:04)

  • Wenne brauchst habe mal nen paar funcs gemacht


    [autoit]


    Func _CancelShutdown()
    $aRet = DllCall("user32.dll", "int", "CancelShutdown")
    If Not IsArray($aRet) Then Return SetError(-1, 0, -1)
    Return $aRet[0]
    EndFunc ;==>_CancelShutdown

    [/autoit][autoit][/autoit][autoit]

    Func _AbortSystemShutdown()
    $aRet = DllCall("advapi32.dll", "int", "AbortSystemShutdown", "str", "localhost")
    If Not IsArray($aRet) Then Return SetError(-1, 0, -1)
    Return $aRet[0]
    EndFunc ;==>_AbortSystemShutdown

    [/autoit]
  • Sowas macht man über die Gruppenrichtlinien und fuscht nicht mit irgendwelchen Scripts rum ^^
    Die betreffende Gruppenrichtlinie befindet sich unter Administrative Vorlagen -> Startmenü.


    Falls du keine Domäne hast und das einem lokalen PC realisieren willst :
    Wenn du mit einer Domäne arbeitest gehe ich davon aus, das du weißt wie man mit GPOs umgeht ;)

    Sry hab grad nochmal die Frage gelesen... ;) habe das mit den Programmen übersehen *shameonme*

    21 is only half the truth.

    2 Mal editiert, zuletzt von Mahagon (22. März 2010 um 17:58)

  • *na KLAR!!

    hab dafür gerade ein Programm geschrieben!

    das ganze macht der registrierungsschlüssel:
    (regedit.exe)
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer

    NoClose auf 1 setzen und der Beenden Button geht weg...