|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Непроходимые контролы!... |
|
|
[решено] Непроходимые контролы!...
|
Ветеран Сообщения: 842 |
Профиль | Отправить PM | Цитировать Имеем простое окно 4 табами SysTabControl32, причём все Istance:1 0_O
Задача в том, чтобы нажать хотябы 2-й таб, чтоб переключиться на его таб-"окно" При старте первым открывается это: 103 DIALOG 1, 13, 230, 54 STYLE WS_CHILD CAPTION "" LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL FONT 9, "Arial" { CONTROL "", 1001, EDIT, ES_CENTER | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 7, 15, 216, 12 CONTROL "setup", 2001, BUTTON, BS_PUSHBUTTON | BS_FLAT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 182, 35, 40, 12 CONTROL "", 1002, EDIT, ES_CENTER | ES_AUTOHSCROLL | WS_CHILD | WS_BORDER | WS_TABSTOP, 7, 35, 167, 12 } 102 DIALOG 1, 13, 230, 54 STYLE WS_CHILD CAPTION "" LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL FONT 9, "Arial" { CONTROL "", 1001, EDIT, ES_CENTER | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 7, 15, 216, 12 CONTROL "setup", 2001, BUTTON, BS_PUSHBUTTON | BS_FLAT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 182, 35, 40, 12 } 101 DIALOGEX 0, 0, 235, 70 STYLE DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "" CLASS "XXXZZZCLASS32" LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL FONT 9, "Arial" { CONTROL "Tab1", 1001, "SysTabControl32", TCS_TABS | WS_CHILD | WS_VISIBLE, 0, 0, 235, 70 , 0x00020000 } ? |
|
------- Отправлено: 13:23, 06-02-2009 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата semiono:
Цитата semiono:
Нажать на таб (а точнее активировать вкладку таба) можно так: #include <GuiConstants.au3> #include <GuiTab.au3> $GUI = GUICreate("Test Script", 300, 200) $Tab = GUICtrlCreateTab(20, 40, 260, 120) GUICtrlCreateTabItem("Tab1") GUICtrlCreateTabItem("Tab2") GUICtrlCreateTabItem("Tab3") GUISetState(@SW_SHOW, $GUI) Sleep(500) $hTab = ControlGetHandle("Test Script", "", "SysTabControl321") _GUICtrlTab_ClickTab($hTab, 1) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd |
||
------- Отправлено: 14:34, 06-02-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать 24th December, 2008 - v3.3.0.0
Added: _GUICtrlTab_ClickTab кочаю новую версию, за ними не угнаться! Цитата Creat0R:
либо просто не видно, как это у taskmgr было? У всех INSTANCE:1 показывает. вообще это окно хакеры делали, от них не знаешь чего ожидать ща проверим... |
|
------- Последний раз редактировалось semiono, 07-02-2009 в 01:04. Отправлено: 00:48, 07-02-2009 | #3 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать YeS! Достаточно получить хендл и применить функцию, которой впрочем не было раньше
Хендлы - прямо ассемблер какой-то |
------- Отправлено: 03:58, 07-02-2009 | #4 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Я думал, что самое трудное прошёл, не тут то было, ещё хуже окно встретилось!
Посмотрите, может вам напоминает это какойнибудь типичный "класс" окон? В ресурсах этого тулса, вообще диалогов не видно, и соответственно AutoIt Info тоже не видит ничего кроме заголовка окна... Как же в нём кнопки "нащупать", нажать Copy? Я пока через хендл подбираюсь, но не знаюю... Нечто такое _GUICtrlButton_Click только там в хелпе переменных много, фиг разберёшся. |
|
------- Отправлено: 05:06, 07-02-2009 | #5 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Если все известные методы не справились с задачей, то единственное что осталось, так это кликать в этом окне заранее известные координаты (относительно текущего окна), вот так:
#include <GuiConstants.au3> $GUI = GUICreate("AkoustikPiano", 300, 200) $Button = GUICtrlCreateButton("Copy", 20, 40, 60, 20) GUISetState(@SW_SHOW, $GUI) _ControlClickEx("AkoustikPiano", "", "Main", 50, 50) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $Button MsgBox(64, "", "Button is clicked.", 0, $GUI) EndSwitch WEnd Func _ControlClickEx($sTitle, $sText="", $sButton="Main", $iCtrl_X_Coord=0, $iCtrl_Y_Coord=0) Local $aWin_Pos = WinGetPos($sTitle, $sText) Local $aWin_ClientSize = WinGetClientSize($sTitle, $sText) Local $iBorder_Size = $aWin_Pos[2] - $aWin_ClientSize[0] Local $iCaption_Size = $aWin_Pos[3] - $aWin_ClientSize[1] Local $aOld_Mouse_Pos = MouseGetPos() MouseClick("Main", $aWin_Pos[0]+$iCtrl_X_Coord+$iBorder_Size, $aWin_Pos[1]+$iCtrl_Y_Coord+$iCaption_Size, 1, 0) MouseMove($aOld_Mouse_Pos[0], $aOld_Mouse_Pos[1], 0) EndFunc |
------- Отправлено: 10:06, 07-02-2009 | #6 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Ничего не получается
Я решил что из вашего примера мне надо взять только этот кусок? - _ControlClickEx("[Class:NINormalWindow00400000]", "", "Main", 363, 168) Func _ControlClickEx($sTitle, $sText="", $sButton="Main", $iCtrl_X_Coord=0, $iCtrl_Y_Coord=0) Local $aWin_Pos = WinGetPos($sTitle, $sText) Local $aWin_ClientSize = WinGetClientSize($sTitle, $sText) Local $iBorder_Size = $aWin_Pos[2] - $aWin_ClientSize[0] Local $iCaption_Size = $aWin_Pos[3] - $aWin_ClientSize[1] Local $aOld_Mouse_Pos = MouseGetPos() MouseClick("Main", $aWin_Pos[0]+$iCtrl_X_Coord+$iBorder_Size, $aWin_Pos[1]+$iCtrl_Y_Coord+$iCaption_Size, 1, 0) MouseMove($aOld_Mouse_Pos[0], $aOld_Mouse_Pos[1], 0) EndFunc Вот моё окно $handle = WinGetHandle("[Class:NINormalWindow00400000]","") Нужен ли его $handle или фунция сама всё найдёт? Кроме запуска RunWait("setup.exe", @ScriptDir) Что ещё надо в моём коде ? Нужен ли WinWaitActive() ? ???? |
------- Последний раз редактировалось semiono, 08-02-2009 в 16:38. Отправлено: 16:30, 07-02-2009 | #7 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Что за таг у этой темы? [решено] - ничего ещё не решено...
В теме taskmgr наоборот, всё уже ясно однако без тэга тема, почему? мне просто здесь оч важно довести до кондиции этот код... Скажите, а вот так имеет ли смысл? RunWait("zzzz.exe", @ScriptDir) WinWaitActive("AkoustikPiano") ; {- это тоже не знаю, надо ли или можно пропустить...} $hWin = WinGetHandle("AkoustikPiano") $hCtrl = ControlGetHandle($hWin, "", "button1") ControlClick("AkoustikPiano", "", $hCtrl) ; Что мне даёт это с хендлом? Или ничего? То-есть я хочу понять зачем нужны хендлы? Или они нужны лишь для подстановки в некоторых функциях, как бы в некоторых особых случаях? Сдругой стороны, тут более важно узнать реальный тип контрола button1 или button2 или это вообще не button - как это узнать когда не знаешь изначально? |
------- Отправлено: 17:10, 07-02-2009 | #8 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата semiono:
Цитата semiono:
Цитата semiono:
Цитата semiono:
Цитата semiono:
Run("zzzz.exe", @ScriptDir) WinWait("AkoustikPiano") ;Ожидаем *появление* (существование) окна WinActivate("AkoustikPiano") ;Активируем окно (выводим на фронт) WinWaitActive("AkoustikPiano") ;Это нужно для ожидания *активного* окна $hWin = WinGetHandle("AkoustikPiano") ;Получаем идентификатор окна, это и есть хендл $hCtrl = ControlGetHandle($hWin, "", "button1") ;Получаем идентификатор контрола (элемента GUI) ControlClick($hWin, "", $hCtrl) ;Кликаем в нашем окне по контролю, разницы в принципе нет, что с хендлами, что с прямыми строками имен элементов Цитата semiono:
Цитата semiono:
|
|||||||
------- Отправлено: 23:40, 07-02-2009 | #9 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
Цитата Creat0R:
Цитата Creat0R:
весь наборчег команд - это как бы неизменно должно быть от скрипта к скрипту! ОК! Законспектировано! ------------- #6 - получается что я просто не могу попасть в кнопки, так как код функции я определил, и ожидание окна и собсно запуск выполнил? получается дело только в особенности этого окошка? Цитата Creat0R:
или чего-то ещё недоопределенно? все ли переменные в вашем листинге универсальны, чтоб прямо скопировать в мой код? (я приводил примеры выше #6 ) |
||||
------- Последний раз редактировалось semiono, 08-02-2009 в 16:38. Отправлено: 16:14, 08-02-2009 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интерфейс - Контролы, чекбоксы, прокрутка, кнопки пропали, или стали плоскими | mnugamba | Microsoft Windows 2000/XP | 1 | 11-11-2009 15:56 | |
Под Win2000 не работают контролы | IZOprogman | Microsoft Windows NT/2000/2003 | 3 | 19-01-2007 02:42 |
|