Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1205355131
NieL
2008-03-12 23:52
2008.04.06
Graphics32 library


15-1203701871
NaRuTo
2008-02-22 20:37
2008.04.06
POGi - Media Player! Доделка!


3-1195117132
DimDim
2007-11-15 11:58
2008.04.06
Запрос на обновление ужасно долго???


11-1186747586
Gloomer
2007-08-10 16:06
2008.04.06
значение CheckBox в ListView


2-1205392293
031178
2008-03-13 10:11
2008.04.06
DateTimePicker1





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский