Текущий архив: 2008.04.06;
Скачать: CL | DM;
Вниз
Как определить заголовок приложения Найти похожие ветки
← →
Yurikon (2007-08-06 17:20) [0]Доброго времени суток!
Подскажите, плиз, как определить заголовок приложения (title), если известено только название процесса либо часть заголовка?
Спасибо!
← →
Eraser © (2007-08-06 18:37) [1]
> Yurikon (06.08.07 17:20)
Если изестно название процесса, то:
1. Найти идентификаторы процессов с таким же наванием.
2. Найти окна, принадлежащие этим процессам с классом TApplication.
Если часть заголовка, то просмотреть все окна в системе с классом TApplication на предмет вхождения части названия.
Заголовок определяется c пом. GetWindowText() или WM_GETTEXT.
← →
JanMihail © (2007-08-06 22:25) [2]title: String;
...
SendMessage(Handle, WM_GETTEXT, 0, lParam(title));
ShowMessage(title);
-------------------------------------------------------------
title: array [0..127] of Char;
title2: String;
...
GetWindowText(Handle, title, SizeOf(title));
title2 := String(title);
ShowMessage(title2);
← →
Yurikon (2007-08-07 09:53) [3]Попробовал найти нужный хендл через EnumWindows(@EnumWindowsProc,0)со следующей функцией вызова:
function EnumWindowsProc(H: hwnd;LP:lParam): boolean;
var
title: array [0..127] of Char;
begin
GetWindowText(H, title, SizeOf(title));
if Pos("ABC", title) <> 0 then
begin
lp := h;
Result := False;
end else Result := True;
end;
Почему-то внутри процедуры EnumWindowsProc после вызова GetWindowText не появляется ничего, хотя переменная h меняется.
to JanMihail
Спасибо за пример, но задача как раз в том, чтобы определить Handle приложения, ане просто считать его title.
← →
DVM © (2007-08-07 10:49) [4]
> но задача как раз в том, чтобы определить Handle приложения,
> ане просто считать его title.
У приложений нет хэндлов, равно как и заголовков. Все это есть у окон. А у приложения может быть не одно окно. Что ищем то?
← →
Yurikon (2007-08-07 11:04) [5]Ищем окно, у которого известно подстрока заголовка, либо известно название процесса.
← →
DVM © (2007-08-07 12:54) [6]
> Yurikon (07.08.07 11:04) [5]
1) Если известно название процесса, а процессом порождено N одинаковых окон, что мы должны взять?
2) Если запущено N таких процессов?
← →
Leonid Troyanovsky © (2007-08-07 13:43) [7]
> Yurikon (07.08.07 09:53) [3]
> Попробовал найти нужный хендл через EnumWindows(@EnumWindowsProc,
> 0)со следующей функцией вызова:
>
> function EnumWindowsProc(H: hwnd;LP:lParam): boolean;
> var
> title: array [0..127] of Char;
> begin
> GetWindowText(H, title, SizeOf(title));
> if Pos("ABC", title) <> 0 then
> begin
> lp := h;
> Result := False;
> end else Result := True;
> end;
Найди 10 отличий:
function EnumWindowsProc(H: hwnd;LP:lParam): Bool; stdcall;
var
title: String;
len: Longint;
begin
len := GetWindowTextLength(h);
Result := len = 0;
if Result then
Exit;
SetLength(title, len);
GetWindowText(H, PChar(title), len+1);
Result := Pos("ABC", AnsiUpperCase(title)) = 0;
if not Result then
lp := h;
end;
--
Regards, LVT.
← →
Leonid Troyanovsky © (2007-08-07 16:26) [8]
> Leonid Troyanovsky © (07.08.07 13:43) [7]
> lp := h;
Для сохранения значения нужно передавать указатель на Longint, sorry.
--
Regards, LVT.
← →
MetalFan © (2007-08-07 21:39) [9]
> title: String;
> ...
> SendMessage(Handle, WM_GETTEXT, 0, lParam(title));
вот это кстати тоже неправильно)
← →
Yurikon (2007-08-08 17:59) [10]to LVT
Спасибо, Леонид! В Вашем варианте работает, если в lp передавать указатель. А в чем был косяк? Не ужели только в stdcall?
← →
Leonid Troyanovsky © (2007-08-08 21:49) [11]
> Yurikon (08.08.07 17:59) [10]
> А в чем был косяк? Не ужели только в stdcall?
А отличий найдено 10?
--
Regards, LVT.
Страницы: 1 вся ветка
Текущий архив: 2008.04.06;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.006 c