Главная страница
    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-1288088259
Loseva
2010-10-26 14:17
2011.02.06
О государственном прЕзрении человеков


11-1229287775
DenisArd
2008-12-14 23:49
2011.02.06
Как загрузить иконку нужного формата?


15-1288100292
vrem
2010-10-26 17:38
2011.02.06
То, где ты работаешь - продаётся


2-1290051713
Sergey
2010-11-18 06:41
2011.02.06
Как правильно читать и писать строки в поток?


2-1290101441
Mitroshin
2010-11-18 20:30
2011.02.06
Старый исходник после компиляции в D2010 (оформление)





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