Главная страница
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.012 c
15-1249908287
Type
2009-08-10 16:44
2009.10.11
DBISAM..?


15-1246604362
Rule
2009-07-03 10:59
2009.10.11
Пользователи Стрима отзовитесь :-)


2-1249281322
CSS
2009-08-03 10:35
2009.10.11
Как запихнуть в ресурсы 32-хбитный битмап?


15-1249972832
Kolan
2009-08-11 10:40
2009.10.11
Жесты в Делфи 2010


15-1249934148
syteser78
2009-08-10 23:55
2009.10.11
У кого нибуть из вас воровали почтовый ящик?