![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Окно в котором нажа пункт меню. Как узнать?
@!!ex © (2007-12-11 20:47:00)Нашел такйо код:
{Добавление своих пунктов меню в системное меню окна}
{поместите
const
My_MenuItem=$4000; (*константу можете по своему обозвать и дать ей другой номер, но есть какие-то номера, которые зарезервированы для виндузом для своих пунктов меню - не попадите на них*)
перед
var
Form1: TForm1;
ОБЯЗАТЕЛЬНО ПОМЕСТИТЕ В СЕКЦИЮ PRIVATE СТРОКУ
procedure HookSysCommand(var message : TwmSysCommand);message wm_SysCommand;
}
procedure TForm1.HookSysCommand(var message : TwmSysCommand);
begin
inherited;
case message.CmdType of
My_MenuItem : ShowMessage('Пункт активизирован');
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
SysMenu : THandle;
begin
SysMenu := GetSystemMenu(Handle, False);
AppendMenu(SysMenu, mf_SEPARATOR, 0, #0);
AppendMenu(SysMenu, mf_BYPOSITION, My_MenuItem, 'Новый пункт');
{appendmenu добавляет новый пункт в конец,
а для вставки своего пункта в другую порядковую позицию воспользуйтесь insertmenu
пример : InsertMenu(SMenu, 1, mf_BYPOSITION, My_MenuItem, 'Новый пункт');}
end;
НЕпойму, как узнать Handle окна, в меню которого кликнули.
@!!ex (2007-12-12 11:50:00) [1]> [11] Igor Zorkov © (12.12.07 11:34)
А что за ошибка? вроде работает..
@!!ex (2007-12-12 11:49:00) [2]> [10] Igor Zorkov © (12.12.07 11:23)
Спасибо! Буду разбираться.
Igor Zorkov (2007-12-12 11:34:00) [3]
> Igor Zorkov © (12.12.07 11:23) [10]
Ошибка вкралась сюда http://ifolder.ru/4525434
Здесь правильный http://ifolder.ru/4525596
Igor Zorkov (2007-12-12 11:23:00) [4]
> @!!ex © (11.12.07 22:45) [8]
Держи WH_CBTHook.rar
http://ifolder.ru/4525434
Старшие товарищи подскажут что я в этом исходнике неправильно написал, если конечно посмотрят его
THandle (2007-12-11 23:48:00) [5]Тут тоже была статья по хукам, по моему даже с какими то примерами.
@!!ex (2007-12-11 22:45:00) [6]Да это я читал. ТАм как раз теория. Примеров то нету.
Igor Zorkov (2007-12-11 22:05:00) [7]
> @!!ex © (11.12.07 22:00) [6]
http://www.rsdn.ru/article/baseserv/winhooks.xml
@!!ex (2007-12-11 22:00:00) [8]> например поставить hook на WH_CBT
а дайте статей на установку хуков, плиз. А то я ничего не нашел конкретного, только общую теорию.
Igor Zorkov (2007-12-11 21:52:00) [9]
> @!!ex © (11.12.07 21:43) [4]
> А появится новое окно, что делать? :)
например поставить hook на WH_CBT или сравнивать в таймере, потом добавлять пункт меню
> И как в данном случае определять Handle окна?
var
Wnd: hWnd;
> А зачем buff?
Вкралось случайно
@!!ex (2007-12-11 21:43:00) [10]> [3] Igor Zorkov © (11.12.07 21:39)
А появится новое окно, что делать? :)
И как в данном случае определять Handle окна?
P.S.
А зачем buff?
Igor Zorkov (2007-12-11 21:39:00) [11]@!!ex © (11.12.07 21:26) [2]
var
Wnd: hWnd;
buff: array[0..127] of Char;
SysMenu : THandle;
begin
Wnd := GetWindow(Handle, gw_HWndFirst);
while Wnd 0 do
begin
Wnd:= GetWindow(Wnd, gw_hWndNext);
SysMenu := GetSystemMenu(Wnd, False);
AppendMenu(SysMenu, mf_SEPARATOR, 0, #0);
AppendMenu(SysMenu, mf_BYPOSITION, My_MenuItem, 'Íîâûé ïóíêò');
end;
end;
@!!ex (2007-12-11 21:26:00) [12]> [1] Igor Zorkov © (11.12.07 21:25)
Да я уже разобрался.
Вот теперь копаю как на ВСЕ окна модифицированное меню сунуть.
Igor Zorkov (2007-12-11 21:25:00) [13]SysMenu := GetSystemMenu(
Handle, False);