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

Вниз

Hook на PopUp ы.   Найти похожие ветки 

 
neodiX ©   (2002-10-11 15:46) [0]

Как отлавить появление popup окон в винде. Просто я не знаю какой message надо отлавливать. Если только дело в message... Я где то читал, что какие то атомы использовать надо... Если кто в курсе, то паделитесь опытом.


 
neodiX ©   (2002-10-17 18:42) [1]

Куча ответов:)
Не я серьезно, как мониторить появление popup"oв. Хорошо, поставил я хук на WM_RBUTTONDOWN, a как узнать, что выскочил popup? И как получить хэндл этого окна(только мне кажется это не простое окно)? Я получаю хэндл любого окна которое оказывается под крысой, а вот когда popup под крысой никакго хэндла я не получаю...В чем трабл?


 
Ученик ©   (2002-10-17 19:00) [2]

А в чем цель ?


 
neodiX ©   (2002-10-17 19:06) [3]

Цель получить хэндл popUp"a, для того что бы позже по этому хэндлу получить его rect (getwindowrect) и скопировать в файл.


 
Ученик ©   (2002-10-17 19:18) [4]

Может, больше чем надо

var
hHook : THandle = 0;

function CbtProc(nCode : Integer;
wParam : WPARAM;
lParam : LPARAM) : LRESULT; stdcall;
begin
Result := CallNextHookEx(hHook, nCode, wParam, lParam);
if nCode = HCBT_CREATEWND then begin
Form1.ListBox1.Items.Add(IntToHex(wParam, 8));
end
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
hHook := SetWindowsHookEx(WH_CBT, @CbtProc, hInstance, GetCurrentThreadID);
end;


 
Ученик ©   (2002-10-17 20:01) [5]

Развитие

procedure WMUser100(var Message : TMessage); message WM_USER + 100;

var
hHook : THandle;

function CbtProc(nCode : Integer;
wParam : WPARAM;
lParam : LPARAM) : LRESULT; stdcall;
var
R : TRect;
begin
Result := CallNextHookEx(hHook, nCode, wParam, lParam);
if (nCode = HCBT_CREATEWND) then
PostMessage(Form1.Handle, WM_USER + 100, wParam, 0)
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
hHook := SetWindowsHookEx(WH_CBT, @CbtProc, hInstance, GetCurrentThreadID);
end;

procedure TForm1.WMUser100(var Message : TMessage);
var
R : TRect;
begin
GetWindowRect(Message.WParam, R);
with R do
ListBox1.Items.Add(Format("%x - (%d,%d,%d,%d)", [Message.wParam, Left, Top, Right, Bottom]))
end;


 
neodiX ©   (2002-10-18 18:10) [6]

Это то что мне надо! Но вот проблема возникла, кодга я это все внес в дллку т.е. чтобы сделать глобальных хук. Как только запуская хук, сразу идет офигенная нагрузка на винду и в итое она зависает. Может есть какие подводные камни с глобальным хуком.


 
Ученик ©   (2002-10-18 18:19) [7]

>neodiX © (18.10.02 18:10)
В DLL hHook восстанавливается (через CreateFileMapping)?
Если не посылать сообщений зависание есть ?


 
neodiX ©   (2002-10-19 16:53) [8]

Сорри, с зависанием я поспешил. Про CreateFileMapping я знаю, ошибка была в другом - оплошность. В итоге глобальный хук был правильно устоновлен, но он оказывается мониторит только попапы которые вызываются запущенным приложением, т.е. если я на desktop"e жму правую клавишу крысы то хук ни чего не отвечает (не передает ничего в мою прогу).
2 Ученик: Может знаешь в чем трабл? (а может все же попапы на декстопе это не простые окна?)


 
Ученик ©   (2002-10-19 17:21) [9]

>neodiX © (19.10.02 16:53)
Программа показывающая свойства окна под курсором "мыши" говорит, что Popup на Desktop-е - обыкновенное окно


 
neodiX ©   (2002-10-21 12:09) [10]

Еще раз сорри, все вышло. Внимательнее быть надо.
2 Ученик Спасибо.


 
Song ©   (2002-10-21 13:26) [11]

Может WM_CONTEXTMENU ?


 
neodiX ©   (2002-10-21 13:51) [12]

Только что попробывал WM_CONTEXTMENU не походит. Попробуй сам. Но с этим вопросом я уже разобрался. Прекрасно работает вариант Ученика, а я поставил хук на WM_MOUSEMOVE, во время обработки этой мессаги я нахожу хэндл окна по координате крысы и тоже все ОК.



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

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

Наверх




Память: 0.49 MB
Время: 0.009 c
7-101535
Ш-К
2002-08-23 15:23
2002.10.31
Переключаться программно между ECP/EPP.


14-101511
Nostradamus
2002-10-12 18:45
2002.10.31
Как избавится от посетителя???


14-101473
Lola
2002-10-11 12:30
2002.10.31
Что случилось?


6-101420
Ferrum
2002-09-01 13:02
2002.10.31
Подскажите как скроллировать страницу в TWebBrowser


3-101073
zks
2002-10-11 06:32
2002.10.31
DBase Мне нужно отобрать записи через запрос