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

Вниз

Помогите, плиз, с нахождением под курсором Handle любого окна   Найти похожие ветки 

 
dmitry_12_08_73 ©   (2008-08-24 13:22) [0]

Подскажите, как под текущим курсором найти Handle любого окна, отображённого на экране, включая и таскбар. Функция WindowFromPoint определяет Handle только для своего приложения.


 
{RASkov} ©   (2008-08-24 13:29) [1]

> [0] dmitry_12_08_73 ©   (24.08.08 13:22)
> Функция WindowFromPoint определяет Handle только для своего приложения.

Врешь...


 
{RASkov} ©   (2008-08-24 13:31) [2]

Скажи как ты получаешь координаты тек. курсора... Тут скорее всего у тебя и ошибка)


 
dmitry_12_08_73 ©   (2008-08-24 13:37) [3]

Почему сразу врешь?
Делаю в событии OnMessage компонента TApplicationMessage обработку:

procedure TForm1.aev_ApplicationEventsMessage(var Msg: tagMSG;
 var Handled: Boolean);
var
 pt : TPoint;
 Handle : THandle;
begin
 GetCursorPos(pt);
 Handle := WindowFromPoint(pt);
 Label1.Caption := IntTostr(Handle); //метка на форме для отображения Handle  текущего окна
end;

При перемещении курсора по экрану видим изменения Handle только для своего приложения, для других окон Handle не меняется, почему?


 
{RASkov} ©   (2008-08-24 13:46) [4]

> [3] dmitry_12_08_73 ©   (24.08.08 13:37)
> Почему сразу врешь?

потому что сделай так:
procedure TForm1.Timer1Timer(Sender: TObject);
var P: TPoint;
begin
 GetCursorPos(P);
 Caption:=IntToStr(WindowFromPoint(P));
end;

:)
А в твоем варианте сообщения мыши перестают постыпать окну за пределами формы....


 
{RASkov} ©   (2008-08-24 13:48) [5]

> посту(ы)пать

переодически их почему-то путаю :)


 
dmitry_12_08_73 ©   (2008-08-24 14:01) [6]

Спасибо, Вы как всегда оказались правы!


 
dmitry_12_08_73 ©   (2008-08-24 14:23) [7]

Вот дальше пытаюсь найти указатель на текущее окно по полученному Handle и  FindControl за пределами своей формы возвращает nil, как это побороть?


 
{RASkov} ©   (2008-08-24 14:32) [8]

> [7] dmitry_12_08_73 ©   (24.08.08 14:23)
> FindControl за пределами своей формы возвращает nil

А вот тут смотрим:
function FindControl(Handle: HWnd): TWinControl;
var
 OwningProcess: DWORD;
begin
 Result := nil;
 if (Handle <> 0) and (GetWindowThreadProcessID(Handle, OwningProcess) <> 0) and
    (OwningProcess = GetCurrentProcessId)
then
..............


> как это побороть?

А что конкретно нужно-то? Может есть другие способы, ибо не во всех окнах есть VCL...


 
dmitry_12_08_73 ©   (2008-08-24 14:43) [9]

Нужно определять размеры любых находящихся на экране окон, в том числе и таскбара. Это, я так понимаю, возможно для окон, у которых есть Handle.


 
{RASkov} ©   (2008-08-24 14:54) [10]


> [9] dmitry_12_08_73 ©   (24.08.08 14:43)
> Нужно определять размеры любых находящихся на экране окон

GetWindowRect ?

> том числе и таскбара

Например:
function GetTaskHeight: Integer;
begin
 Result:=Max(Screen.Height-Screen.WorkAreaHeight, Screen.Width-Screen.WorkAreaWidth);
end;


 
dmitry_12_08_73 ©   (2008-08-24 15:16) [11]

Ещё раз спасибо, мне надо как раз функция GetWindowRect



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

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

Наверх




Память: 0.49 MB
Время: 0.014 c
3-1228129957
zorik
2008-12-01 14:12
2009.10.11
Firebird 2.0 to Firebird 1.5


3-1227795794
samalex
2008-11-27 17:23
2009.10.11
Как мне узнать хост пк и логин пользователя


2-1249994663
AndrewG
2009-08-11 16:44
2009.10.11
richedit


2-1249545112
Dennis I. Komarov
2009-08-06 11:51
2009.10.11
AV


4-1219358604
demon
2008-08-22 02:43
2009.10.11
Почему не отлавливаються двойные клики?