Главная страница
    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.005 c
15-1250012152
TUser
2009-08-11 21:35
2009.10.11
База, джава, ПС + КПК


2-1249460930
Volga30
2009-08-05 12:28
2009.10.11
Смешать 2 цвета


1-1218984923
demon
2008-08-17 18:55
2009.10.11
Детектор полноэкранных окон


8-1198056476
Klim
2007-12-19 12:27
2009.10.11
Image+Rect


2-1249858889
Johnnnnn
2009-08-10 03:01
2009.10.11
Передача файла по нету.





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