#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <ProgressConstants.au3>
#include <GuiStatusBar.au3>
#include <Inet.au3>
#include <FontConstants.au3>
#include <WinAPIEx.au3>;Yashied, http://autoit-script.ru/index.php/topic,47.0.html
#include <Constants.au3>
Opt('GUICloseOnESC', 0)
Opt('TrayMenuMode', 1)
Opt('MustDeclareVars', 1)
Global $hAutoIt, $hGui, $nInput_From, $nUpdown_From, $nInput_To, $nUpdown_To, $nButton_Ping, $hImage, $nMsg, _
$nListView, $hListView, $hStatus, $nProgressAll, $sMask = '192.168.0.', $fDel, $sStartDate, _
$sEndDate, $iPingTime = 3000, $i_From, $i_To, $sName, $iPing, $iCountRow, $hPrev, $sOnLine, $sOffLine, _
$sFileOn, $sFileOff, $iCountOn, $iCountOff, $hFile, $nButtonExit, $aStatusPart[2] = [200, -1], _
$nProgressPing, $hProgressPing, $iPID, $iStartPing
If WinExists(@ScriptName & '{[/@$@\]}') Then Exit
AutoItWinSetTitle(@ScriptName & '{[/@$@\]}')
$hAutoIt = WinGetHandle(AutoItWinGetTitle())
$hImage = _GUIImageList_Create(16, 16, 5, 1)
_GUIImageList_AddIcon($hImage, @SystemDir & '\user32.dll', -104)
_GUIImageList_AddIcon($hImage, @SystemDir & '\user32.dll', -103)
$hGui = GUICreate('OnLine-OffLine', 354, 375, -1, -1, $WS_OVERLAPPED, $WS_EX_TOOLWINDOW)
$nInput_From = GUICtrlCreateInput(0, 120, 10, 60, 25, $ES_READONLY)
$nUpdown_From = GUICtrlCreateUpdown($nInput_From)
GUICtrlSetLimit(-1, 255, 0)
$nInput_To = GUICtrlCreateInput(255, 190, 10, 60, 25, $ES_READONLY)
$nUpdown_To = GUICtrlCreateUpdown($nInput_To)
GUICtrlSetLimit(-1, 255, 0)
GUICtrlCreateInput($sMask, 10, 10, 100, 25, $ES_READONLY)
$nButton_Ping = GUICtrlCreateButton('Пинг', 260, 9, 80, 27)
$nButtonExit = GUICtrlCreateButton('Выход', 125, 295, 100, 30)
For $i = $nInput_From To $nButtonExit
GUICtrlSetFont($i, 12)
Next
$nListView = GUICtrlCreateListView('', 10, 45, 330, 245, -1, _
BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES))
$hListView = GUICtrlGetHandle($nListView)
_GUICtrlListView_AddColumn($hListView, 'IP адрес', 100, 2)
_GUICtrlListView_AddColumn($hListView, 'Имя', 160, 2)
_GUICtrlListView_AddColumn($hListView, 'On/Off', 65, 2)
_GUICtrlListView_SetImageList($hListView, $hImage, 1)
$nProgressPing = GUICtrlCreateProgress(0, 0, -1, -1, $PBS_SMOOTH)
$hProgressPing = GUICtrlGetHandle($nProgressPing)
$hStatus = _GUICtrlStatusBar_Create($hGui, $aStatusPart)
_GUICtrlStatusBar_SetText($hStatus, @TAB & @TAB & 'Выберите диапозон IP-адресов')
_GUICtrlStatusBar_SetText($hStatus, 'и нажмите "Пинг"', 1)
$nProgressAll = GUICtrlCreateProgress(10, 300, 330, 20, $PBS_SMOOTH)
GUICtrlSetState(-1, $GUI_HIDE)
GUISetState()
_GUICtrlStatusBar_EmbedControl($hStatus, 1, $hProgressPing)
GUICtrlSetState($nProgressPing, $GUI_HIDE)
_WinAPI_EmptyWorkingSet()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $nButtonExit
Exit
Case $nUpdown_From
$i_From = Number(GUICtrlRead($nInput_From))
GUICtrlSetLimit($nUpdown_To, 255, $i_From)
$i_To = Number(GUICtrlRead($nInput_To))
If $i_From > $i_To Then
GUICtrlSetData($nInput_To, $i_From)
EndIf
Case $nButton_Ping
If $fDel Then
_GUICtrlListView_DeleteAllItems($hListView)
EndIf
GUICtrlSetData($nProgressAll, 0)
GUICtrlSetState($nProgressAll, $GUI_SHOW)
GUICtrlSetState($nProgressPing, $GUI_SHOW)
GUICtrlSetState($nButtonExit, $GUI_HIDE)
$iCountRow = 0
$iCountOn = 0
$iCountOff = 0
_SetAutoItIcon($iCountRow, 0xFF0000, 0xFFFF00)
$i_From = Number(GUICtrlRead($nInput_From))
$i_To = Number(GUICtrlRead($nInput_To))
$sStartDate = 'Проверка начата: ' & @MDAY & '.' & @MON & '.' & StringRight(@YEAR, 2) & _
' ' & @HOUR & ':' & @MIN & ':' & @SEC & @CRLF
$sFileOn = @MDAY & '_' & @MON & '_' & StringRight(@YEAR, 2) & '_' & @HOUR & '_' & _
@MIN & '.txt'
$sOnLine = $sStartDate
$sOffLine = $sOnLine
$sFileOff = $sFileOn
TCPStartup()
For $i = $i_From To $i_To
_GUICtrlStatusBar_SetText($hStatus, @TAB & 'Определение имени: ' & $sMask & $i)
$sName = _TCPIpToName($sMask & $i)
If @error Then $sName = 'unknown'
_GUICtrlStatusBar_SetText($hStatus, @TAB & 'Пинг: ' & $sMask & $i)
$iPID = Run(@AutoItExe & ' /AutoIt3ExecuteLine ' & '"' & 'ConsoleWrite(Ping(''' & $sMask & $i & ''', ' & $iPingTime & '))' & '"', '', @SW_HIDE, $STDOUT_CHILD)
$iPing = ''
$iStartPing = TimerInit()
While 1
$iPing &= StdoutRead($iPID)
If @error Then ExitLoop
GUICtrlSetData($nProgressPing, 100 * TimerDiff($iStartPing) / $iPingTime)
Sleep(10)
WEnd
GUICtrlSetData($nProgressPing, 100)
$iPing = Number($iPing)
If $iPing Then
$iCountOn += 1
$sOnLine &= $iCountOn & '. ' & $sMask & $i & '(' & $sName & ')' & @TAB & 'OnLine' & @CRLF
_WinAPI_MessageBeep(5)
GUICtrlCreateListViewItem($sMask & $i & '|' & $sName & '|' & 'On', $nListView)
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlSetBkColor(-1, 0xDCDCDC)
_GUICtrlListView_SetItemImage($hListView, $iCountRow, 0)
Else
$iCountOff += 1
$sOffLine &= $iCountOff & '. ' & $sMask & $i & '(' & $sName & ')' & @TAB & 'OffLine' & @CRLF
_WinAPI_MessageBeep(2)
GUICtrlCreateListViewItem($sMask & $i & '|' & $sName & '|' & 'Off', $nListView)
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetBkColor(-1, 0xEBEBEB)
_GUICtrlListView_SetItemImage($hListView, $iCountRow, 1)
EndIf
_GUICtrlListView_EnsureVisible($hListView, $iCountRow)
$iCountRow += 1
GUICtrlSetData($nProgressAll, 100 * $iCountRow / ($i_To - $i_From + 1))
_SetAutoItIcon($iCountRow, 0xFF0000, 0xFFFF00)
Sleep(250)
Next
Sleep(250)
TCPShutdown()
$fDel = True
_GUICtrlStatusBar_SetText($hStatus, @TAB & @TAB & 'Выберите диапозон IP-адресов')
GUICtrlSetState($nProgressAll, $GUI_HIDE)
GUICtrlSetState($nProgressPing, $GUI_HIDE)
GUICtrlSetState($nButtonExit, $GUI_SHOW)
TraySetIcon()
_WinAPI_MessageBeep(3)
$sEndDate = 'Проверка закончена: ' & @MDAY & '.' & @MON & '.' & StringRight(@YEAR, 2) & _
' ' & @HOUR & ':' & @MIN & ':' & @SEC
If $iCountOn Then
$sOnLine &= $sEndDate
$hFile = FileOpen(@ScriptDir & '\Statistics\OnLine\' & $sFileOn, 10)
FileWrite($hFile, $sOnLine)
FileClose($hFile)
EndIf
If $iCountOff Then
$sOffLine &= $sEndDate
$hFile = FileOpen(@ScriptDir & '\Statistics\OffLine\' & $sFileOff, 10)
FileWrite($hFile, $sOffLine)
FileClose($hFile)
EndIf
_WinAPI_EmptyWorkingSet()
EndSwitch
WEnd
Func _SetAutoItIcon($iCount, $iColor = 0x000000, $iBkColor = 0xFFFFFF)
;Yashied, http://autoit-script.ru/index.php?topic=6030.msg42829#msg42829
Local $hDC, $hBitmap, $hMask, $hIcon, $hFont, $tNID, $tRect
$hDC = _WinAPI_CreateCompatibleDC(0)
$hBitmap = _WinAPI_CreateSolidBitmap(0, $iBkColor, 16, 16)
$hMask = _WinAPI_CreateBitmap(16, 16, 1, 1)
$hFont = _WinAPI_CreateFont(18, 4, 0, 0, $FW_NORMAL, 0, 0, 0, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $ANTIALIASED_QUALITY, $DEFAULT_PITCH, 'Tahoma')
$tRect = _WinAPI_CreateRectEx(1, 0, 15, 16)
_WinAPI_SelectObject($hDC, $hBitmap)
_WinAPI_SelectObject($hDC, $hFont)
_WinAPI_SetTextColor($hDC, _WinAPI_SwitchColor($iColor))
_WinAPI_SetBkColor($hDC, _WinAPI_SwitchColor($iBkColor))
_WinAPI_DrawText($hDC, $iCount, $tRect, BitOR($DT_CENTER, $DT_SINGLELINE, $DT_VCENTER))
_WinAPI_DeleteDC($hDC)
$hIcon = _WinAPI_CreateIconIndirect($hBitmap, $hMask)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_DeleteObject($hMask)
_WinAPI_DeleteObject($hFont)
$tNID = DllStructCreate($tagNOTIFYICONDATA)
DllStructSetData($tNID, 'Size', DllStructGetSize($tNID))
DllStructSetData($tNID, 'hWnd', $hAutoIt)
DllStructSetData($tNID, 'Flags', $NIF_ICON)
DllStructSetData($tNID, 'ID', 1)
DllStructSetData($tNID, 'hIcon', $hIcon)
_WinAPI_ShellNotifyIcon($NIM_MODIFY, $tNID)
If $hPrev Then
_WinAPI_DestroyIcon($hPrev)
EndIf
$hPrev = $hIcon
EndFunc ;==>_SetAutoItIcon