Непроходимые контролы!...
Имеем простое окно 4 табами SysTabControl32, причём все Istance:1 0_O
Задача в том, чтобы нажать хотябы 2-й таб, чтоб переключиться на его таб-"окно" При старте первым открывается это: Код:
103 DIALOG 1, 13, 230, 54 Код:
102 DIALOG 1, 13, 230, 54 Код:
101 DIALOGEX 0, 0, 235, 70 ? |
Цитата:
Цитата:
Нажать на таб (а точнее активировать вкладку таба) можно так: Код:
#include <GuiConstants.au3> |
24th December, 2008 - v3.3.0.0
Added: _GUICtrlTab_ClickTab кочаю новую версию, за ними не угнаться! :) Цитата:
либо просто не видно, как это у taskmgr было? У всех INSTANCE:1 показывает. вообще это окно хакеры делали, от них не знаешь чего ожидать :) ща проверим... |
YeS! Достаточно получить хендл и применить функцию, которой впрочем не было раньше :)
Код:
#include <GuiConstants.au3> |
Я думал, что самое трудное прошёл, не тут то было, ещё хуже окно встретилось!
Посмотрите, может вам напоминает это какойнибудь типичный "класс" окон? В ресурсах этого тулса, вообще диалогов не видно, и соответственно AutoIt Info тоже не видит ничего кроме заголовка окна... Как же в нём кнопки "нащупать", нажать Copy? Я пока через хендл подбираюсь, но не знаюю... Нечто такое _GUICtrlButton_Click только там в хелпе переменных много, фиг разберёшся. :) |
Если все известные методы не справились с задачей, то единственное что осталось, так это кликать в этом окне заранее известные координаты (относительно текущего окна), вот так:
Код:
#include <GuiConstants.au3> |
Ничего не получается :(
Я решил что из вашего примера мне надо взять только этот кусок? - Код:
_ControlClickEx("[Class:NINormalWindow00400000]", "", "Main", 363, 168) Вот моё окно $handle = WinGetHandle("[Class:NINormalWindow00400000]","") Нужен ли его $handle или фунция сама всё найдёт? Кроме запуска RunWait("setup.exe", @ScriptDir) Что ещё надо в моём коде ? Нужен ли WinWaitActive() ? ???? |
Что за таг у этой темы? [решено] - ничего ещё не решено...
В теме taskmgr наоборот, всё уже ясно однако без тэга тема, почему? мне просто здесь оч важно довести до кондиции этот код... Скажите, а вот так имеет ли смысл? RunWait("zzzz.exe", @ScriptDir) WinWaitActive("AkoustikPiano") ; {- это тоже не знаю, надо ли или можно пропустить...} $hWin = WinGetHandle("AkoustikPiano") $hCtrl = ControlGetHandle($hWin, "", "button1") ControlClick("AkoustikPiano", "", $hCtrl) ; Что мне даёт это с хендлом? Или ничего? То-есть я хочу понять зачем нужны хендлы? Или они нужны лишь для подстановки в некоторых функциях, как бы в некоторых особых случаях? Сдругой стороны, тут более важно узнать реальный тип контрола button1 или button2 или это вообще не button - как это узнать когда не знаешь изначально? |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Код:
Run("zzzz.exe", @ScriptDir) Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
весь наборчег команд - это как бы неизменно должно быть от скрипта к скрипту! ОК! Законспектировано! :) ------------- #6 - получается что я просто не могу попасть в кнопки, так как код функции я определил, и ожидание окна и собсно запуск выполнил? получается дело только в особенности этого окошка? Цитата:
или чего-то ещё недоопределенно? все ли переменные в вашем листинге универсальны, чтоб прямо скопировать в мой код? (я приводил примеры выше #6 ) |
Проще, покажу даже как есть
Код:
Run("zzzz.exe", @ScriptDir) |
Цитата:
Цитата:
Цитата:
P.S !!! Я последнее предупреждение даю, куски кода заключайте в тег code, неприятно раскапывать текст среди этой каши. Как использовать тег см. тут. |
Всё дело было в задержке! Даже исходный текст не всегда срабатывает, я не сразу заметил это.
Всё заработало когда я Sleep(100) добавил перед функцией! Моё внешнее окно тоже работает отлично! offtop: Меня ещё очередной раз до этого выручило тупое повторение комманды в одном другом приложении Код:
WinActivate("Product Authorization Wizard") И в одном случае он сразу получал нужное окно, а в случае вызова из другой программы, сразу не получалось и я уже чисто эксперементально решил зделать повторы и сработало! :) Это я к тому что задержки и повторы, это реально проблемма! Я теперь часто sleep везде ставлю. |
Цитата:
Код:
_WinKeepActivate("Product Authorization Wizard", "", 10) ;Ждём 10 секунд появление активного и видимого окна |
HELP!! то работает то нет, не могу понять... там диалог между двумя окнами, я правда в одном из них ресурсы подредактировал, но не может быть что из-за этого, так как окно "видится" как и было, однако код стал криво работать, не пойму что такое... хотя причину я конечто же вижу, дело в том что мне было подсказанно такое -
Код:
$Var1 = ClipGet() Я уже чуть-повыше кодом эксперементировал с клип буффером, но там тоже глюки, то получается то нет... Я даже это вставлял - _ClipBoard_Empty() кое где... Однако без буффера обмена видимо никак! Помогите, код уже почти готов! Последний шаг не срабатывает... Код:
#include <GuiTab.au3> Зато по автоиту сколько узнал нового :) код возможно этот даже правильный... |
Цитата:
Цитата:
Цитата:
|
Да, точно! Вот прикол, я из ресурса удалил строку
CONTROL "", 1002, EDIT, ES_CENTER | ES_AUTOHSCROLL | WS_CHILD | WS_BORDER | WS_TABSTOP, 7, 45, 167, 12 так как её в реальном окне вообще не видно, там всего только один Edit встречается на каждом табе, ну я решил, что это просто забыли поошибке и снёс. Как оказалось видимо это поле используется для копирования... хм. востановил, теперь работает и код в автоит тоже верный! хотя какие-то сбои иногда встречались, или же это проблеммы из-за "некорректной" программы были... однако оптимизировать бы ещё? иногда tab3-й открывался вместо 2-го... Всё ли в моём листинге верно на беглый взгляд там? Я ещё потестирую, посмотрю. хотя я ламер :) |
мдя.. как-то надо уменьшить скорость чтоль в функции
Код:
Func _ControlClickEx($sTitle, $sText="", $sButton="Main", $iCtrl_X_Coord=0, $iCtrl_Y_Coord=0) Мне кажется увеличить время перед вызовом непосредственно тут - Код:
Sleep(100) ; ? ------------------------ Добавил время перемещения, стало лучше немного... Код:
... нельзя ли его оставлять над нажатой кнопкой, что естественнее?... ато прыгает как на пружине, когда задержку я зделал это очевидно стало :) Но видимо сейчас вся трабла именно в табах, то-есть в окне WinActivate(": ~"), блин я бы снёс эти два ненужных таба но их не видно средь ресурсов... только мешаются! Вот второй таб который только и нужен, может его явно можно нажать? Точнее это ресурс который видно при нажатии. Код:
103 DIALOG 1, 13, 180, 38 Код:
101 DIALOGEX 0, 0, 185, 54 |
Цитата:
|
Стало лучше! но один раз промахнулся...
А маус нельзя оставлять в нажатой позиции до следущего действия? Ато он скачет к кнопке и назад в старт позицию, возможно это даже привоидит к лишней нагрузке на работу скрипта. PS вот только прикол заметил! разница в применении _GUICtrlTab_SetCurSel($hTab, 1) в том, что при нажатии 2-таба, остаётся прорисованным первое окно, если это только не моё видео виснет, но не думаю... наверное таковы свойства окна, хотя работает корректно! Только сбой чё-то всёж есть иногда... // впрочем я догадался ; MouseMove($aOld_Mouse_Pos[0], $aOld_Mouse_Pos[1], 3) закоментировать! :) /// "решено" - так как при клике используется позиция, при этом ещё окно из одной прог имееет внутреннее свойство OnTop, то получается что оно иногда перекрывает кнопку заднего окна - в этом было половина моих глюков... добавил WinMove(": ~",0,22,"","",3) Только почему-то окно всегда вообще исчезает, даже если указать его реальные размеры. Наверное тут ещё притягивание на десктопе вмешивается. И у меня ещё таск бар сверху, который многие окна игнорируют и считают от нуля! Но полюбому окно что-то пропадает, но зато работает нормально! :) Причём если зделать искажённые размеры в WinMove - то вообще получается тёмная полоска на экране - чудеса! Этим тоже можно пользоваться вместо например @HIDE - крута! Остались только редкие непопадания в нужный таб... :\ И жаль ещё, что WinWait сначало показывает, а только позже WinMove срабатывает, хотелось бы уж сразу! :) ЗЫ имхо дело в повторах, сразу стало стабильнее! Код:
Run(@ScriptDir & "\Xetup.exe") процессор, и мне даже кажется, что сами приложения работают таким образом только используюя loop наверно, если это конечно в автоит не приводит к искажению кода, то в самый раз юзать репиты! :) |
Время: 19:11. |
Время: 19:11.
© OSzone.net 2001-