|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Перебор контролов |
|
Перебор контролов
|
Новый участник Сообщения: 18 |
Профиль | Отправить PM | Цитировать Как можно перебрать все контролы в родительском окне и определить для них все данные? (Как в Window Info)
И еще, что для контролов будет неизменным (конкретно -поле для ввода) при каждом запуске приложения? ID и Handle - меняется |
|
Отправлено: 09:14, 03-09-2009 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата w3d1:
#Include <WinAPI.au3> #Include <Array.au3> $arr = _WinAPI_EnumWindowsEx(WinGetHandle("")) _ArrayDisplay($arr) Func _WinAPI_EnumWindowsEx($hWin, $fVisible = False) If Not(IsHWnd($hWin)) Then Return SetError(1) _WinAPI_EnumWindowsInit() _WinAPI_EnumWindowsChild($hWin, $fVisible) Local $aOUT[UBound($winapi_gaWinList)][4] = [["HWnd", "Class", "Control ID", "Control Text"]] For $i=1 To $winapi_gaWinList[0][0] $aOUT[$i][0] = $winapi_gaWinList[$i][0] $aOUT[$i][1] = $winapi_gaWinList[$i][1] $aOUT[$i][2] = Number(_WinAPI_GetDlgCtrlID($aOUT[$i][0])) $aOUT[$i][3] = ControlGetText($hWin,"","[ID:"& $aOUT[$i][2] &"]") Next Return $aOUT EndFunc ;==>_WinAPI_EnumWindowsEx |
|
Отправлено: 12:00, 03-09-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 18
|
Профиль | Отправить PM | Цитировать А можно определить для контрола "Instance", "ClassnameNN", "Advanced (Class)", "Position", "Size", "Style", "ExStyle"?
В справке порылся, но что-то не нашел. И еще - как отследить клик мыши на контроле? К чему это все я - такая задача: надо из текстовых полей одного приложения перебросить текст в текстовые поля другого приложения. соответственно как-то нужно установить соответствие этих полей. одно приложение (откуда) можно корректировать (дописать что надо или еще что), второе (куда) - может быть вообще любым, главное чтобы было установлено соответствие полей исходных и приемных. перебрасывать текст получается (но пока только если руками задаю контролы), а по идее юзер сам должен установить что и куда перекидывать. |
Последний раз редактировалось w3d1, 03-09-2009 в 13:02. Отправлено: 12:47, 03-09-2009 | #3 |
Новый участник Сообщения: 18
|
Профиль | Отправить PM | Цитировать Позицию и размер нашел - ControlGetPos
"Instance", "ClassnameNN", "Advanced (Class)" найти не могу никак |
Последний раз редактировалось w3d1, 03-09-2009 в 13:55. Отправлено: 13:18, 03-09-2009 | #4 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата w3d1:
- "Classname" возвращает _WinAPI_EnumWindowsEx() - индекс [$i][1]; - "Instance" - виртуальный атрибут, который получается по следующему алгоритму (ИМХО): все контролы одного класса индексируются по ID, порядковый номер и будет "Instance" |
||
Отправлено: 14:58, 03-09-2009 | #5 |
Новый участник Сообщения: 18
|
Профиль | Отправить PM | Цитировать Вот есть у меня на форме несколько текстовых полей
>>>> Control <<<< Class: TEdit Instance: 5 ClassnameNN: TEdit5 Advanced (Class): [CLASS:TEdit; INSTANCE:5] ID: 723018 Text: Position: 108, 144 Size: 321, 21 ControlClick Coords: 219, 5 Style: 0x540100C0 ExStyle: 0x00000200 Handle: 0x000B084A >>>> Control <<<< Class: TEdit Instance: 6 ClassnameNN: TEdit6 Advanced (Class): [CLASS:TEdit; INSTANCE:6] ID: 1706264 Text: 12345678 Position: 320, 116 Size: 109, 21 ControlClick Coords: 32, 16 Style: 0x540100C0 ExStyle: 0x00000200 Handle: 0x001A0918 ну и т.д. Instance при перезапуске одинаковый, в отличие от Handle и ID Вот как выдернуть из контрола Instance ? AWI же как-то определяет его. |
Отправлено: 15:05, 03-09-2009 | #6 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата w3d1:
|
|
------- Отправлено: 01:02, 04-09-2009 | #7 |
Новый участник Сообщения: 18
|
Профиль | Отправить PM | Цитировать Creat0R,
Спасибо! Буду изучать. |
Отправлено: 06:58, 04-09-2009 | #8 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата w3d1:
#include <WINAPI.au3> #include <array.au3> _EnumWindowsChildClass(WinGetHandle(""), "Scintilla") _ArrayDisplay($a_EnumWindows) Func _EnumWindowsChildClass($hWnd, $sClassName = "") Global $a_EnumWindows[1][5] = [["Class","NN","hWnd","ID","Text"]] Local $hCallBack = DLLCallbackRegister("__EnumWindowsChildClassProc", "int", "hwnd;lparam") Local $tClassName = DllStructCreate("hwnd hWndMain;char ClassName[255]") Local $pClassName = DllStructGetPtr ($tClassName) Local $pCallBack = DllCallbackGetPtr($hCallBack) DllStructSetData($tClassName, "hWndMain", $hWnd) DllStructSetData($tClassName, "ClassName", $sClassName) DllCall("user32.dll", "int", "EnumChildWindows", "hwnd", $hWnd, "ptr", $pCallBack, "lparam", $pClassName) DllCallbackFree($hCallBack) EndFunc Func __EnumWindowsChildClassProc($hWnd, $lParam) Local $tClassName = DllStructCreate("hwnd hWndMain;char ClassName[255]", $lParam) Local $sClassName = DllStructGetData($tClassName, "ClassName") Local $hWndMain = DllStructGetData($tClassName, "hWndMain") Local $iUB = UBound($a_EnumWindows, 1), $iNN = 1 If _WinAPI_IsClassName($hWnd, $sClassName) Then ReDim $a_EnumWindows[$iUB+1][5] $a_EnumWindows[$iUB][0] = _WinAPI_GetClassName($hWnd) If $iUB>1 And $a_EnumWindows[$iUB][0]=$a_EnumWindows[$iUB-1][0] Then $iNN=$a_EnumWindows[$iUB-1][1]+1 $a_EnumWindows[$iUB][1] = $iNN $a_EnumWindows[$iUB][2] = $hWnd $a_EnumWindows[$iUB][3] = Number(_WinAPI_GetDlgCtrlID($hWnd)) $a_EnumWindows[$iUB][4] = ControlGetText($hWndMain,"","[ID:"& $a_EnumWindows[$iNN][3] &"]") EndIf Return 1 EndFunc |
|
Отправлено: 12:35, 04-09-2009 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Перебор пользователей с рабочей станции. И их блокировка. | fat_cat | Microsoft Windows NT/2000/2003 | 5 | 19-03-2009 01:51 | |
Перебор в твиках! | lmn | Автоматическая установка Windows 2000/XP/2003 | 2 | 30-07-2005 02:47 | |
Java - виджеты контролов в Java | Metamorph | Программирование и базы данных | 2 | 03-08-2004 01:28 | |
Как на Perl'е написать перебор символов?? | JS | Программирование и базы данных | 2 | 16-10-2003 09:03 |
|