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

Вниз

Как получить координаты чужого окна?   Найти похожие ветки 

 
Vampire Kain ©   (2009-06-13 11:39) [0]

Доброго времени суток. Помогите пожалуйста определить положение чужого окна если мне не известен Handle. Причем окон несколько: одно главное и несколько дочерних(на сколько я понял) Из доступных данных имеется только имя процесса, класснейм окон(причем у всех окон класснейм одинаковый), и размеры всех окон(и дочерних и главного). Алгоритм приблизительно такой: мы находим окна с классом "XXX" потом проверяем размер этих окон, если они удовлетворяют условию, то узнаем их расположение... Как это возможно реализовать? Уточню сразу, что в delphi я не мастер, поэтому попрошу строго не судить о форме вопроса)) как смог так и объяснил)


 
Vampire Kain ©   (2009-06-13 12:34) [1]

Попробовал получать handle через FindAWindow("допустим имеется часть заголовка", ""), но тогда если окон несколько, то как получать handle всех окон содержащих часть имеющегося заголовка...? и все-таки думаю правильнее было бы реализовать алгоритм из моего основного вопроса... может быть у кого-нибудь есть идеи или предложения?


 
Vampire Kain ©   (2009-06-13 12:38) [2]

type
PFindWindowStruct = ^TFindWindowStruct;
TFindWindowStruct = record
 Caption: string;
 ClassName: string;
 WindowHandle: THandle;
end;

function EnumWindowsProc(hWindow: hWnd; lParam: LongInt): Bool; stdcall
var
lpBuffer: PChar;
WindowCaptionFound: bool;
ClassNameFound: bool;
begin
GetMem(lpBuffer, 255);
Result := True;
WindowCaptionFound := False;
ClassNameFound := False;
try
 if GetWindowText(hWindow, lpBuffer, 255) > 0 then
 if Pos(PFindWindowStruct(lParam).Caption, StrPas(lpBuffer)) > 0 then WindowCaptionFound := true;
 if PFindWindowStruct(lParam).ClassName = "" then
 ClassNameFound := True
 else if GetClassName(hWindow, lpBuffer, 255) > 0 then
 if Pos(PFindWindowStruct(lParam).ClassName, StrPas(lpBuffer)) > 0 then ClassNameFound := True;
 if (WindowCaptionFound and ClassNameFound) then
 begin
 PFindWindowStruct(lParam).WindowHandle := hWindow;
 Result := False;
 end;
finally
 FreeMem(lpBuffer, sizeof(lpBuffer^));
end;
end;

function FindAWindow(Caption: string; ClassName: string): THandle;
var WindowInfo: TFindWindowStruct;
begin
WindowInfo.Caption := Caption;
WindowInfo.ClassName := ClassName;
WindowInfo.WindowHandle := 0;
EnumWindows(@EnumWindowsProc, LongInt(@WindowInfo));
FindAWindow := WindowInfo.WindowHandle;
end;

procedure TForm1.Button1Click(Sender: TObject);
var TheWindowHandle: THandle;
begin
TheWindowHandle := FindAWindow("Opera", "");
if TheWindowHandle <> 0 then
 begin
 Showwindow(TheWindowHandle, sw_restore);
 BringWindowTo(TheWindowHandle);
 end
else
 ShowMessage("Window Not Found!");
end;

-----------------------------------------------------------------------
реализация функции FindAWindow...


 
Б   (2009-06-15 16:00) [3]


>  Помогите пожалуйста определить положение чужого окна если
> мне не известен Handle. Причем окон несколько: одно главное
> и несколько дочерних(на сколько я понял) Из доступных данных
> имеется только имя процесса, класснейм окон(причем у всех
> окон класснейм одинаковый),


Если есть класс окна, то его хендл можно получить при помощи FindWindow.
Загоняем поиск всех окон в цикл.
И теперь просто определяем положение окна, вызвав GetClientRect.



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

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

Наверх





Память: 0.45 MB
Время: 0.003 c
15-1288166553
DVM
2010-10-27 12:02
2011.02.06
Опять перепись 2010


2-1289815798
cyber-pilot
2010-11-15 13:09
2011.02.06
Вопрос про WideChar


3-1251976429
kyn66
2009-09-03 15:13
2011.02.06
После обновления компонентов ADS - ошибка


15-1287459022
George
2010-10-19 07:30
2011.02.06
Учись работать?


15-1287952139
Юрий
2010-10-25 00:28
2011.02.06
С днем рождения ! 25 октября 2010 понедельник





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