Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
14-101510
Anatoly Podgoretsky
2002-10-09 19:25
2002.10.31
Потрепаться о ПЕРЕПИСи


3-101147
LeS
2002-10-09 10:47
2002.10.31
Сохранить текст хранимой процедуры в txt из StoredProc


14-101455
Дремучий
2002-10-10 17:30
2002.10.31
Глючит дата (год) регистрациии?


1-101181
Граф
2002-10-18 14:07
2002.10.31
progress bar в таблице


1-101268
Manulo
2002-10-22 11:19
2002.10.31
Имена компонентов....





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