Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] после приложения запуск ярлыков (http://forum.oszone.net/showthread.php?t=316342)

yurikfm 30-06-2016 21:01 2646918

после приложения запуск ярлыков
 
появилась необходимость автоматизации отдельно взятого приложения.
после запуска приложения(процесса) должна идти команда на переключение режима питания(ноутбук).
после завершения процесса так же должна идти команда на переключение,но уже обратного режима.
приложением управляю планшетом,через WIFI.из за этого клавиатура и мышь в покое и экран затухает.приходится тревожить клавиатуру или мышь.
возможна ли такая автоматизация?

oz84 01-07-2016 11:58 2647113

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 01-07-2016 18:43 2647266

ммм...значит можно скрипт прикрутить...
теперь как то надо всё это реализовать...
я ж не программист,но скрипт очень нужен.будем изучать...

oz84 03-07-2016 19:22 2647679

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.

Время: 07:24.
© OSzone.net 2001-