yurikfm, попробуйте так:
Код:
![Выделить весь код](images/misc/selectcode.png)
#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:
Код:
![Выделить весь код](images/misc/selectcode.png)
"ваш путь\AutoIt3.exe" "ваш путь\скрипт.au3"
(AutoIt3.exe взять из zip-архива.)