Форум: "Основная";
Текущий архив: 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