Конференция ".Net" » Сграбить данные DataGrid из другого приложения [NT4, Win2k, WinXP]
 
  • Семен (05.01.08 23:41) [0]
    Имеется работающее приложение под Framework 2.0 в котором  имеется DataGrid с данными.
    Есть ли возможность достучаться до этих данных из другого приложения? Пока все попытки увенчались успехом только с эмуляцией мыши и клавиатуры.
    Может кто подскажет более лёгкий способ реализации этого без привлечения мыши и клавиатуры?
  • boa_kaa © (06.01.08 22:17) [1]
    Jeffrey Richter
    CLR via C#
    Глава 21
    Это к размышлению

    А вообще, не легче ли сохранить данные в поток или буфер обмена, и не копаться по чужим гридам?
  • Семен (07.01.08 15:59) [2]
    это конечно легче но ситуация такова, что от второго приложения есть только exe, т.е. дописать в него ничего не получится, поэтому приходится чесать левое ухо правой рукой :(
    Spy++ показывает ряд сообщений которые гуляют по гриду, может есть возможность выудить данные посредством сообщений? никто не сталкивался?
  • DiamondShark © (18.01.08 18:43) [3]
    Блин, это же дотнет, со всей его рефлексией.
    Напишите простенький загрузчик того ехе, после чего добирайтесь рефлекшеном до любых потрохов любых объектов.
  • DiamondShark © (18.01.08 20:09) [4]
    вот заготовка загрузчика:

    using System;
    using System.Windows.Forms;
    using System.Reflection;

    namespace Host
    {
       public class MainClass
       {
           public static void Main()
           {
               Application.Idle += new EventHandler(Application_Idle);
               Assembly victim = Assembly.LoadFrom(@"..\..\..\Victim\bin\Debug\Victim.exe");
               MethodInfo entryPoint = victim.EntryPoint;
               entryPoint.Invoke(null, null);
           }


           private static void Application_Idle(object sender, EventArgs e)
           {
           }

       }
    }



    Что здесь происходит:
    1. Грузится сборка ехе-жертвы.
    2. Получаем описатель точки входа. Здесь я считаю, что точка входа имеет сигнатуру: void Main(). Вы можете проанализировать описатель для того, чтобы выяснить, как именно описана точка входа, чтоб правильно её вызвать.
    3. Вызываем точку входа загруженного ехе.
    4. Обработчик Application.Idle используется как место, где мы можем перехватить управление. Можно использовать другие точки, например AddMessageFilter.

    Когда первый раз срабатывает Application.Idle, то доступна, как минимум, Form.ActiveForm или Application.OpenForms. Получайте ссылки на формы.

    А дальше доступно очень многое, вплоть до приватных полей. Можно добраться не то, что до грида, а даже до источника данных этого грида, что намного удобнее для выдирки данных.
 
Конференция ".Net" » Сграбить данные DataGrid из другого приложения [NT4, Win2k, WinXP]
Есть новые Нет новых   [134427   +35][b:0][p:0.001]