Здравствуйте, 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();
}
}
}
}