Снова всем привет.. Вот моё маленькое детище, задача которого поиск заданного слова в информации WhoIs по заданному диапазону ip адресов.
Но вот незадача.. постоянный вызов командной строки для операции Whois заставляет постоянно переключаться с главного окна на консоль и с консоли на главное окно обратно, что приводит к мерцанию главного окна и невозможности поставить скрипт на выполнение и работать в другой программе. Помогите мне справиться с этим недугом, друзья, с меня плюсы
PS: для того чтобы выполнялась сторонняя команда Whosip нужно файлик http://www.nirsoft.net/utils/whosip.zip закинуть в папку system32.
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiIPAddress.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GuiRichEdit.au3>
#Include <Encoding.au3>
#Region ### START Koda GUI section ### Form=
$MainForm = GUICreate("Word in WhoIs", 395, 340, 340, 147)
$Group1 = GUICtrlCreateGroup("", 8, 8, 377, 321)
$Label1 = GUICtrlCreateLabel("Введите границы диапазона IP-адресов", 16, 24, 206, 17)
$IPMin = _GUICtrlIpAddress_Create($MainForm, 16, 48, 154, 21)
_GUICtrlIpAddress_Set($IPMin, "0.0.0.0")
$IPMax = _GUICtrlIpAddress_Create($MainForm, 224, 48, 154, 21)
_GUICtrlIpAddress_Set($IPMax, "0.0.0.0")
$Label2 = GUICtrlCreateLabel("<->", 191, 48, 19, 17)
$Label3 = GUICtrlCreateLabel("Введите слово, которое будем искать", 16, 80, 198, 17)
$InputWord = GUICtrlCreateInput("Слово", 16, 104, 281, 21)
$ButtonFind = GUICtrlCreateButton("Искать!", 304, 104, 75, 25, $WS_GROUP)
$ProgressFind = GUICtrlCreateProgress(18, 168, 358, 17)
$Label4 = GUICtrlCreateLabel("Информация о поиске", 136, 136, 118, 17)
$InfoFind = _GUICtrlRichEdit_Create($MainForm ,"", 16, 200, 361, 113, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL,$ES_READONLY))
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $gWord, $dif, $ipMass
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $ButtonFind
$hWord = GUICtrlRead($InputWord)
$ipMass=int2mass()
_read_cmd()
EndSwitch
WEnd
Func int2mass()
_GUICtrlRichEdit_AppendText($InfoFind, 'Создание списка ip адресов...'&@CR)
$start = _GUICtrlIpAddress_Get($IPMin)
$end = _GUICtrlIpAddress_Get($IPMax)
$long_start=ip2int($start)
$long_end=ip2int($end)
$dif=$long_end-$long_start
Dim $ipMass[$dif+1]
$percent = 100/$dif
For $i = 0 To $dif
$ipMass[$i]=int2ip($long_start+$i)
GUICtrlSetData($ProgressFind, $percent*$i)
Next
_GUICtrlRichEdit_SetCharAttributes($InfoFind, "+bo")
_GUICtrlRichEdit_AppendText($InfoFind, 'Список из '&$dif&' адресов создан!'&@CR)
return $ipMass
EndFunc
Func ip2int($realIp)
Local $ipoct = StringSplit($realIp,'.',2)
Local $oct1 = $ipoct[0]
Local $oct2 = $ipoct[1]
Local $oct3 = $ipoct[2]
Local $oct4 = $ipoct[3]
Return $oct1*16777216+$oct2*65536+$oct3*256+$oct4
EndFunc
Func int2ip($intIp)
Local $oct1n = Int($intIp/16777216)
Local $oct2n = Int(($intIp-$oct1n*16777216)/65536)
Local $oct3n = Int(($intIp-$oct1n*16777216-$oct2n*65536)/256)
Local $oct4n = Int($intIp-$oct1n*16777216-$oct2n*65536-$oct3n*256)
Return $oct1n & '.' & $oct2n & '.' & $oct3n & '.' & $oct4n
EndFunc
Func _read_cmd()
$percent = 100/$dif
GUICtrlSetData($ProgressFind, 0)
_GUICtrlRichEdit_AppendText($InfoFind, 'Поиск слова '&$hWord&' в информации об ip адресах...'&@CR)
$command = "whosip -r "
$sBuffer = ''
For $i = 0 To $dif
$iPID = Run(StringReplace($command&$ipMass[$i], '"', '""'), @ScriptDir, $GUI_NOFOCUS, 2)
;WinWaitActive('cmd.exe', '', 1)
If Not $iPID Then Exit -33
While 1
$sBuffer = StdoutRead($iPID)
If @error Then
ExitLoop
EndIf
If $sBuffer Then
_GUICtrlRichEdit_AppendText($InfoFind, $ipMass[$i])
if StringRegExp($sBuffer, '\W'&$hWord&'\W') then
_GUICtrlRichEdit_SetCharAttributes($InfoFind, "+bo")
_GUICtrlRichEdit_AppendText($InfoFind,' -- YES'&@CR)
else
_GUICtrlRichEdit_AppendText($InfoFind,' -- NO'&@CR)
Endif
GUICtrlSetData($ProgressFind, $percent*$i)
EndIf
WEnd
ProcessClose($iPid)
Next
EndFunc
Но вот незадача.. постоянный вызов командной строки для операции Whois заставляет постоянно переключаться с главного окна на консоль и с консоли на главное окно обратно, что приводит к мерцанию главного окна и невозможности поставить скрипт на выполнение и работать в другой программе. Помогите мне справиться с этим недугом, друзья, с меня плюсы
PS: для того чтобы выполнялась сторонняя команда Whosip нужно файлик http://www.nirsoft.net/utils/whosip.zip закинуть в папку system32.