vicbox777
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору В этом коде выключения монитора: Код: #AutoIt3Wrapper_Icon=F:\Рисунки\Значки\Значок62.ico if ProcessExists(@Scriptname) then exit endif Opt("TrayMenuMode",1) Global Const $lciWM_SYSCommand = 274 Global Const $lciSC_MonitorPower = 61808 Global Const $lciPower_Off = 2 Global Const $lciPower_On = -1 Global $MonitorIsOff = False HotKeySet("{PAUSE}", "_ON_OFF") HotKeySet("{Esc}", "_Quit") $TrayExit = TrayCreateItem("Выход") TrayTip ("Включение/Выключение монитора", "Pause/Break -- Выключить/Включить монитор." & @LF & _ "ESC -- Включить монитор и выйти из программы.", 0,1) While 1 $msg = TrayGetMsg() Switch $msg Case $TrayExit Exit Sleep(100) EndSwitch WEnd Func _Monitor_ON() $MonitorIsOff = False Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]') DllCall('user32.dll', 'int', 'SendMessage', _ 'hwnd', $Progman_hwnd, _ 'int', $lciWM_SYSCommand, _ 'int', $lciSC_MonitorPower, _ 'int', $lciPower_On) EndFunc Func _Monitor_OFF() $MonitorIsOff = True Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]') While $MonitorIsOff = True DllCall('user32.dll', 'int', 'SendMessage', _ 'hwnd', $Progman_hwnd, _ 'int', $lciWM_SYSCommand, _ 'int', $lciSC_MonitorPower, _ 'int', $lciPower_Off) _IdleWaitCommit(0) Sleep(30) WEnd EndFunc Func _IdleWaitCommit($idlesec) Local $iSave, $LastInputInfo = DllStructCreate ("uint;dword") DllStructSetData ($LastInputInfo, 1, DllStructGetSize ($LastInputInfo)) DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo)) Do $iSave = DllStructGetData ($LastInputInfo, 2) Sleep(60) DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo)) Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec Or $MonitorIsOff = False Return DllStructGetData ($LastInputInfo, 2)-$iSave EndFunc Func _Quit() _Monitor_ON() Exit EndFunc Func _ON_OFF() If $MonitorIsOff = False then _Monitor_OFF() Else _Monitor_ON() endif EndFunc | у меня проблема возникает в том, что нужно как то при запуске проверять наличие процесса с таким именем, и если такой существует, то вторую копию программы не запускать... Было бы окно, то ясно, но с существованием процесса как? То что у меня тут: Код: if ProcessExists(@Scriptname) then exit endif | не дает программе вобще запускаться... и ясно почему. |