Мне нужно получить текст, который отображается в текстовом поле в другом окне окна Windows.получение текста из текстового поля в не моем окне C#
Любой может сказать мне, как я могу это сделать, используя C#?
Мне нужно получить текст, который отображается в текстовом поле в другом окне окна Windows.получение текста из текстового поля в не моем окне C#
Любой может сказать мне, как я могу это сделать, используя C#?
Вы не можете сделать это изначально - вам придется вникать в Windows API.
Посмотрите на
Вы хотите использовать Spy ++ (или эквив.), Чтобы найти имя класса элемента, который вы ищете , Затем вам необходимо использовать PInvoke, используя комбинацию вышеупомянутых функций.
Не думайте, что это возможно, вызовы API Windows не позволят вам копать так далеко в другое приложение. Одна из моих идей - заставить экран снимать, а затем использовать OCR на результирующем изображении, но это высоко оценивается на взломанном расходомере. Есть ли что-то, что вы пытаетесь выполнить под ним, например, определить, какой именно процесс выполняется?
Вам нужно будет получить дескриптор окна приложения, на котором размещено текстовое поле, а затем получить дескриптор фактического элемента управления, из которого вы хотите получить текст. Затем вы можете отправить сообщение WM_GETTEXT этому элементу управления, чтобы прочитать значение элемента управления. Вы захотите использовать какое-либо окно шпионского приложения, чтобы получить сведения об элементах управления, размещенных в окне, например, в окне «Информационный инструмент окна AutoIt».
Я смог найти пример от Expert Exchange, подробно описывающий, как выполнить описанное выше чтение элемента управления редактированием в блокноте: http://www.experts-exchange.com/Programming/Languages/.NET/Visual_CSharp/Q_23748618.html (прокрутите страницу вниз).
private const int WM_GETTEXTLENGTH = 0x000E;
private const int WM_GETTEXT = 0x000D;
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, StringBuilder lParam);
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
IntPtr notepad = FindWindow("notepad", null);
IntPtr editx = FindWindowEx(notepad, IntPtr.Zero, "edit", null);
int length = SendMessage(editx, WM_GETTEXTLENGTH, 0, 0);
StringBuilder text = new StringBuilder(length);
int hr = SendMessage(editx, WM_GETTEXT, length, text);
Console.WriteLine(text);
FYI, Expert-Exchange имеет только перечисленные ответы, если вас направляют через Google, поэтому ваша ссылка не работает. –
Спасибо Mystere Man Я этого не знал. Поиск google для [site: experts-exchange.com Как получить текст из элемента управления Windows с помощью C#], и это должно быть вам. –
спасибо, что сработало для меня! –
Это длинный выстрел, но я помню приложение под названием «HawkEye», что позволило вам вникать в дереве управления .NET-приложения, пока код не был запутанным или что-то вроде этого. Этот код, похоже, вышел из открытого источника, поэтому вы никогда не знаете, что вам может показаться полезным/бесполезным.
Использование System.OtherApplications.CaptureTextBox! это невозможно, объясните, почему вы действительно этого хотите? – 2010-12-14 23:41:59