![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
следить за контекстным меню в другом окне [D6, WinXP]
Альберт © (2006-11-22 20:17:00)Добрый вечер! пытаюсь реализовать программу, которая могла бы следить за конкретным окном (или компонентом :-) ) с целью запрета появления контекстного меню. кажется надо ловить сообщения, но с этим я не работал.. буду рад, если откликнитесь))
Альберт (2006-11-25 14:03:00) [1]получилось!)) теперь флешки без контекстного работают. спасибо большое!
Leonid Troyanovsky (2006-11-25 13:57:00) [2]
> Leonid Troyanovsky © (25.11.06 13:52) [27]
> TMsg(lParam).message := WM_NULL
PMsg(lparam).Message
--
Regards, LVT.
Leonid Troyanovsky (2006-11-25 13:52:00) [3]
> Альберт (25.11.06 13:45) [26]
> я так понимаю на месте комментария должно что-то стоять.
Конечно. Что-то вроде
TMsg(lParam).message := WM_NULL
--
Regards, LVT.
Альберт (2006-11-25 13:45:00) [4]а каким образом можно модифицировать его? sendmessage?
очень хотелось бы пример кода..
if TMsg(Pointer(lParam)^).message = WM_RBUTTONDOWN then
begin
// ...........................
end;
я так понимаю на месте комментария должно что-то стоять..
Leonid Troyanovsky (2006-11-25 13:39:00) [5]
> Альберт (25.11.06 13:16) [24]
> делаю через WH_GETMESSAGE.
..
> но правый клик все равно работает на том окне..
Отменить обработку сообщения полностью нельзя.
Однако, можно модифицировать его в нечто нейтральное,
например, в WM_NULL.
--
Regards, LVT.
Альберт (2006-11-25 13:16:00) [6]делаю через WH_GETMESSAGE.
обрабатываю так:
if TMsg(Pointer(lParam)^).message = WM_RBUTTONDOWN then
begin
// ...........................
end;
но правый клик все равно работает на том окне..
Leonid Troyanovsky (2006-11-25 13:04:00) [7]
> Альберт (25.11.06 12:55) [22]
> а отмена передачи сообщения этому окну как сделать?
Если сообщение было PostMessage, то, например, хуком
WH_GETMESSAGE.
Если оно было SendMessage, то сабклассируя окно.
Т.е., из того же хука, назначить окну путем
SetWindowLong новую оконную процедуру.
--
Regards, LVT.
Альберт (2006-11-25 12:55:00) [8]спасибо за совет!
поймал ее (менюху)!!! ))) Flash - это окно.
а отмена передачи сообщения этому окну как сделать?
Elen (2006-11-24 07:50:00) [9]
> при перечислении дочерних окон окна браузера не видно окно
> Flash-компонента
Ловиш менюху в ролике flash? Тяжко будет...
Верный способ получения хенделей запустить spy++ из стандартной поставки Visual Studio и посмотреть в нем какие хендели есть у браузера. Может у того что ты ловиш хенделя нет - flash ролик это ж рисунок
Альберт (2006-11-23 21:26:00) [10]еще вопрос. при перечислении дочерних окон окна браузера не видно окно Flash-компонента.
Альберт (2006-11-23 16:58:00) [11]а глобальный хук надо делать только в dll чтоли?
Elen (2006-11-23 13:11:00) [12]
> clickmaker
Чужая? Ага .
clickmaker (2006-11-23 13:07:00) [13]
> эмулятора нажатия на пункт попупа, но как послать мессагу
> тому что не имеет хенделя
а прога на дельфи что-ли?
Elen (2006-11-23 13:03:00) [14]
> clickmaker
Ха. Так это для моей проги. А как это проделать в чужой. Рассказываю ситуэйшн - есть одна прога у наших конструкторов (ужость) там выползает меню с подменю с подменю с подменю по нажатии на кнопку. Так вот уж очень долго по этим подменю лазить мышкой с шариком, спотыкается постоянно. Вот и захотелось написать ченить типа эмулятора нажатия на пункт попупа, но как послать мессагу тому что не имеет хенделя. В общем TPUtilWindow теперь я конечно попробую, но...
clickmaker (2006-11-23 12:58:00) [15]глобальная переменная PopupList
Elen (2006-11-23 12:48:00) [16]
> clickmaker
И как отловить или перебить месаги для TPUtilWindow?
clickmaker (2006-11-23 12:30:00) [17]
> [12] Elen © (23.11.06 12:26)
нет, не форме. VCL создает спец окно класса TPUtilWindow. Ему все и приходит. Сначала WM_ENTERMENULOOP, потом WM_MENUSELECT, WM_COMMAND, а потом WM_EXITMENULOOP
Elen (2006-11-23 12:26:00) [18]
> потому что сообщение приходит окну, породившему меню
Тоесть форме? А точнее? Так вот не выходит :
unit Unit1;
...
interface
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
N11: TMenuItem;
N21: TMenuItem;
Button1: TButton;
procedure qq(var m:TWMMenuSelect); message WM_MENUSELECT ;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure tform1.qq;
begin
form1.caption:='sd';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
PopupMenu1.Popup(500,100);
end;
end.
Какое окно породило меню в случае его вызова по клику на кнопке?
clickmaker (2006-11-23 12:04:00) [19]
> [10] Elen © (23.11.06 11:52)
потому что сообщение приходит окну, породившему меню
Elen (2006-11-23 11:52:00) [20]
> clickmaker
тогда почему не робе такое :по клику на буттон вылазит попуп...
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if msg.message=WM_MENUSELECT then caption:='sd';
end
как ловить этот месседж? хуком?