Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.02.06;
Скачать: CL | DM;

Вниз

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

 
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 вся ветка

Текущий архив: 2011.02.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.008 c
2-1289810551
Евгений07
2010-11-15 11:42
2011.02.06
наследование


2-1290114890
Василий3
2010-11-19 00:14
2011.02.06
веб браузер с проксей


15-1288271870
Правильный$Вася
2010-10-28 17:17
2011.02.06
DVD DL болванки - кто какие пользует и с какими приводами?


15-1288211336
Юрий
2010-10-28 00:28
2011.02.06
С днем рождения ! 28 октября 2010 четверг


15-1288267223
PEAKTOP
2010-10-28 16:00
2011.02.06
Ну что, начинаем все сначала ?