0

我希望能够防止在 Windows 7 上定期关机。我找到了这个 AutoIt 脚本,但它并没有真正单击强制关机对话框上的 CANCEL 按钮。

有人可以测试它并告诉我到底出了什么问题?

$WM_QUERYENDSESSION = 0x11
GUIRegisterMsg($WM_QUERYENDSESSION, "Cancel_Shutdown")
$Hwnd = GUICreate("PreventShutdownGUI")
;~ GUISetSTate(@SW_SHOW)


_ShutdownBlockReasonCreate($hwnd, "Sorry, AutoIt > Windows")
TrayTip("Shutdown Blocker - Started", "Denies shutdowns from now on.", 20)
While Sleep(100)
WEnd
_ShutdownBlockReasonDestroy($hwnd)

Func _ShutdownBlockReasonCreate($Hwnd, $wStr)
    ; http://msdn.microsoft.com/en-us/library/ms...28VS.85%29.aspx
    ; Prog@ndy
    Local $aResult = DllCall("User32.dll", "int", "ShutdownBlockReasonCreate", "hwnd", $Hwnd, "wstr", $wStr)
    If @error Then Return SetError(1,0,0)
    Return $aResult[0]
EndFunc

Func _ShutdownBlockReasonDestroy($Hwnd)
    Local $aResult = DllCall("User32.dll", "int", "ShutdownBlockReasonDestroy", "hwnd", $Hwnd)
    If @error Then Return SetError(1,0,0)
    Return $aResult[0]
EndFunc

Func Cancel_Shutdown($hWndGUI, $MsgID, $WParam, $LParam)
    ; This HAS to be here to capture the endsession...
    AdlibRegister("Cancel_ShutdownResolver",50)
    Return False
EndFunc

Func Cancel_ShutdownResolver()
    Local $iOpt = Opt("WinTitleMatchMode",4),$hwnd = WinGetHandle("[CLASS:BlockedShutdownResolver]")
    Opt("WinTitleMatchMode",$iOpt)
    If $hwnd Then
        If @OSVersion = "WIN_7" Then ControlClick($hwnd,"","[CLASS:Button; INSTANCE:1]")
        If @OSVersion <> "WIN_7" Then ControlClick($hwnd,"","[CLASS:Button; INSTANCE:2]")
        AdlibUnRegister("Cancel_ShutdownResolver")
        TrayTip("Shutdown Blocker - Shutdown denied", "Denied shutdown successfull!", 5)
        _DeineFunktion()  ; <================ Hier musst du deine Funktion einfügen
    EndIf
EndFunc

Func _DeineFunktion()
    MsgBox(0,"","Das hier ist deine Funktion ;) - Danach musst du erneut _ShutdownBlockReasonDestroy($hwnd) aufrufen, und einen neuen Shutdown machen.")
EndFunc
4

1 回答 1

2

在我看来这是一种防止autoit函数被杀死的方法..

_deineFunction()(德语为您的功能)是您不想被杀死的功能。

于 2012-06-16T22:13:23.787 回答