Здравствуйте, Spiceman, Вы писали:
S>Здравствуйте, Siga, Вы писали:
S>>Спасибо за подсказку
. На примере с калькулятором я хотел разобраться как в шарпе работать с хэндлами.
S>>Думал, что калк будет достаточно простым примером. Вижу что это не так
S>Пожалуйста
S>Вобщем-то такие вещи на шарпе делаются точно так же как и на C++. Вызовом функций WinAPI.
S>Вот как можно решить Вашу задачу:
S>S>using System;
S>using System.Text;
S>using System.Diagnostics;
S>using System.Runtime.InteropServices;
S>namespace Example
S>{
S> class Class1
S> {
S> [DllImport("user32.dll")]
S> static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
S> [DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
S> static extern int SendMessage(IntPtr hWnd, uint Msg, uint wParam, StringBuilder lParam);
S> private const UInt32 WM_GETTEXT = 0x000D;
S> private const UInt32 WM_GETTEXTLENGTH = 0x000E;
S> [STAThread]
S> static void Main(string[] args)
S> {
S> Process[] ps = Process.GetProcessesByName("calc");
S> if (ps.Length > 0)
S> {
S> Process p = ps[0];
S> IntPtr wndMain = p.MainWindowHandle;
S> IntPtr wndEdit = FindWindowEx(wndMain, IntPtr.Zero, "Edit", "");
S> int textLength = SendMessage(wndEdit, WM_GETTEXTLENGTH, 0, null);
S> StringBuilder text = new StringBuilder(textLength);
S> int lengthReaded = SendMessage(wndEdit, WM_GETTEXT, (uint)text.Capacity, text);
S> Console.WriteLine("Длина текста: {0}", lengthReaded);
S> Console.WriteLine("Текст: {0}", text.ToString());
S> Console.ReadLine();
S> }
S> }
S> }
S>}
S>
Огромное спасибо за рабочий пример