Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Старожил


Сообщения: 168
Благодарности: 40

Профиль | Отправить PM | Цитировать


yurikfm, попробуйте так:
Код: Выделить весь код
#NoTrayIcon

Opt('WinWaitDelay', 100)

Global Const $ES_CONTINUOUS = 0x80000000
Global Const $ES_DISPLAY_REQUIRED = 0x00000002

Local $sActivePowerScheme, $iCompToSleep

;Читаем в реестре, какая схема питания активна
$sActivePowerScheme = RegRead('HKLM\SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes', 'ActivePowerScheme')
;Проверяем, включена ли в ней опциия автоотключение дисплея
$iCompToSleep = RegRead('HKLM\SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes\' & $sActivePowerScheme & '\7516b95f-f776-4464-8c53-06167f40cc99\3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e', 'ACSettingIndex')
;Если отключение дисплея не включено - запускаем программу и скрипт завершается
If $iCompToSleep = 0 Then
    Run('Ваша программа')
    Exit
;иначе отключаем отключение дисплея, запускаем программу, ждём её завершения, потом возвращаем как было
Else
    _WinAPI_SetThreadExecutionState(BitOR($ES_DISPLAY_REQUIRED, $ES_CONTINUOUS))
    Sleep(100)
    RunWait('Ваша программа')
    Sleep(100)
    _WinAPI_SetThreadExecutionState($ES_CONTINUOUS)
    Exit
EndIf

Func _WinAPI_SetThreadExecutionState($iFlags)
    Local $Ret = DllCall('kernel32.dll', 'dword', 'SetThreadExecutionState', 'dword', $iFlags)
    If (@error) Or (Not $Ret[0]) Then
        Return SetError(1, 0, 0)
    EndIf
    Return $Ret[0]
EndFunc   ;==>_WinAPI_SetThreadExecutionState
Вместо 'Ваша программа' напишите путь к вашей программе (если программа при запуске запрашивает права администратора, то есть смысл заменить Run() и RunWait() на ShellExecute() и ShellExecuteWait() соотв.).
Запуск можно организовать обычным ярлыком, даже без инсталляции AutoIt:
Код: Выделить весь код
"ваш путь\AutoIt3.exe" "ваш путь\скрипт.au3"
(AutoIt3.exe взять из zip-архива.)

-------
ОЗ


Отправлено: 19:22, 03-07-2016 | #4