Что нового

[Автоматизация] Перехват нажатия "Завершить работу" в Windows 7/8.1/10

adem_blackv

Новичок
Сообщения
5
Репутация
0
Всем доброго времени суток.
Суть в том что надо переводить компьютер в гибернацию. Я так и не смог найти материал как перехватить событие нажатия кнопки Завершить работы. Вот скрипт который я нашел и немного переделал, но он не работает

Код:
Func Cancel_ShutdownResolver()
    Local $iOldOption, $hWnd
    $iOldOption = Opt("WinTitleMatchMode", 4)
    $hWnd = WinGetHandle("[CLASS:BlockedShutdownResolver]")
    Opt("WinTitleMatchMode", $iOldOption)

    If $hWnd Then
       ShellExecute("C:\Windows\System32\shutdown.exe","-a")
	   sleep(2)
	   ShellExecute("C:\Windows\System32\shutdown.exe","-h")
    EndIf
EndFunc   ;==>Cancel_ShutdownResolver
 
Автор
A

adem_blackv

Новичок
Сообщения
5
Репутация
0
joiner

переделал код под свои нужды, взял из темы но он не отменяет завершение работы, на синем экране о завершении работы вылазит ошибка, что-то с shutdown, не успеваю сфоткать ошибку.

Вот код:
Код:
#Include <WinAPIEx.au3>

OnAutoItExitRegister('_Quit')

_WinAPI_EmptyWorkingSet()

While 1
    Sleep(1000)
WEnd


Func _Quit()
	 ShellExecute("C:\Windows\System32\shutdown.exe","-a")
	   EndFunc
   ;==>_Quit




Добавлено:
Сообщение автоматически объединено:

Переделал так, но все равно не работает, и ошибка с shutdown не вылазит
Код:
#Include <WinAPIEx.au3>

OnAutoItExitRegister('_Quit')

_WinAPI_EmptyWorkingSet()

While 1
    Sleep(1000)
WEnd

Func _Quit()
	 $i=1
EndFunc

Func f()
	if $i=1 Then
	 ShellExecute("C:\Windows\System32\shutdown.exe","-a")
	EndIf
	EndFunc


P.S. В AutoIt ноль, в Java немного силен, но не AutoIt.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
adem_blackv
еще раз перечитал
так нужно перехватить завершение работы или переход в гибернацию?
если завершение, то я дал ссылку на пример. зачем мудрить?
если ты хочешь подконтрольный комп обезопасить от завершения(и прочего) системы, то есть групповые политики. запрети
 
Автор
A

adem_blackv

Новичок
Сообщения
5
Репутация
0
joiner сказал(а):
adem_blackv
еще раз перечитал
так нужно перехватить завершение работы или переход в гибернацию?
если завершение, то я дал ссылку на пример. зачем мудрить?
если ты хочешь подконтрольный комп обезопасить от завершения(и прочего) системы, то есть групповые политики. запрети
Я хочу чтобы комп переходил в гибернацию, вместо завершения работы. Вот и придумал схему, перехват нажатия Завершить работу, и сразу команда shutdown - a, а за ней shutdown - h. Не катит схема?
Суть в том чтобы комп по нажатию Завершить работу переходил в гибернацию, не надо чтобы он отключился. Но сделать это так чтобы не заметно было.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
компилируй
запусти
потом выключи комп через Пуск-выключить
должен перейти в ждущий режим
остальные режимы читай в справке

Код:
#RequireAdmin
#Include <GUIConstantsEx.au3>
#include <WinAPISys.au3>

_WinAPI_SetProcessShutdownParameters(0x03FF)

Global $hForm = GUICreate('')
GUIRegisterMsg(0x0011, 'WM_QUERYENDSESSION')

_WinAPI_ShutdownBlockReasonCreate($hForm, ' ')

While 1
    Sleep(1000)
WEnd

Func WM_QUERYENDSESSION($hWnd, $Msg, $wParam, $lParam)
    Switch $hWnd
        Case $hForm
            If _WinAPI_ShutdownBlockReasonQuery($hForm) Then
				_WinAPI_ShutdownBlockReasonDestroy($hForm)
               Shutdown(32)
;~ 			   Shutdown(64)
                Return 0
            EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_QUERYENDSESSION


Добавлено:
Сообщение автоматически объединено:

слегка поигрался
не использовать
Код:
_WinAPI_ShutdownBlockReasonDestroy($hForm)

то и сигнал перезагрузки тоже заменяется ждущим режимом
 
Верх