Что нового

Проблема с функцией _IENavigate

JIereHga2010

Новичок
Сообщения
68
Репутация
0
Всем Доброго времени суток :IL_AutoIt_1: :IL_AutoIt_1: :IL_AutoIt_1:
Ув. Форумчане, пишу небольшую программку, для работы с группой ВК.
Но столкнулся с проблемой:
Скрипт создает окно IE скрытое, и работает с ним, тут все ок.
Но в GUI я сделал еще несколько кнопок, нажав на любую из них, создается еще 1 окно IE (видимое).
И тут скрипт, вместо того, что бы продолжать работать со скрытым окном, перехватывает второе, и работает уже с ним.
В общем это нужно видеть.
Исходник прикладываю.
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <Array.au3>
#include <File.au3>
#RequireAdmin
#include <MsgBoxConstants.au3>
$Ini = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\BrowserEmulation\ClearableListData", "UserFilter")
If Not $Ini = "0x411F00005308ADBA010000002A00000001000000010000000C00000042CC12940112D00101000000060076006B002E0063006F006D00" Then $Ini = RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\BrowserEmulation\ClearableListData", "UserFilter", "REG_BINARY", "0x411F00005308ADBA010000002A00000001000000010000000C00000042CC12940112D00101000000060076006B002E0063006F006D00")
Global $Red = "0xFF0000", $Green  = "0x00FF00", $Blue = "0x00FFFF", $Yellow = "0xFFFF00", $LastRecords[10][5], $Autor_Name[10]
#Region ### START Koda GUI section ### Form=
$Form_VKControl = GUICreate("ВК контроль группы", 319, 531, 197, 82)
GUISetBkColor(0x008080)
$Group1 = GUICtrlCreateGroup("Название группы:", 8, 8, 300, 49)
$GroupName = GUICtrlCreateButton("Группа", 16, 24, 283, 25)
GUICtrlSetBkColor(-1, $Blue)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Последние писатели", 8, 64, 300, 308)
$Autor_Name[1] = GUICtrlCreateButton("Запись 1", 16, 80, 283, 25)
GUICtrlSetBkColor(-1, $Blue)
GUICtrlSetState(-1, $GUI_DISABLE)
$Autor_Name[2] = GUICtrlCreateButton("Запись 2", 16, 112, 283, 25)
GUICtrlSetBkColor(-1, $Blue)
GUICtrlSetState(-1, $GUI_DISABLE)
$Autor_Name[3] = GUICtrlCreateButton("Запись 3", 16, 144, 283, 25)
GUICtrlSetBkColor(-1, $Blue)
GUICtrlSetState(-1, $GUI_DISABLE)
$Autor_Name[4] = GUICtrlCreateButton("Запись 4", 16, 176, 283, 25)
GUICtrlSetBkColor(-1, $Blue)
GUICtrlSetState(-1, $GUI_DISABLE)
$Autor_Name[5] = GUICtrlCreateButton("Запись 5", 16, 208, 283, 25)
GUICtrlSetBkColor(-1, $Blue)
GUICtrlSetState(-1, $GUI_DISABLE)
$Autor_Name[6] = GUICtrlCreateButton("Запись 6", 16, 240, 283, 25)
GUICtrlSetBkColor(-1, $Blue)
GUICtrlSetState(-1, $GUI_DISABLE)
$Autor_Name[7] = GUICtrlCreateButton("Запись 7", 16, 272, 283, 25)
GUICtrlSetBkColor(-1, $Blue)
GUICtrlSetState(-1, $GUI_DISABLE)
$Autor_Name[8] = GUICtrlCreateButton("Запись 8", 16, 304, 283, 25)
GUICtrlSetBkColor(-1, $Blue)
GUICtrlSetState(-1, $GUI_DISABLE)
$Autor_Name[9] = GUICtrlCreateButton("Запись 9", 16, 336, 283, 25)
GUICtrlSetBkColor(-1, $Blue)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup("Настройки", 8, 376, 300, 145)
$Button_Start = GUICtrlCreateButton("Старт", 16, 488, 75, 25)
$Button_Pause = GUICtrlCreateButton("Пауза", 96, 488, 75, 25)
GUICtrlSetState(-1, $GUI_DISABLE)
$GroupURL = GUICtrlCreateInput("www.vk.com/club****************************", 16, 392, 281, 21)
$Set_Timer = GUICtrlCreateInput("60", 176, 416, 121, 21)
$Label1 = GUICtrlCreateLabel("Автообновление в сек.:", 16, 419, 156, 17, $SS_CENTER, $WS_EX_CLIENTEDGE)
$Del_control = GUICtrlCreateCheckbox("Удалять чужие сообщения со стены группы", 17, 440, 279, 25)
GUICtrlSetState(-1, $GUI_CHECKED)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###



