Форум: "Начинающим";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];
ВнизОкно в котором нажа пункт меню. Как узнать? Найти похожие ветки
← →
@!!ex © (2007-12-11 20:47) [0]Нашел такйо код:
{Добавление своих пунктов меню в системное меню окна}
{поместите
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 окна, в меню которого кликнули.
← →
Igor Zorkov © (2007-12-11 21:25) [1]SysMenu := GetSystemMenu(
Handle
, False);
← →
@!!ex © (2007-12-11 21:26) [2]> [1] Igor Zorkov © (11.12.07 21:25)
Да я уже разобрался.
Вот теперь копаю как на ВСЕ окна модифицированное меню сунуть.
← →
Igor Zorkov © (2007-12-11 21:39) [3]@!!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:43) [4]> [3] Igor Zorkov © (11.12.07 21:39)
А появится новое окно, что делать? :)
И как в данном случае определять Handle окна?
P.S.
А зачем buff?
← →
Igor Zorkov © (2007-12-11 21:52) [5]
> @!!ex © (11.12.07 21:43) [4]
> А появится новое окно, что делать? :)
например поставить hook на WH_CBT или сравнивать в таймере, потом добавлять пункт меню
> И как в данном случае определять Handle окна?var
Wnd: hWnd;
> А зачем buff?
Вкралось случайно
← →
@!!ex © (2007-12-11 22:00) [6]> например поставить hook на WH_CBT
а дайте статей на установку хуков, плиз. А то я ничего не нашел конкретного, только общую теорию.
← →
Igor Zorkov © (2007-12-11 22:05) [7]
> @!!ex © (11.12.07 22:00) [6]
http://www.rsdn.ru/article/baseserv/winhooks.xml
← →
@!!ex © (2007-12-11 22:45) [8]Да это я читал. ТАм как раз теория. Примеров то нету.
← →
THandle © (2007-12-11 23:48) [9]Тут тоже была статья по хукам, по моему даже с какими то примерами.
← →
Igor Zorkov © (2007-12-12 11:23) [10]
> @!!ex © (11.12.07 22:45) [8]
Держи WH_CBTHook.rar
http://ifolder.ru/4525434
Старшие товарищи подскажут что я в этом исходнике неправильно написал, если конечно посмотрят его
← →
Igor Zorkov © (2007-12-12 11:34) [11]
> Igor Zorkov © (12.12.07 11:23) [10]
Ошибка вкралась сюда http://ifolder.ru/4525434
Здесь правильный http://ifolder.ru/4525596
← →
@!!ex © (2007-12-12 11:49) [12]> [10] Igor Zorkov © (12.12.07 11:23)
Спасибо! Буду разбираться.
← →
@!!ex © (2007-12-12 11:50) [13]> [11] Igor Zorkov © (12.12.07 11:34)
А что за ошибка? вроде работает..
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.01.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c