Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Окно в котором нажа пункт меню. Как узнать?


@!!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);


Наверх

Титульная страница Поиск, карта сайта Написать письмо