Как временно запретить POPUP в любом HWND?

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[flash] ОТКЛЮЧЕН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Как временно запретить POPUP в любом HWND?

.

BBB » 20 фев 2009, 09:36

SergeyS писал(а):Могу подкинуть только идею: у каждого окна на котором выскакивает popup должен быть hpopup или hmenu (нужно в этом направлении покапать). Так вот, если просто отключить у окна этот хэндл? Насколько я могу судить, даже делфи со своим VCL завязан на этом хэндле
Все-таки, кину такую идею. Если повесить HOOK не на мышиные события, а на создание окна. Popup-меню - это некое окно. Если на моменте создания запретить его создание (в HOOK-е такая возможность точно есть, я ею пользвался), то - вот он и искомы результат. Главное понять - какое окно из создаваемых "запретить".

Re: Как временно запретить POPUP в любом HWND?

timself » 19 фев 2009, 19:55

Спасибо всем за участие.
Я понял как можно обойтись вообще без нажатия правой кнопки мыши. Это устраняет проблему и весь сопутствующий "геморрой". Пусть POPUP спит спокойно.

Re: Как временно запретить POPUP в любом HWND?

Naeel Maqsudov » 19 фев 2009, 18:02

ИМХО, тупиковая идея. Что такое handle? Это число которое я храню в какой-нибудь переменной. Этот хендл конечно принадлежит процессу (и его конечно можно найти по PID). Во-первых он никак не связан с хендлом окна, так как это опять же всего-лишь хэндл, которым владеет процесс. Во-вторых, отключить хендл, т.е. запретить им пользоваться, можно отлько одним способом: освободить ресурс FreeResource(aHandle). Но это будет уже навсегда.

Копать надо все-таки в сторону WM_POPUP

Re: Как временно запретить POPUP в любом HWND?

SergeyS » 19 фев 2009, 16:56

Могу подкинуть только идею: у каждого окна на котором выскакивает popup должен быть hpopup или hmenu (нужно в этом направлении покапать). Так вот, если просто отключить у окна этот хэндл? Насколько я могу судить, даже делфи со своим VCL завязан на этом хэндле

Re: Как временно запретить POPUP в любом HWND?

timself » 19 фев 2009, 07:01

В том то и дело, что окно не мое - любое...
Дело вот в чем: контекстное меню всплывает всегда при нажатии правой кнопки мыши, а мне нужно сделать так, чтобы оно не всплывало если (это проверяется хуком) нажата левая кнопка мыши.
Это было реализовано в одной программе, я даже писал ее автору, спрашивал как сие сделано, но ответа не получил.

Re: Как временно запретить POPUP в любом HWND?

atavin-ta » 18 фев 2009, 11:26

&quot писал(а):...вообще, можно ли послать окну сообщение ЗАПРЕЩАЮЩЕЕ в нем его же контексное меню? Или нет?
Не знаю, бывает ли такая мессага ввообще. Но обработку сообщений каждый делает сам и может забокировать любое ссобщение или обработать его иначе. Поэтому если даже такая мессага бывает, то в чужом окне она может не работать, то есть не блокировать POPUP. Если же окно твоё, то ты можешь сам определить такое сообщение и вопрос сведётся к "не продублирую ли я в результате существующий код мессаги и какой именно?".

Re: Как временно запретить POPUP в любом HWND?

timself » 18 фев 2009, 08:06

...вообще, можно ли послать окну сообщение ЗАПРЕЩАЮЩЕЕ в нем его же контексное меню? Или нет?

Re: Как временно запретить POPUP в любом HWND?

BHy4ok » 17 фев 2009, 21:11

А что насчет использование глобальный переменных?

Как временно запретить POPUP в любом HWND?

timself » 17 фев 2009, 15:39

Как временно отключить вывод POPUP меню в любом HWND?
Ситуация такая: стоит хук на мышь, когда юзер одновременно жмет левую и правую кнопки мыши, данному окну через keybd_event шлется определенное нажатие клавишь.
Но тут возникает проблема: keybd_event не срабатывает, так как всплывает контекстное меню и забирает фокус на себя.
Можно ли заблокировать в нужный момент POPUP для текущего окна?

Код: Выделить всё

...
lmdown: boolean;
pMHook : TMouseHookStructEx;
...
pMHook := PMouseHookStructEx(lParam)^;
...
case wparam of

  WM_LBUTTONDOWN:
  begin
    lmdown:=true;
    // <--- вот тут бы заблокировать...
  end;

  WM_LBUTTONUP:
  begin
    lmdown:=false;
    // <--- а тут по идее разблокировать...
  end;

  WM_RBUTTONUP:
  if lmdown then
  begin
    keybd_event(...); 
  end;
...
Подозревю, что можно послать окну некое SendMessage(...) или PostMessage(...), но что именно. Не подскажете?

Вернуться к началу