![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не удается получить заголовок окна
leonidus © (2006-10-25 10:41:00)нужно получить тест из заголовка чужого приложения, делаю так:
function GetWndText(WindowHandle: hwnd): string;
var
txtLength : integer;
buffer: string;
begin
TxtLength:= SendMessage(WindowHandle, WM_GETTEXTLENGTH, 0, 0);
txtlength:= txtlength + 1;
setlength(buffer, txtlength-1);
sendmessage (WindowHandle,wm_gettext, txtlength, longint(@buffer[1]));
result:= buffer;
end;
но получаю пустую строку, в чем может быть трабла?
leonidus (2006-10-25 14:07:00) [1]Большое спасибо, как раз то что нужно.
Elen (2006-10-25 13:57:00) [2]
> leonidus
Wnd:= WindowFromPoint(Mouse.CursorPos);
while getparent(wnd)<>0 do wnd:=getparent(wnd);
GetWindowText( Wnd, buff, SizeOf( buff ) );
caption:=string(buff);
GetClassName( Wnd, buff, SizeOf( buff ) );
caption:=caption+' '+string(buff);
В этом случае не важно где курсор
SpellCaster (2006-10-25 13:54:00) [3]leonidus,
HWND GetParent(
HWND hWnd // handle of child window
);
Elen (2006-10-25 13:41:00) [4]
> а как же тогда получить заголовок самого окна?
В принципе можно использовать EnumWindow или если по наводке мышкой на капшн главной формы. Тебе что надо скажи конкретнее...
leonidus (2006-10-25 13:38:00) [5]а как же тогда получить заголовок самого окна?
Elen (2006-10-25 13:37:00) [6]
> Т.е. для IE в NameClass получаю "Internet Explorer_Server"
> а потом вызываю:
> WndText:=GetWndText(Wnd);
У Internet Explorer_Server "капшн" пустой !
leonidus (2006-10-25 13:37:00) [7]ну да
Elen (2006-10-25 13:35:00) [8]
> leonidus
Гыгы... Признайся ты наводиш мышу не на главное окно IE а на его содержимое, в котором отображается страница?
Elen (2006-10-25 13:26:00) [9]
> WndText
какого типа?
leonidus (2006-10-25 13:22:00) [10]>Elen с вашей функцие то же самое
leonidus (2006-10-25 12:46:00) [11]Да в том то и дело, что например класс окна по тому же хендлу определяется нормально:
Wnd:= WindowFromPoint(pt);
GetWindowRect( Wnd, Rect );
GetWindowText( Wnd, buff, SizeOf( buff ) );
GetClassName( Wnd, buff, SizeOf( buff ) );
NameClass := StrPas( buff );
Т.е. для IE в NameClass получаю "Internet Explorer_Server" а потом вызываю:
WndText:=GetWndText(Wnd);
и получаю пустой WndText...
Elen (2006-10-25 10:57:00) [12]
> leonidus
А так? :
//********** FUNCTION **********
function WindowCaption(wind:hwnd=0):string;
var Nm:Array[0..255] of Char;
begin
if wind =0 then wind:=GetForegroundWindow;
GetWindowText(Wind,Nm,sizeof(nm)); // считываем текст заголовка окна
result:=string(nm);
end;
//********** END FUNCTION ******
novill (2006-10-25 10:56:00) [13]У меня всё работает. Можт ты хендл неправильный передаешь?