-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
после приложения запуск ярлыков
появилась необходимость автоматизации отдельно взятого приложения.
после запуска приложения(процесса) должна идти команда на переключение режима питания(ноутбук).
после завершения процесса так же должна идти команда на переключение,но уже обратного режима.
приложением управляю планшетом,через WIFI.из за этого клавиатура и мышь в покое и экран затухает.приходится тревожить клавиатуру или мышь.
возможна ли такая автоматизация?
|
yurikfm
Код:
;Чтобы не отключался/не переходил в спящий/ждущий
_WinAPI_SetThreadExecutionState(BitOR($ES_SYSTEM_REQUIRED, $ES_CONTINUOUS))
;Или
;Чтобы не отключался экран:
_WinAPI_SetThreadExecutionState(BitOR($ES_DISPLAY_REQUIRED, $ES_CONTINUOUS))
RunWait('ваш процесс') ;Или цикл с ProcessExists()
;Возвращаем как было
_WinAPI_SetThreadExecutionState($ES_CONTINUOUS)
(Флаги, вероятно, можно объединить.)
UDF для 3.3.8.1 брать здесь, в новых версиях присутствует в дистрибутиве.
P.S. Правильнее, ИМХО, проверять схему и вызывать функцию _WinAPI_SetThreadExecutionState() только в случае необходимости. У себя делал такой скрипт со схожей задачей.
|
ммм...значит можно скрипт прикрутить...
теперь как то надо всё это реализовать...
я ж не программист,но скрипт очень нужен.будем изучать...
|
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-архива.)
|
Время: 07:24.
© OSzone.net 2001-