Re[4]: Window handle
От: Siga  
Дата: 12.03.08 21:07
Оценка:
Здравствуйте, 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>


Огромное спасибо за рабочий пример
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.