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

Вниз

Помогите, плиз, с нахождением под курсором 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
1-1218907584
TStas
2008-08-16 21:26
2009.10.11
Что содержит Application.ExeName для приложения, по сети?


2-1249671660
Б
2009-08-07 23:01
2009.10.11
Положение колёсика мыши.


11-1193764318
=BuckLr=
2007-10-30 20:11
2009.10.11
Проверка ящика на предмет наличия писем


15-1250104083
tesseract
2009-08-12 23:08
2009.10.11
инет зависимость


1-1219144134
Незнайка
2008-08-19 15:08
2009.10.11
QuantumGrid и фильтры





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