While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
	  Case $GUI_EVENT_CLOSE
		 Exitt()
		 Exit
	  Case $Button_Start
		 AdlibRegister('Pause', 50)
		 Do
			Global $oIE = IECreate (GUICtrlRead ($GroupURL), 0)
		 Until IsObj ($oIE)
		 GUICtrlSetData ( $GroupName, getNameGroup ())
		 GUICtrlSetState($GroupName, $GUI_ENABLE)
		 While 1
			getLastRecords ()
			For $i = 1 To 9
			   GUICtrlSetState($Autor_Name[$i], $GUI_ENABLE)
			   GUICtrlSetData ( $Autor_Name[$i], $LastRecords[$i][1] )
			   GUICtrlSetBkColor($Autor_Name[$i], getSearchMember ($i))
			Next
			SpamDel()
			Sleep (GUICtrlRead ($Set_Timer)*1000)
		 WEnd
	EndSwitch
 WEnd


Func Pause ()
   $nMsg = GUIGetMsg()
   Switch $nMsg
	  Case $GUI_EVENT_CLOSE
		 Exitt()
		 Exit
	  Case $GroupName
		 IECreate (GUICtrlRead ($GroupURL), 1)
	  Case $Autor_Name[1]
		 IECreate ('www.vk.com/'&$LastRecords[1][2], 1)
	  Case $Autor_Name[2]
		 IECreate ('www.vk.com/'&$LastRecords[2][2], 1)
	  Case $Autor_Name[3]
		 IECreate ('www.vk.com/'&$LastRecords[3][2], 1)
	  Case $Autor_Name[4]
		 IECreate ('www.vk.com/'&$LastRecords[4][2], 1)
	  Case $Autor_Name[5]
		 IECreate ('www.vk.com/'&$LastRecords[5][2], 1)
	  Case $Autor_Name[6]
		 IECreate ('www.vk.com/'&$LastRecords[6][2], 1)
	  Case $Autor_Name[7]
		 IECreate ('www.vk.com/'&$LastRecords[7][2], 1)
	  Case $Autor_Name[8]
		 IECreate ('www.vk.com/'&$LastRecords[8][2], 1)
	  Case $Autor_Name[9]
		 IECreate ('www.vk.com/'&$LastRecords[9][2], 1)
	  Case $Button_Pause
   EndSwitch
EndFunc
Func getLastRecords ()
   getPostDel ()
   $oDivs = _IETagNameGetCollection ( $oIE, 'a')
   $i = 0
   For $oDiv in $oDivs
	  If $oDiv.ClassName == 'author' Then
		 $i = $i + 1
		 $LastRecords[$i][1] = _IEPropertyGet( $oDiv, "innertext")
		 $LastRecords[$i][2] = $oDIV.getAttributeNode('href').nodeValue
		 If $i = 9 Then Return
	  EndIf
   Next
EndFunc
Func getPostDel ()
   $i = 0
   $oDivs = _IETagNameGetCollection ( $oIE, 'div')
   For $oDiv in $oDivs
   If $oDiv.ClassName == 'post_delete_button fl_r' Then
		 $i = $i + 1
		 $LastRecords[$i][3] = $oDIV.getAttributeNode('onclick').nodeValue
		 If $i = 9 Then Return
	  EndIf
   Next
