Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];

Вниз

Поиск всех главных окон   Найти похожие ветки 

 
ЛамерЪХ   (2008-11-10 03:38) [0]

Привет всем )) Поделитесь кто-нибудь процедуркой , ищащуй Все Заглавные окна в Windows )
Пробовал искать все окна , с помощью EnumWindows  , Однако , она ищит все окна , и хандлы всех эллементов окон, а мне нужны лишь заглавные окна ))):) Напишите плиз , кусочик кода ))


 
Eraser ©   (2008-11-10 03:43) [1]

вот эта функция должна возвращать примерно то, что находится во вкладке "приложения" стандартного таск-менеджера.

function IsMainAppWindow(Wnd: THandle): Boolean;
var
 ParentWnd: THandle;
 ExStyle: DWORD;
begin
 if IsWindowVisible(Wnd) then
 begin
   ParentWnd := THandle(GetWindowLongPtr(Wnd, GWLP_HWNDPARENT));
   ExStyle := GetWindowLongPtr(Wnd, GWL_EXSTYLE);
   Result := ((ParentWnd = 0) or (ParentWnd = GetDesktopWindow)) and
     ((ExStyle and WS_EX_TOOLWINDOW = 0) or (ExStyle and WS_EX_APPWINDOW <> 0));
 end
 else
   Result := False;
end;

function GetTasksList(const List: TStrings): Boolean;

 function EnumWindowsProc(Wnd: THandle; List: TStrings): Boolean; stdcall;
 var
   Caption: array [0..1024] of Char;
 begin
   if IsMainAppWindow(Wnd) and (GetWindowText(Wnd, Caption, SizeOf(Caption)) > 0) then
     List.AddObject(Caption, Pointer(Wnd));
   Result := True;
 end;

begin
 List.BeginUpdate;
 try
   Result := EnumWindows(@EnumWindowsProc, LPARAM(List));
 finally
   List.EndUpdate;
 end;
end;

(c) JCL.


 
Германн ©   (2008-11-10 03:45) [2]


> Поделитесь кто-нибудь процедуркой , ищащуй Все Заглавные
> окна в Windows )

Вот когда Билл Гейтс, лично мне объяснит, что такое "Заглавные окна в Windows", вот тогда я может быть буду думать над вопросом! :)


 
ЛамерЪХ   (2008-11-10 03:57) [3]

GetWindowLongPtr - Делфи не знает такого , юниты нужно какие-нибудь объявлять ?


 
ЛамерЪХ   (2008-11-10 04:07) [4]

О_о всо ! спасибо Eraser Разобрался


 
Leonid Troyanovsky ©   (2008-11-10 13:02) [5]


> Eraser ©   (10.11.08 03:43) [1]

> function IsMainAppWindow(Wnd: THandle): Boolean;

Судя по http://www.microsoft.com/msj/1197/win321197.aspx д.б.

function IsMainAppWindow(Wnd: THandle): Boolean;
var
exstyle: DWORD;
begin
Result := IsWindowVisible(Wnd);
if Result then
  begin
    ExStyle := GetWindowLong(Wnd, GWL_EXSTYLE);
    Result := exstyle and WS_EX_APPWINDOW <> 0;
    if not Result and (exstyle and WS_EX_TOOLWINDOW = 0) then
      Result := GetWindowLong(Wnd, GWL_HWNDPARENT) = 0;
  end;
end;

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-11-10 13:20) [6]


> Eraser ©   (10.11.08 03:43) [1]

>  function EnumWindowsProc(Wnd: THandle; List: TStrings):
>  Boolean; stdcall;

BOOL.

Кроме того, польза в List.AddObject весьма сомнительна, бо
хендлы валидны лишь до тех пор, пока окно не закрыты.

Т.е., если на момент вызова EnumWindows нас
заинтересовали к.л. окна, то создавшие их потоки
д.б. захучены на предмет WM_DESTROY.

--
Regards, LVT.


 
Eraser ©   (2008-11-10 15:29) [7]

> [5] Leonid Troyanovsky ©   (10.11.08 13:02)

эт Джедаевские недоработки, я особо не разбирался в коде, т.к. обычно он там нормального качества, но за пояснения спасибо.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.086 c
2-1226328530
@!!ex
2008-11-10 17:48
2008.12.21
класс, который не нужно создавать.


15-1224141876
brother
2008-10-16 11:24
2008.12.21
проблемма с гуглем...


15-1224514064
GrayFace
2008-10-20 18:47
2008.12.21
Как проследить, какие программы гоняют пакеты?


2-1226567217
Tugodum
2008-11-13 12:06
2008.12.21
невидимая форма


6-1196884543
Norm Iridium
2007-12-05 22:55
2008.12.21
Delphi как получить HTML-код страницы? А через прокси?





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