WinApi считать данные из стороннего приложения - C#
Формулировка задачи:
Всем привете! Ребят, выручайте. Мне необходимо по нажатию клавиши вытащить номер входящего вызова из программы X-lite(прога для IP телефонии).
Что я значится делаю:
подключаю значится необходимое для работы
и по нажатию на кнопку(на сколько я понимаю) получаю дискрипторы приложения(хотя сам не понимаю, че это за х.. ну условно ИДинтификаторы окна и всех объектов в нем )
Как мне теперь вытащить данные из X-lite. Если потыкать на окно X-lite'a программой Spy++, то она не видит каких либо объектов в ней, только воспринимает всю программу как одно целое(то есть нет ни label, textbox и подобных объектов нет).
Как мне выйти из этой ситуации. Может кто объяснит, все ли вообще я правильно понимаю и как в данном случае вытащить текст?
И на сколько я понимаю вытащить текст из программы мне теперь необходимо с помощью SendMessage..
Листинг программы
- [DllImport("user32.dll")]
- private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
- [DllImport("user32")]
- [return: MarshalAs(UnmanagedType.Bool)]
- public static extern bool EnumChildWindows(IntPtr window, EnumWindowProc callback, IntPtr i);
- [DllImport("user32.dll", CharSet = CharSet.Auto)]
- static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, [Out] StringBuilder lParam);
- public static List<IntPtr> GetChildWindows(IntPtr parent)
- {
- List<IntPtr> result = new List<IntPtr>();
- GCHandle listHandle = GCHandle.Alloc(result);
- try
- {
- EnumWindowProc childProc = new EnumWindowProc(EnumWindow);
- EnumChildWindows(parent, childProc, GCHandle.ToIntPtr(listHandle));
- }
- finally
- {
- if (listHandle.IsAllocated)
- listHandle.Free();
- }
- return result;
- }
Листинг программы
- List<IntPtr> ls = new List<IntPtr>();
- string enum_ = string.Empty;
- IntPtr hWnd = FindWindow(null, "X-lite");
- if (!hWnd.Equals(IntPtr.Zero))
- { ls = GetChildWindows(hWnd);}
- Array.ForEach(ls.ToArray(), i => enum_ += i.ToString() + Environment.NewLine );
- richTextBox1.AppendText(enum_);
Решение задачи: «WinApi считать данные из стороннего приложения»
textual
Листинг программы
- IntPtr.Add(process.MainModule.BaseAddress, 0xfff)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д