Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;Если включен автопереход в сон/гибернацию: выбрать программу, до завершения которой фича будет отключена.
- ;2018.05.11
- #NoTrayIcon
- Opt('WinWaitDelay', 100)
- Global Const $GUI_EVENT_CLOSE = -3
- Global Const $LVS_SINGLESEL = 0x0004
- Global Const $LVS_SORTASCENDING = 0x0010
- Global Const $LVM_FIRST = 0x1000
- Global Const $LVM_SETCOLUMNWIDTH = ($LVM_FIRST + 30)
- Global Const $ES_CONTINUOUS = 0x80000000
- ;Global Const $ES_DISPLAY_REQUIRED = 0x00000002
- Global Const $ES_SYSTEM_REQUIRED = 0x00000001
- Local $hGUI, $iControl, $sActivePowerScheme, $iCompToSleep, $aProcessList, $ListView, $i, $Button1, $Button2, $item, $text, $iTmp = 0
- ;Проверяем, что это не запуск второй копии скрипта
- If WinExists("DontSleep - " & @ScriptFullPath) Then
- If MsgBox(4 + 32+ 4096, "DontSleep", "Завершить скрипт " & Chr(34) & "DontSleep" & Chr(34) & "?") = 6 Then
- $hGUI = WinGetHandle("DontSleep - " & @ScriptFullPath)
- If Not @error Then
- WinClose($hGUI)
- Else
- MsgBox(16 + 4096, "DontSleep", "Unknown error: WinGetHandle()")
- EndIf
- EndIf
- Exit
- EndIf
- ;Устанавливаем заголовок
- AutoItWinSetTitle("DontSleep - " & @ScriptFullPath)
- ;Активная схема
- $sActivePowerScheme = RegRead('HKLM\SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes', 'ActivePowerScheme')
- ;Перевод компьютера в спящий режим
- $iCompToSleep = RegRead('HKLM\SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes\' & $sActivePowerScheme & '\238c9fa8-0aad-41ed-83f4-97be242c8f20\29f6c1db-86da-48c5-9fdb-f2b67b1f44da', 'ACSettingIndex')
- If @error Then $iCompToSleep = 1
- ;Отключение дисплея
- ;RegRead('HKLM\SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes\' & $sActivePowerScheme & '\7516b95f-f776-4464-8c53-06167f40cc99\3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e', 'ACSettingIndex')
- If $iCompToSleep = 0 Then Exit
- ;Список всех процессов
- $aProcessList = ProcessList()
- ;GUI
- $hGUI = GUICreate('Process List', 260, 350)
- $ListView = GUICtrlCreateListView('Имя|PID', 8, 8, 244, 300, BitOR($LVS_SINGLESEL, $LVS_SORTASCENDING))
- For $i = 1 To $aProcessList[0][0]
- ;Убираем кучу всего:
- If $aProcessList[$i][0] = '[System Process]' Then ContinueLoop
- If $aProcessList[$i][0] = 'System' Then ContinueLoop
- If $aProcessList[$i][1] = @AutoItPID Then ContinueLoop
- If StringRegExp($aProcessList[$i][0], '(?i)^(aswidsagent|atieclxx|atiesrxx|audiodg|AvastSvc|AvastUI|btwdins|CCC|cfp|cmdagent|conhost|CoolSense|csrss|cvhsvc|DCService|DCSHelper|DTSAudioService|DTSAudioService64|dwm|ezSharedSvcHost|Fuel\.Service|HPDrvMntSvc|hpqWmiEx|hpservice|HydraDM|KMSSS|lsass|lsm|MOM|nlssrv32|OFFICEVIRT|OSPPSVC|RAVBg64|RtHDVBg|RtkNGUI|RtkNGUI64|services|sftlist|sftvsa|smss|spoolsv|ss_conn_service|stacsv|sttray|svchost|taskhost|wininit|winlogon|wlanext|WmiPrvSE|WUDFHost|)\.exe$', 0) Then ContinueLoop
- GUICtrlCreateListViewItem($aProcessList[$i][0] & '|' & $aProcessList[$i][1], $ListView)
- Next
- $Button1 = GUICtrlCreateButton('OK', 36, 318, 80, 22)
- $Button2 = GUICtrlCreateButton('Отмена', 124, 318, 80, 22)
- ;Устанавливаем ширину по длине текста
- GUICtrlSendMsg($ListView, $LVM_SETCOLUMNWIDTH, 0, -1)
- GUISetState(@SW_SHOW)
- While 1
- Switch GUIGetMsg()
- Case $Button1
- $item = GUICtrlRead($ListView) ; Получить идентификатор (ID) текущего выделенного пункта ListView
- If $item = 0 Then
- MsgBox(64 + 4096, "DontSleep", 'Ошибка: Ничего не выделено.', 0, $hGUI)
- Else
- $text = GUICtrlRead($item, 1) ; Получить текст пункта ListView
- If $text == '' Then
- MsgBox(16 + 4096, "DontSleep", 'Ошибка при поиске инфо о пункте.', 0, $hGUI)
- Else
- ;Вытаскиваем из строки PID процесса
- $text = StringRegExpReplace($text, '^([^\|]+?\|)([0-9]{1,})\|$', '\2', 1)
- ;Чтобы не отключался/не переходил в спящий/ждущий
- _WinAPI_SetThreadExecutionState(BitOR($ES_SYSTEM_REQUIRED, $ES_CONTINUOUS))
- ;Чтобы не отключался экран:
- ;_WinAPI_SetThreadExecutionState(BitOR($ES_DISPLAY_REQUIRED, $ES_CONTINUOUS))
- $iTmp = 1
- GUISetState(@SW_HIDE)
- GUICtrlDelete($Button1)
- GUICtrlDelete($Button2)
- ;Регистрируем функцию проверки существования процесса
- AdlibRegister('__CheckProc', 1000)
- OnAutoItExitRegister('__Exit')
- EndIf
- EndIf
- Case $Button2
- Exit
- Case $GUI_EVENT_CLOSE
- Exit
- EndSwitch
- WEnd
- Func __CheckProc()
- If Not ProcessExists($text) Then
- AdlibUnRegister('__CheckProc')
- OnAutoItExitUnRegister('__Exit')
- If $iTmp = 1 Then
- ;Включаем обратно и завершаем скрипт
- _WinAPI_SetThreadExecutionState($ES_CONTINUOUS)
- $iTmp = 0
- EndIf
- Exit
- EndIf
- EndFunc ;==>__CheckProc
- Func __Exit()
- If $iTmp = 1 Then
- ;Включаем обратно и завершаем скрипт
- _WinAPI_SetThreadExecutionState($ES_CONTINUOUS)
- EndIf
- EndFunc ;==>__Exit
- 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement