|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Данные из чужой программы, прочитать из WindowsForms10.Window.8.app - таблицу
Пожалуйста помогите!!!:wall: При получении данных из чужой программы, нужно прочитать данные из контейнера .NET - WindowsForms10.Window.8.app.0.378734a - таблицу dspTestSeqGrid. Уже перепробовал разнообразную реализацию, но пока не нашел решения этой проблемы.
У меня есть стороннее приложение WindowsForms10 (рис 1), и мне нужно получить доступ к данным в виде сетки этого приложения (прочитать) из моего приложения созданного в Delphi. При использовании программы Spy ++ она не видит этих элементов (рис 2). Но программа Ranorex Spy видит все необходимые поля и четает данные (рис 3 и 4). При рекурсивном переборе всех елементов с использованием FindWindow, FindWindowEx, EnumChildWindows и EnumChildFunc дает мне доступ только к главному окну, но не видит содержимое контейнера. h := FindWindow(NIL,'HK1400 EUI/EUP'); if h <> 0 then begin EnumChildWindows(h, @EnumChildFunc, 0); ... function EnumChildFunc(Child: HWND; lParam : Longint) : BOOL; stdcall; var szClass : array[0..63] of Char; s : array[Byte] of Char; begin GetClassName(Child, szClass, SizeOf(szClass)); ... End; Так же на сайте разработчика программы Ranorex Spy нашол код (для их среды програмирования) для получения доступа к таблице: https://www.ranorex.com/blog/element...stcs-controls/ Код:
Ranorex.Form form = Application.FindForm("My Styleable Application", SearchMatchMode.MatchExact, "WindowsForms10.Window.8.app.0.378734a #2", false, 5000); form.Activate(); // Find child by control name control = form.FindClassName("WindowsForms10.Window.8.app.0.378734a"); control.Focus(); // Find table element Element table = control.Element.FindChild(Role.Table,"ultraGrid1"); Element[] rows = table.FindChildren(Role.Row); Console.WriteLine("RowCount: " + rows.Length.ToString()); int i = 0; int j = 0; foreach ( Element row in rows ) { Element[] cells = row.FindChildren(Role.Cell); foreach (Element cell in cells) { if (cell.State == State.Invisible) continue; Mouse.MoveToElement(cell); cell.Value = "Cell: " + i.ToString() + "," + j.ToString(); j++; } j = 0; i++; // open sub node row.DoDefaultAction(); Element[] subRows = row.FindChildren(Role.Row); Console.WriteLine("SubRows: " + subRows.Length.ToString()); int k = 0; int l = 0; foreach (Element subRow in subRows) { Element[] rowCells = subRow.FindChildren(Role.Cell); foreach (Element cell in rowCells) { if (cell.State == State.Invisible) continue; Mouse.MoveToElement(cell); cell.Value = "Sub Cell: " + k.ToString() + "," + l.ToString(); l++; } k++; l=0; } k=0; // close sub node row.DoDefaultAction(); } Пожалуйста, помогите мне получить доступ к таблице (содержащему данные сетки) и навигации по ней. Желательно с реализацией в Delphi. Последний раз редактировалось Admin, 01.05.2018 в 17:46. |