Форум: "Основная";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c