Re[3]: Window handle
От: Spiceman  
Дата: 11.03.08 13:25
Оценка:
Здравствуйте, Siga, Вы писали:

S>Спасибо за подсказку . На примере с калькулятором я хотел разобраться как в шарпе работать с хэндлами.

S>Думал, что калк будет достаточно простым примером. Вижу что это не так

Пожалуйста
Вобщем-то такие вещи на шарпе делаются точно так же как и на C++. Вызовом функций WinAPI.
Вот как можно решить Вашу задачу:

using System;
using System.Text;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace Example
{
    class Class1
    {
        [DllImport("user32.dll")]
        static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
        [DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
        static extern int SendMessage(IntPtr hWnd, uint Msg, uint wParam, StringBuilder lParam);

        private const UInt32 WM_GETTEXT = 0x000D;
        private const UInt32 WM_GETTEXTLENGTH = 0x000E;

        [STAThread]
        static void Main(string[] args)
        {
            Process[] ps = Process.GetProcessesByName("calc");
            if (ps.Length > 0)
            {
                Process p = ps[0];
                IntPtr wndMain = p.MainWindowHandle;
                IntPtr wndEdit = FindWindowEx(wndMain, IntPtr.Zero, "Edit", "");

                int textLength = SendMessage(wndEdit, WM_GETTEXTLENGTH, 0, null);
                StringBuilder text = new StringBuilder(textLength);
                int lengthReaded = SendMessage(wndEdit, WM_GETTEXT, (uint)text.Capacity, text);

                Console.WriteLine("Длина текста: {0}", lengthReaded);
                Console.WriteLine("Текст: {0}", text.ToString());
                Console.ReadLine();
            }
        }
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.