Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.05.2018, 10:38
bikovrm bikovrm вне форума
Прохожий
 
Регистрация: 18.01.2018
Сообщения: 1
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Данные из чужой программы, прочитать из 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.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:35.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter