Главная страница
    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-1204823340
JanMihail
2008-03-06 20:09
2008.04.06
Как вытащить текст из компонента TTextEditor


8-1169390270
Владимир Березин
2007-01-21 17:37
2008.04.06
TShockWaveFlash in run time


2-1205144932
TX12
2008-03-10 13:28
2008.04.06
Компонент Image. Копирование изображений.


2-1205398187
Julia
2008-03-13 11:49
2008.04.06
CreateDBF


15-1203867632
No_Dead
2008-02-24 18:40
2008.04.06
О подсветке кода





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский