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)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д