Как извлечь текст из окна?
Как на апи извлечь текст из Edit, к примеру?
Код:
char buf[512];
::GetWindowText(Edit1->Handle,buf,512);
::MessageBox(0,buf,0,MB_OK);
::GetWindowText(Edit1->Handle,buf,512);
::MessageBox(0,buf,0,MB_OK);
Можно еще более углубиться и использовать сразу Windows Messages:
WM_GETTEXT.
Код:
char buf[512];
::SendMessage(Edit1->Handle,WM_GETTEXT,(WPARAM)512,(LPARAM)buf);
::MessageBox(0,buf,0,MB_OK);
::SendMessage(Edit1->Handle,WM_GETTEXT,(WPARAM)512,(LPARAM)buf);
::MessageBox(0,buf,0,MB_OK);
Только надо учесть, что никакими стандартными методами извелечь текст из Edit'a чужой программы не получится - только из своей. А вот из всяких лэйблов и кэпшинов - пожалуйста.
Это не правда. Специально поставил mousehook, чтобы получить Handle окна Edit из другой программы, вбил полученный Hwnd в другую программу и спокойно получил содержимое. Главная проблема в другом - как найти нужный Edit, если запущено много окон с классами TForm1 и TEdit. А если программа еще и Title постоянно меняет...
Но это не нереально.
LPTSTR GetEditText(HWND edit)
{
int n=GetWindowTextLength(edit);
LPTSTR ed=(LPTSTR)malloc(sizeof((LPTSTR)*(n+1)));
GetWindowText(edit,ed,n+1);
return ed;
}
Так работает. А хендл окна чужой программы можно узнать и через утилиту spy++. Она прямо со средой поставляется. Хэндэлы кажет.
Да нет же, правда. "This function cannot retrieve the text of an edit control in another application" - цитата из msdn'a (функция GetWindowText). А потом, если б сам неоднакратно и безрезультатно не пробовал получать тексты edit'a, то ничего бы и не писал. Ты в какой ОС делал такие чудеса (в Windows 98 это не работает - 100%)? А edit'ы твои стандартные были?
LPTSTR GetEditText(HWND edit)
{
int n=GetWindowTextLength(edit);
LPTSTR ed=(LPTSTR)malloc(sizeof((LPTSTR)*(n+1)));
GetWindowText(edit,ed,n+1);
return ed;
}
Так работает. А хендл окна чужой программы можно узнать и через утилиту spy++. Она прямо со средой поставляется. Хэндэлы кажет.[/QUOTE]
Я так понял вам нужно найти хендл чужого окна тогда:
Хендл который получаеш с помощью утилиты spy++ может меняться при разных условиях. Лучше найти окно с помощью функции FindWindow а потом уже сам компонент TEdit с помощью FindWindowEx
Цитата:
Да нет же, правда. "This function cannot retrieve the text of an edit control in another application" - цитата из msdn'a (функция GetWindowText). А потом, если б сам неоднакратно и безрезультатно не пробовал получать тексты edit'a, то ничего бы и не писал. Ты в какой ОС делал такие чудеса (в Windows 98 это не работает - 100%)? А edit'ы твои стандартные были?
Windows2000, специально написал программу на BCB, куда впихнул TEdit. Запустил программу, получил хэндл Edit'a, написал другую программу, которая через WM_GETTEXT получила содержимое этого Edita.