EndFunc
Func getSearchMember ($i)
   $LastRecords[$i][4] = True
   _IENavigate ($oIE, GUICtrlRead ($GroupURL)&'?act=users')
   $oSerch = _IEGetObjById ($oIE, 'gedit_users_search_inp')
   _IEFormElementSetValue($oSerch, $LastRecords[$i][1])
   $oIE.document.parentWindow.execScript("GroupsEdit.uSearch()")
   Sleep (1000)
   $Divs = _IETagNameGetCollection ($oIE, 'a')
   For $Div in $Divs
	  If $DIV.getAttributeNode('href').nodeValue == $LastRecords[$i][2] Then
		 Return $Green
	  EndIf
   Next
   $LastRecords[$i][4] = False
   Return $Yellow
EndFunc
Func getNameGroup ()
 $Divs = _IETagNameGetCollection ($oIE, 'div')
   For $Div in $Divs
	  If $Div.className == 'top_header page_name' Then
		 $Name = _IEPropertyGet($Div, "innertext")
		 Return $Name
	  EndIf
   Next
EndFunc
Func SpamDel()
   _IENavigate ($oIE, GUICtrlRead ($GroupURL))
   If GUICtrlRead ($Del_control) = 1 Then
	  For $i = 1 To 9
		 If $LastRecords[$i][4] = False Then
			MsgBox (0, '', '')
			$oIE.document.parentWindow.execScript($LastRecords[$i][3])
			_IEAction ($oIE, 'refresh')
			Sleep (500)
		 EndIf
	  Next
   EndIf
EndFunc


Func Exitt() ; ВЫХОД
	$PIDs = ProcessList('iexplore.exe') ;Возвращает двумерный массив, содержащий список выполняемых процессов (имя и PID).
	For $i = 1 To $PIDs[0][0] ;$PIDs[0][0] - это количество процессов
		If ProcessExists($PIDs[$i][1]) Then ProcessClose($PIDs[$i][1]) ;Если процесс существует, то закрываем его
	Next
EndFunc   ;==>Exitt
Func _ConsoleWrite ($Data)
ConsoleWrite ((@MIN&":"&@SEC&" | "&$Data&@CRLF))
EndFunc
Func IECreate($_sURL, $f_visible) ;СОЗДАТЬ ОКНО $_sURL $f_visible
	If $f_visible = 0 Then
		RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main', 'Display Inline Images', 'REG_SZ', 'no')
		RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main', 'Play_Animations', 'REG_SZ', 'no')
		RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main', 'Display Inline Videos', 'REG_SZ', 'no')
		RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main', 'Play_Background_Sounds', 'REG_SZ', 'no')
		$oIE = _IECreate($_sURL, 0, $f_visible, 1, 1)
	Else
		RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main', 'Display Inline Images', 'REG_SZ', 'yes')
		RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main', 'Play_Animations', 'REG_SZ', 'yes')
		RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main', 'Display Inline Videos', 'REG_SZ', 'yes')
		RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main', 'Play_Background_Sounds', 'REG_SZ', 'yes')
		$oIE = _IECreate($_sURL, 0, $f_visible, 1, 1)
	EndIf
	Return $oIE
EndFunc   ;==>IECreate

:stars: :stars: :stars: :stars: :stars:
Хочу обратить Ваше внимание на следующие функции:
Код:
Do
			Global $oIE = IECreate (GUICtrlRead ($GroupURL), 0) ;<--- вот тут создаю окно IE в скрытом режиме
		 Until IsObj ($oIE)

