Window Identifier
#1
Отправлено 14 февраля 2007 - 06:45
#2
Отправлено 14 февраля 2007 - 08:31
Browser.BrowserChild("#1").GetID()
#3
Отправлено 14 февраля 2007 - 09:04
Class - MainWin
Identifier - MAILRUпочтановостирабо
Вот именно "MAILRUпочтановостирабо" меня и интересует
Спасибо
#4
Отправлено 14 февраля 2007 - 10:40
Также есть GenerateDecl ( ) метод, который извлекает список строк, содержащий декларацию окна, для которого этот метод был вызван. Буквально в первых строках будет записан именно идентификатор.
ЗЫ: Честно говоря, не понимаю, зачем такие извраты.
#5
Отправлено 14 февраля 2007 - 10:58
(условно)
br=Browser.GetId() //Присвоить переменной Identifier окна
br.Button.Click() //чтобы потом иметь возможность к нему обращаться
#6
Отправлено 14 февраля 2007 - 11:01
#7
Отправлено 14 февраля 2007 - 11:28
STRING sTag = Browser.GetTag() // Извлекаем тэг
WINDOW wMain = MainWin( sTag ) // Вот тут получаем активное в данный момент окно браузера
wMain.SetActive() // Обращаемся к тому же окну
Вот примерно так. То есть нам нужен не идентификатор фактически, а тэг. Окно обозвать можно по-всякому ( хоть матюки вписывайте ), а тэг именно идентифицирует окно.
#8
Отправлено 15 февраля 2007 - 14:07
это у вас так настроено распознавание окон. Ото что там написано вернет .GetCaption () у главного окна, только нужно будет немного порихтовать :)Если сделать таким образом как Вы предлагаете, то строка Print(Browser.BrowserChild("#1").GetID()) выдаст URL страницы, а меня интересует именно Identifier. Если взять Record-WindowDeclarations - и кликнуть на шапку Explorerа , то выдается следующая информация:
Class - MainWin
Identifier - MAILRUпочтановостирабо
Вот именно "MAILRUпочтановостирабо" меня и интересует
Спасибо
Еще это вернет .WndTag у данного окна.
я тут еще подумал - мне не совсем понятен вопрос - т.е. Вы хотите по тому, что у Вас есть в окне браузера определять - какое это окно из тех, которые объявлены в фрейме ?
(это я судя по посту
)Нужно сделать следующее:
(условно)
br=Browser.GetId() //Присвоить переменной Identifier окна
br.Button.Click() //чтобы потом иметь возможность к нему обращаться
или как ?
Если да, то это довольно оригинальная задачка, которая имеет несколько решений ;)
#9
Отправлено 15 февраля 2007 - 14:13
А может это просто определение по содержимому, к какому окну надо будет обращаться ( ну или попытка сделать это ), ну как и было озвучено. В этом случае все-таки лучше четко фиксировать открытое окно. Меьнше извратом при аналогичном результате
#10
Отправлено 15 февраля 2007 - 14:25
MainWin(StrTran (Explorer.WndTag, "1", "2")).SetActive ()
если оно второе по счету, если N-ное - то вместо 2 вставьте свое число ;)
#11
Отправлено 15 февраля 2007 - 14:32
Во-первых, можно тестировать Эксплорер, то это сработает, а вот если еще поддерживать, например, FireFox, Netscape , то Explorer применять бессмысленно. Более того, мы наверняка можем и не знать, каким по счету окажется нужное нам окно. Но если мы предварительно можем получить его тэг, то главное, чтобы выше по иерархии не было такого же окна или с таким же тэгом ( чего можно добиться без особых трудностей) . То есть в общем случае номер окна неопределен.
Кстати, вот этот код
MainWin(StrTran (Explorer.WndTag, "1", "2")).SetActive ()
и вот этот
Browser2.SetActive() идентичны
#12
Отправлено 15 февраля 2007 - 15:33
зато Browser3 уже нет, а в верхней конструкции вместо 2 легко указать нужный ;)
#13
Отправлено 15 февраля 2007 - 15:37
#14
Отправлено 15 февраля 2007 - 15:47
#15
Отправлено 15 февраля 2007 - 15:52
Нужно сделать следующее:
(условно)
br=Browser.GetId() //Присвоить переменной Identifier окна
br.Button.Click() //чтобы потом иметь возможность к нему обращаться
То есть нужно как-то зафиксировать окно, которое активно на данный момент, чтобы потом с ним можно было работать и судя по всему не зависимо от того, будет ли в нужный момент это окно браузера активным или нет. Если это нужно для Browser-а, то это именно так.
#16
Отправлено 15 февраля 2007 - 16:27
я тут еще подумал - мне не совсем понятен вопрос - т.е. Вы хотите по тому, что у Вас есть в окне браузера определять - какое это окно из тех, которые объявлены в фрейме
У меня n окон. Пока я задачу решаю следующим образом: объявляю во фрейме все окна, чтоб потом можно было с ними оперировать. Когда решу текущую задачу - буду искать способ избежать и этого "в лоб" метода
это просто определение по содержимому, к какому окну надо будет обращаться ( ну или попытка сделать это )
Именно так. Я загружаю страницу - и выковыриваю ее Identifier (то есть то, как оно объявлено во фрейме, чтобы мочь к нему обращаться). По моему мнению, тут наиболее подходит GenerateDecl ( ) (предложил KaNoN) - и потом из этого масива брать первый элемент. Я правда еще не успел опробовать :(
#17
Отправлено 15 февраля 2007 - 16:49
ИМХО гораздо прямее сделать
[ ] LIST OF WINDOW lw = FindWindow ("/[MainWin]*/[BrowserChild]*") [ ] INTEGER i [ ] WINDOW wActiveWin = NULL [ ] [-] for i = 1 to ListCount (lw) [-] if lw[i] != BrowserPage && lw[i].Exists () && lw[i].IsActive () [ ] wActiveWin = lw[i] [ ] break [ ] [ ] Print (wActiveWin)если wActiveWin не равно NULL - значит там будет это окно
--
upd: исправил очепятку
#18
Отправлено 15 февраля 2007 - 16:56
#19
Отправлено 15 февраля 2007 - 17:00
У меня n окон. Пока я задачу решаю следующим образом: объявляю во фрейме все окна, чтоб потом можно было с ними оперировать. Когда решу текущую задачу - буду искать способ избежать и этого "в лоб" метода
Кстати, а что это за окна и что они содержат? Если это окно результатов поиска или какие-то другие окна, имеющие одинаковую структуру, то можно попытаться-таки их как-то обобщить без извратов
#20
Отправлено 16 февраля 2007 - 10:43
[ ] LIST OF WINDOW lw = FindWindow ("/[MainWin]*/[BrowserChild]*") [ ] INTEGER i [ ] WINDOW wActiveWin = NULL [ ] [-] for i = 1 to ListCount (lw) [-] if lw[i] != BrowserPage && lw[i].Exists () && lw[i].IsActive () [ ] wActiveWin = lw[i] [ ] break [ ] [ ] Print (wActiveWin)
Print (wActiveWin) - не выдает результата, хотя и ошибок никаких не выдает, пробую дальше...
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных