PDA

Показать полную графическую версию : [решено] Автоматизация старт/стоп при неудачном ping-овании


nyevgen
02-06-2010, 14:21
Есть ADSL модем. Входящая скорость 2мб/сек. К модему подключены 2 машины. Программно на обоих машинах скорость ограничевается по 1мб/сек. Как реализовать следующее:
1. Запускается скрипт через автозагрузку и все время висит в трее;
2. Постоянно опрашивает вторую машину есть ли она в сети или нет, через команду ping;
3. Если ЕСТЬ в сети машины - проверяем, запущена ли служба, если нет - запускаем;
4. Если НЕТ в сети машина - проверяем, остановлена ли служба, если запущена - останавливаем.
Файервол не стоит ни на одной машине.

Помогите пожалуйста! Я уже весь интернет перерыл, ничего такого не нашел, в Autoit! не очень силен (автоматизировал только автоустановку приложений), но если подскажите может сам сделаю. Зараннее огромное спасибо!

Iska
02-06-2010, 16:55
nyevgen, что изменилось за полдня по сравнению с этим (http://forum.script-coding.info/viewtopic.php?pid=36254#p36254)?

madmasles
02-06-2010, 17:33
nyevgen,
Попробуйте так, у меня работает. Можно поменять If @IPAddress2 = "0.0.0.0" Then на If Ping("Вторая машина") = 0 Then
#NoTrayIcon (http://www.autoitscript.com/autoit3/docs/keywords.htm##notrayicon)

Opt (http://www.autoitscript.com/autoit3/docs/functions/Opt.htm)("TrayMenuMode", 1)

Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $i = 0
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $sRegRun = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"

;проверка и запись себя в автозагрузку
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) RegRead (http://www.autoitscript.com/autoit3/docs/functions/RegRead.htm)($sRegRun, @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptname)) = "" Or (http://www.autoitscript.com/autoit3/docs/keywords.htm#Or) RegRead (http://www.autoitscript.com/autoit3/docs/functions/RegRead.htm)($sRegRun, @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptname)) <> @ScriptFullPath (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptfullpath) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
RegWrite (http://www.autoitscript.com/autoit3/docs/functions/RegWrite.htm)($sRegRun, @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptname), "REG_SZ", @ScriptFullPath (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptfullpath))
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $exititem = TrayCreateItem (http://www.autoitscript.com/autoit3/docs/functions/TrayCreateItem.htm)("Выход")
TrayCreateItem (http://www.autoitscript.com/autoit3/docs/functions/TrayCreateItem.htm)("")
TraySetState (http://www.autoitscript.com/autoit3/docs/functions/TraySetState.htm)()

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$msg = TrayGetMsg (http://www.autoitscript.com/autoit3/docs/functions/TrayGetMsg.htm)()
Select (http://www.autoitscript.com/autoit3/docs/keywords.htm#Select)
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $msg = $exititem
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndSelect (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndSelect)

$i += 1
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $i = 1000 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) ;прошло 10 секунд
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @IPAddress2 (http://www.autoitscript.com/autoit3/docs/macros.htm#@ipaddress2) = "0.0.0.0" Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) ;нет второй машины в сети.
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) ProcessExists (http://www.autoitscript.com/autoit3/docs/functions/ProcessExists.htm)("Ваш процесс.exe") Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) ProcessClose (http://www.autoitscript.com/autoit3/docs/functions/ProcessClose.htm)("Ваш процесс.exe");если есть процесс, то закрываем его.
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else) ;есть вторая машина в сети
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) ProcessExists (http://www.autoitscript.com/autoit3/docs/functions/ProcessExists.htm)("Ваш процесс.exe") Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Run (http://www.autoitscript.com/autoit3/docs/functions/Run.htm)("Путь к Вашему\Процессу\Ваш процесс.exe");если нет процесса, запускаем его.
;что у Вас за процесс, я не знаю, может он по другому запускается.
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
$i = 0 ;обнуляем счетчик
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(10)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

что изменилось за полдня по сравнению с этим?
Может nyevgen не на VBScript код хочет, а на AutoIt. :)

nyevgen
03-06-2010, 10:34
nyevgen, что изменилось за полдня по сравнению с этим? »
На второй машине сидит пользователь, который вообще мало что в этом понимает. Я ему хочу собрать на Autoit!, чтоб был просто файл *.exe для автозагрузки и в трее будет отображаться. Да и мне удобнее - через radmin к нему зашел - проверил, без его ведома.

Попробуйте так, у меня работает. Можно поменять »
Спасибо. Попробую. Дело еще в том что она работает как служба, и если я убиваю процесс - исчезает только иконка в трее, а служба продолжает работать и ограничивать. Какой командой старт/запуск именно службы?

madmasles
03-06-2010, 12:41
nyevgen,
У меня так службы включаются - выключаются:; 1-й вариант:
Run (http://www.autoitscript.com/autoit3/docs/functions/Run.htm)(@ComSpec (http://www.autoitscript.com/autoit3/docs/macros.htm#@comspec) & " /C sc start служба", "", @SW_HIDE (http://www.autoitscript.com/autoit3/docs/macros.htm#@sw_hide))
Run (http://www.autoitscript.com/autoit3/docs/functions/Run.htm)(@ComSpec (http://www.autoitscript.com/autoit3/docs/macros.htm#@comspec) & " /C sc stop служба", "", @SW_HIDE (http://www.autoitscript.com/autoit3/docs/macros.htm#@sw_hide))
; 2-й вариант:
; если название службы из двух слов (с пробелом), то надо так ""Ваша служба""
RunWait (http://www.autoitscript.com/autoit3/docs/functions/RunWait.htm)(@ComSpec (http://www.autoitscript.com/autoit3/docs/macros.htm#@comspec) & " /C net start ""Ваша служба""", "", @SW_HIDE (http://www.autoitscript.com/autoit3/docs/macros.htm#@sw_hide))
RunWait (http://www.autoitscript.com/autoit3/docs/functions/RunWait.htm)(@ComSpec (http://www.autoitscript.com/autoit3/docs/macros.htm#@comspec) & " /C net stop ""Ваша служба""", "", @SW_HIDE (http://www.autoitscript.com/autoit3/docs/macros.htm#@sw_hide))Если не будет работать из под пользователя не администратора, то можно службу на него перерегистрировать.

nyevgen
03-06-2010, 14:40
If Ping("Вторая машина") = 0 Then »
вот этот вариант заработал.
У меня так службы включаются - выключаются: »
заработал первый вариант.

Все заработало! Спасибо огромное!

nyevgen
03-06-2010, 18:34
Можно еще вопросик. Контекстное меню сделать-сделал. Как сделать пункт "Ввод IP адреса" пингуемой машины так, чтобы выскакивало окошко с кнопками Ок и Отмена для ввода ip адреса?
Зараннее спасибо!

FlatX007
03-06-2010, 18:42
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiIPAddress.au3>
#include <WindowsConstants.au3>

$nForm = GUICreate("", 207, 102, 731, 366)
$hIPAddress = _GUICtrlIpAddress_Create($nForm, 32, 8, 130, 21)
;~ _GUICtrlIpAddress_Set($hIPAddress, "0.0.0.0")
$Button1 = GUICtrlCreateButton("OK", 120, 56, 75, 25, 0)
$Button2 = GUICtrlCreateButton("Cancel", 32, 56, 75, 25, 0)
GUISetState(@SW_SHOW)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $Button2
Exit
Case $Button1
MsgBox (4160, "Information", "IP Address: " & _GUICtrlIpAddress_Get($hIPAddress))
Exit

EndSwitch
WEnd

nyevgen
03-06-2010, 19:16
Подскажите, что я делаю не так??? Ну не силен я в этом. Нужно чтоб в контекстном меню был пункт "Смена IP" - это я сделал. А как сделать чтоб выскакивало "это самое окно" и потом вбивался новый IP в пинговании???


;меню скрипта - кнопка Выход и кнопка Смена IP
Global $exititem = TrayCreateItem("Выход")
TraySetState()
TrayCreateItem("")
Global $nForm = TrayCreateItem("Смена IP")
TraySetIcon("shell32.dll",156)

While 1
$msg = TrayGetMsg()
Select
Case $msg = $exititem
Exit
EndSelect

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiIPAddress.au3>
#include <WindowsConstants.au3>

$nForm = GUICreate("", 207, 102, 731, 366)
$hIPAddress = _GUICtrlIpAddress_Create($nForm, 32, 8, 130, 21)
_GUICtrlIpAddress_Set($hIPAddress, "0.0.0.0")
$Button1 = GUICtrlCreateButton("OK", 120, 56, 75, 25, 0)
$Button2 = GUICtrlCreateButton("Cancel", 32, 56, 75, 25, 0)
GUISetState(@SW_SHOW)

While 2
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $Button2
Exit
Case $Button1
MsgBox (4160, "Information", "IP Address: " & _GUICtrlIpAddress_Get($hIPAddress))
Exit
EndSwitch

FlatX007
03-06-2010, 23:36
#include <GUIConstantsEx.au3>
#include <Constants.au3>
#include <GuiIPAddress.au3>
#include <WindowsConstants.au3>

Global $nForm, $hIPAddress, $sLastIP
Global $START_IP = "127.0.0.1"

Opt("TrayMenuMode", 1)

$hIp = TrayCreateItem("IP Ping")
TrayCreateItem("")
$hExit = TrayCreateItem("Exit")
TraySetState()

$start = 0
While 1
$msg = TrayGetMsg()
Switch $msg
Case $hIp
TrayItemSetState($hIp, $TRAY_UNCHECKED + $TRAY_DISABLE)
TrayItemSetState($hExit, $TRAY_DISABLE)
$sIP = _GuiCreate()
If Not (@error) Then MsgBox(0, "", 'IP - ' & $sIP)
TrayItemSetState($hIp, $TRAY_ENABLE)
TrayItemSetState($hExit, $TRAY_ENABLE)

Case $hExit
Exit

EndSwitch
WEnd

Func _GuiCreate()

$nForm = GUICreate("", 223, 102, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, $WS_CLIPSIBLINGS), BitOR($WS_EX_TOPMOST, $WS_EX_WINDOWEDGE))
$hIPAddress = _GUICtrlIpAddress_Create($nForm, 24, 16, 162, 21)
If Not $sLastIP Then
_GUICtrlIpAddress_Set($hIPAddress, $START_IP)
Else
_GUICtrlIpAddress_Set($hIPAddress, $sLastIP)
EndIf
$Button1 = GUICtrlCreateButton("Ok", 144, 64, 43, 25)
$Button2 = GUICtrlCreateButton("Cancel", 64, 64, 75, 25)

GUISetState(@SW_SHOW, $nForm)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $Button2
GUIDelete($nForm)
Return SetError(1, 0, 0)
Case $Button1
$sLastIP = _GUICtrlIpAddress_Get($hIPAddress)
GUIDelete($nForm)
Return $sLastIP
EndSwitch
WEnd

EndFunc ;==>_GuiCreate

nyevgen
05-06-2010, 22:35
Наверняка кому-то еще пригодится. Нужно совместить это


;нестандартное меню скрипта
Opt("TrayMenuMode", 1)
;меню скрипта - кнопка Выход
Global $exititem = TrayCreateItem("Выход")
TraySetState()
TraySetIcon("shell32.dll",156)
;всплывающая подсказка при наведении мыши
TraySetToolTip('Ping My Lan')
While 1
$msg = TrayGetMsg()
Select
Case $msg = $exititem
Exit
EndSelect

;цикл работы скрипта
$i += 1
If $i = 1000 Then ;если прошло 10 секунд...
If Ping("127.0.0.1") = 0 Then ;если машины нет в сети...
TraySetIcon("shell32.dll",338);меняем иконку
TraySetToolTip('Ping My Lan - Юзера нет в сети');всплывающая подсказка при наведении мыши
If ProcessExists("ваш процесс") Then Run(@ComSpec & " /C sc stop служба", "", @SW_HIDE);проверяем наличие запущенного процесса службы "ваша служба", если есть - останавливаем службу.
Else ;если машина есть в сети...
TraySetIcon("shell32.dll",239);меняем иконку
TraySetToolTip('Ping My Lan - Юзер в сети');всплывающая подсказка при наведении мыши
If Not ProcessExists("ваш процесс") Then Run(@ComSpec & " /C sc start служба", "", @SW_HIDE);проверяем наличие запущенного процесса службы "ваша служба", если нет - запускаем службу.
EndIf
$i = 0 ;обнуляем счетчик
EndIf
Sleep(10)
WEnd

и вот это (http://forum.oszone.net/post-1426950-10.html)


#include <GUIConstantsEx.au3>
#include <Constants.au3>
#include <GuiIPAddress.au3>
#include <WindowsConstants.au3>

Global $nForm, $hIPAddress, $sLastIP
Global $START_IP = "127.0.0.1"

Opt("TrayMenuMode", 1)

$hIp = TrayCreateItem("IP Ping")
TrayCreateItem("")
$hExit = TrayCreateItem("Exit")
TraySetState()

$start = 0
While 1
$msg = TrayGetMsg()
Switch $msg
Case $hIp
TrayItemSetState($hIp, $TRAY_UNCHECKED + $TRAY_DISABLE)
TrayItemSetState($hExit, $TRAY_DISABLE)
$sIP = _GuiCreate()
If Not (@error) Then MsgBox(0, "", 'IP - ' & $sIP)
TrayItemSetState($hIp, $TRAY_ENABLE)
TrayItemSetState($hExit, $TRAY_ENABLE)

Case $hExit
Exit

EndSwitch
WEnd

Func _GuiCreate()

$nForm = GUICreate("", 223, 102, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, $WS_CLIPSIBLINGS), BitOR($WS_EX_TOPMOST, $WS_EX_WINDOWEDGE))
$hIPAddress = _GUICtrlIpAddress_Create($nForm, 24, 16, 162, 21)
If Not $sLastIP Then
_GUICtrlIpAddress_Set($hIPAddress, $START_IP)
Else
_GUICtrlIpAddress_Set($hIPAddress, $sLastIP)
EndIf
$Button1 = GUICtrlCreateButton("Ok", 144, 64, 43, 25)
$Button2 = GUICtrlCreateButton("Cancel", 64, 64, 75, 25)

GUISetState(@SW_SHOW, $nForm)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $Button2
GUIDelete($nForm)
Return SetError(1, 0, 0)
Case $Button1
$sLastIP = _GUICtrlIpAddress_Get($hIPAddress)
GUIDelete($nForm)
Return $sLastIP
EndSwitch
WEnd

EndFunc ;==>_GuiCreate


А то у меня ничего не выходит.
Нужно следующее:
- есть скрипт, пингует - откл/вкл службу. как сделать чтоб еще в контекстном меню был пункт - IP - выскакивало окошко где вводится другой ip для последующего пингования и откл/вкл службы соотвественно.

Зараннее спасибо!!!

FlatX007
07-06-2010, 16:38
#include <GUIConstantsEx.au3>
#include <Constants.au3>
#include <GuiIPAddress.au3>
#include <WindowsConstants.au3>

Global $nForm, $hIPAddress, $sLastIP, $Timer

Global $START_IP = "127.0.0.1"
Global $WAITING = 10
Global $PROCESS_WELL_PC = 'pr_1.exe'
Global $PROCESS_BAD_PC = 'pr_2.exe'

Global $GLOBAL_IP = $START_IP

Opt("TrayMenuMode", 1)
$Timer = TimerInit()

$hIp = TrayCreateItem("IP Ping")
TrayCreateItem("")
$hExit = TrayCreateItem("Exit")
TraySetState()
TraySetIcon("shell32.dll", 156)

While 1
$msg = TrayGetMsg()
Switch $msg
Case $hIp
TrayItemSetState($hIp, $TRAY_UNCHECKED + $TRAY_DISABLE)
TrayItemSetState($hExit, $TRAY_DISABLE)
$sIP = _GuiCreate()
If Not (@error) Then $GLOBAL_IP = $sIP
TrayItemSetState($hIp, $TRAY_ENABLE)
TrayItemSetState($hExit, $TRAY_ENABLE)

Case $hExit
Exit

Case Else
If (Round(TimerDiff($Timer) / 1000)) > $WAITING Then
ConsoleWrite('ping - ' & $GLOBAL_IP & @CRLF)
$Ping = Ping($GLOBAL_IP)
$Error = @error
$Hint = _ErrorPing($Error)
If $Ping = 0 Then
_IpPingBadPC($Hint)
Else
_IpPingWellPC($Hint)
EndIf
$Timer = TimerInit()
EndIf
EndSwitch

WEnd

Func _IpPingWellPC($Hint = '')

TraySetIcon("shell32.dll", 239)
TraySetToolTip($Hint)
If Not ProcessExists($PROCESS_WELL_PC) Then Run(@ComSpec & " /C sc start служба", "", @SW_HIDE)

EndFunc ;==>_IpPingWellPC

Func _IpPingBadPC($Hint = '') ;если машины нет в сети...

TraySetIcon("shell32.dll", 338)
TraySetToolTip($Hint)
If ProcessExists($PROCESS_BAD_PC) Then Run(@ComSpec & " /C sc stop служба", "", @SW_HIDE)

EndFunc ;==>_IpPingBadPC

Func _ErrorPing($Error = 0)

Switch $Error
Case 1
Return "Xост работает в автономном режиме"
Case 2
Return "Xост недостижим"
Case 3
Return "Xост неверно указан"
Case 4
Return "Другие ошибки"
Case Else
Return "Xост Онлайн"
EndSwitch

EndFunc ;==>_ErrorPing

Func _GuiCreate()

$nForm = GUICreate("", 223, 102, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, $WS_CLIPSIBLINGS), BitOR($WS_EX_TOPMOST, $WS_EX_WINDOWEDGE))
$hIPAddress = _GUICtrlIpAddress_Create($nForm, 24, 16, 162, 21)
If Not $sLastIP Then
_GUICtrlIpAddress_Set($hIPAddress, $START_IP)
Else
_GUICtrlIpAddress_Set($hIPAddress, $sLastIP)
EndIf
$Button1 = GUICtrlCreateButton("Ok", 144, 64, 43, 25)
$Button2 = GUICtrlCreateButton("Cancel", 64, 64, 75, 25)

GUISetState(@SW_SHOW, $nForm)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $Button2
GUIDelete($nForm)
Return SetError(1, 0, 0)
Case $Button1
$sLastIP = _GUICtrlIpAddress_Get($hIPAddress)
GUIDelete($nForm)
Return $sLastIP
EndSwitch
WEnd

EndFunc ;==>_GuiCreate

nyevgen
08-06-2010, 17:11
FlatX007, ОГРОМНОЕ СПАСИБО!!!

nyevgen
30-09-2010, 23:12
А как все это можно организовать в Windows Seven? Может каким-то иным способом можно. И еще (по возможности), как сделать чтоб пинговало несколько IP-адресов?

FlatX007
30-09-2010, 23:28
А я и придумавал это в Windows Seven =)

in-com
09-10-2010, 08:15
придумавал это »
А как еще можно в этот скрипт добавить порт для проверки?

nyevgen
13-10-2010, 19:22
А я и придумавал это в Windows Seven »
#cs ----------------------------------------------------------------------------
;AutoIt Version: 3.3.6.1

;Описание скрипта:
;Запускается скрипт и мониторит сетевой ресурс на наличие его в сети
;Если сетевой ресурс пропадает из сети скрипт останавливает службу TMetr
;Как только сетевой ресурс появляется в сети происходит запуск службы TMetr
#ce ----------------------------------------------------------------------------

;предотвращение возможности множественного запуска скрипта
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)

;объявление переменных для реестра
Global $i = 0
Global $sRegRun = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
;проверка реестра и запись себя в автозагрузку
If RegRead($sRegRun, @ScriptName) = "" Or RegRead($sRegRun, @ScriptName) <> @ScriptFullPath Then
RegWrite($sRegRun, @ScriptName, "REG_SZ", @ScriptFullPath)
EndIf

;нестандартное меню скрипта
Opt("TrayMenuMode", 1)
;меню скрипта - кнопка Выход
Global $exititem = TrayCreateItem("Выход")
TraySetState()
TraySetIcon("shell32.dll",156)
;всплывающая подсказка при наведении мыши
TraySetToolTip('Ping My Lan')
While 1
$msg = TrayGetMsg()
Select
Case $msg = $exititem
Exit
EndSelect

;цикл работы скрипта
$i += 1
If $i = 1000 Then ;если прошло 10 секунд...
If Ping("192.168.1.2") = 0 Then ;если машины нет в сети...
TraySetIcon("shell32.dll",338);меняем иконку
TraySetToolTip('Ping My Lan - Юзера нет в сети');всплывающая подсказка при наведении мыши
If ProcessExists("TrafSvc.exe") Then Run(@ComSpec & " /C sc stop TrafSvc", "", @SW_HIDE);проверяем наличие запущенного процесса службы TMetr, если есть - останавливаем службу.
Else ;если машина есть в сети...
TraySetIcon("shell32.dll",239);меняем иконку
TraySetToolTip('Ping My Lan - Юзер в сети');всплывающая подсказка при наведении мыши
If Not ProcessExists("TrafSvc.exe") Then Run(@ComSpec & " /C sc start TrafSvc", "", @SW_HIDE);проверяем наличие запущенного процесса службы TMetr, если нет - запускаем службу.
EndIf
$i = 0 ;обнуляем счетчик
EndIf
Sleep(10)
WEnd
У меня на Windows Seven службу не останавливает. Запускается, отображается в трее, меняется значок при "есть/нет юзера", но служба не останавливатся. Думал может служба в семерке по другому называется, проверил так же. Но не работает скрипт поностью.

Разобрался. От имени администратора нужно было запускать.

nyevgen
23-04-2011, 17:06
А не поможете еще в одном деле? В ;предотвращение возможности множественного запуска скрипта
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)

;объявление переменных для реестра
Global $i = 0
Global $sRegRun = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
;проверка реестра и запись себя в автозагрузку
If RegRead($sRegRun, @ScriptName) = "" Or RegRead($sRegRun, @ScriptName) <> @ScriptFullPath Then
RegWrite($sRegRun, @ScriptName, "REG_SZ", @ScriptFullPath)
EndIf

;нестандартное меню скрипта
Opt("TrayMenuMode", 1)
;меню скрипта - кнопка Выход
Global $exititem = TrayCreateItem("Выход")
TraySetState()
TraySetIcon("shell32.dll",156)
;всплывающая подсказка при наведении мыши
TraySetToolTip('Ping My Lan')
While 1
$msg = TrayGetMsg()
Select
Case $msg = $exititem
Exit
EndSelect

;цикл работы скрипта
$i += 1
If $i = 500 Then ;если прошло 5 секунд...
If Ping("192.168.1.2") = 0 Then ;если машины нет в сети...
TraySetIcon("shell32.dll",338);меняем иконку
TraySetToolTip('Ping My Lan - Юзера нет в сети');всплывающая подсказка при наведении мыши
If ProcessExists("TrafSvc.exe") Then Run(@ComSpec & " /C sc stop TrafSvc", "", @SW_HIDE);проверяем наличие запущенного процесса службы TMetr, если есть - останавливаем службу.
Else ;если машина есть в сети...
TraySetIcon("shell32.dll",239);меняем иконку
TraySetToolTip('Ping My Lan - Юзер в сети');всплывающая подсказка при наведении мыши
If Not ProcessExists("TrafSvc.exe") Then Run(@ComSpec & " /C sc start TrafSvc", "", @SW_HIDE);проверяем наличие запущенного процесса службы TMetr, если нет - запускаем службу.
EndIf
$i = 0 ;обнуляем счетчик
EndIf
Sleep(5)
WEnd
скрипт добавить следующее:
- пингование IP адресов от 1 до 10 (т.е. 192.168.1.1, 192.168.1.2 и т.д.)
- в случае удачного пингования ХОТЯ БЫ ОДНОГО IP адреса скрипт останавливает службу
- в случае НЕудачного пинга ни от одной машины служба запускалась

ПОМОГИТЕ, ПОЖАЛУЙСТА!!!




© OSzone.net 2001-2012