Код:
Case $GUI_EVENT_CLOSE
		 Exitt()
		 Exit
	  Case $GroupName
		 IECreate (GUICtrlRead ($GroupURL), 1)
	  Case $Autor_Name[1] ; <----- сдесь при нажатии на кнопку, создается новое окно, $oIE не присваиваю, т.к. работать с этим окном не нужно
		 IECreate ('www.vk.com/'&$LastRecords[1][2], 1)
	  Case $Autor_Name[2] ; <----- сдесь при нажатии на кнопку, создается новое окно, $oIE не присваиваю, т.к. работать с этим окном не нужно
		 IECreate ('www.vk.com/'&$LastRecords[2][2], 1)
	  Case $Autor_Name[3] ; <----- сдесь при нажатии на кнопку, создается новое окно, $oIE не присваиваю, т.к. работать с этим окном не нужно
		 IECreate ('www.vk.com/'&$LastRecords[3][2], 1)
	  Case $Autor_Name[4] ; <----- сдесь при нажатии на кнопку, создается новое окно, $oIE не присваиваю, т.к. работать с этим окном не нужно
		 IECreate ('www.vk.com/'&$LastRecords[4][2], 1)
	  Case $Autor_Name[5]
		 IECreate ('www.vk.com/'&$LastRecords[5][2], 1)
	  Case $Autor_Name[6]
		 IECreate ('www.vk.com/'&$LastRecords[6][2], 1)
	  Case $Autor_Name[7]
		 IECreate ('www.vk.com/'&$LastRecords[7][2], 1)
	  Case $Autor_Name[8]
		 IECreate ('www.vk.com/'&$LastRecords[8][2], 1)
	  Case $Autor_Name[9]
		 IECreate ('www.vk.com/'&$LastRecords[9][2], 1)
	  Case $Button_Pause


А вот функция, с помощью которой выполняется навигация по скрытому окну:
Код:
Func getSearchMember ($i)
   $LastRecords[$i][4] = True
   _IENavigate ($oIE, GUICtrlRead ($GroupURL)&'?act=users') ; <---- Вот тут!!!
   $oSerch = _IEGetObjById ($oIE, 'gedit_users_search_inp')
   _IEFormElementSetValue($oSerch, $LastRecords[$i][1])
   $oIE.document.parentWindow.execScript("GroupsEdit.uSearch()")
   Sleep (1000)
   $Divs = _IETagNameGetCollection ($oIE, 'a')
   For $Div in $Divs
	  If $DIV.getAttributeNode('href').nodeValue == $LastRecords[$i][2] Then
		 Return $Green
	  EndIf
   Next
   $LastRecords[$i][4] = False
   Return $Yellow
EndFunc


И именно она перехватывает управление нового видимого окна.
Помогите пожалуйста разобраться, почему так происходит?? В мануале ничего не нашел подобного.
 
Автор
J

JIereHga2010

Новичок
Сообщения
68
Репутация
0
Извените, тему прошу считать закрытой. Нашел свою ошибку.
Проблема в:
Код:
Func IECreate($_sURL, $f_visible) ;СОЗДАТЬ ОКНО $_sURL $f_visible
	If $f_visible = 0 Then
		RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main', 'Display Inline Images', 'REG_SZ', 'no')
		RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main', 'Play_Animations', 'REG_SZ', 'no')
		RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main', 'Display Inline Videos', 'REG_SZ', 'no')
		RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main', 'Play_Background_Sounds', 'REG_SZ', 'no')
		$oIE = _IECreate($_sURL, 0, $f_visible, 1, 1)
	Else
		RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main', 'Display Inline Images', 'REG_SZ', 'yes')
		RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main', 'Play_Animations', 'REG_SZ', 'yes')
		RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main', 'Display Inline Videos', 'REG_SZ', 'yes')
		RegWrite('HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main', 'Play_Background_Sounds', 'REG_SZ', 'yes')
		$oIE = _IECreate($_sURL, 0, $f_visible, 1, 1)
	EndIf
	Return $oIE
EndFunc   ;==>IECreate

Тут присваивается $oIE.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
207
А зачем использовать IECreate для страницы с которой не собираешься работать? ShellExecute решит твою проблему.
 
Автор
J

JIereHga2010

Новичок
Сообщения
68
Репутация
0
Так мне ж необходимо что б переход на нужную страницу сразу был. А не просто запуск IE
 
Верх