Оценить:
 Рейтинг: 0

Иcпользование API на Delphi 7

Год написания книги
2012
<< 1 ... 7 8 9 10 11 12 13 14 15 >>
На страницу:
11 из 15
Настройки чтения
Размер шрифта
Высота строк
Поля

hook(true); // Устанавливаем наш перехватчик событий Windows

p:=GetMenu(h); // Верхнее меню

// Меняем название пункта в верхнем меню "Справка"

ModifyMenu(p, 2, MF_BYPOSITION, GetMenuItemID(p,2), '-TSN-' );

pp:= GetSubMenu(p,2); // Подпункты в верхнем меню (с нуля отсчет)

// Меняем название подпункта в подменю "Справка -> О программе"

ModifyMenu(pp, 2, MF_BYPOSITION, GetMenuItemID(pp,2) , 'About Sergius …' );

// Добавляем новый элемент подменю с идентификатором IDM_TSN

AppendMenu(pp, MF_STRING ,IDM_TSN, 'А это новый пункт !');

DrawMenuBar(h); // Прорисовываем модифицированное меню

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

{ при закрытии формы – освобождаем Hook }

var h: HWND;

begin

hook(false); // Деактивизируем наш перехватчик событий Windows

h:=FindWindow('SciCalc',nil);

h:=FindWindow('SciCalc',nil); if h<>0 then Postmessage(h,WM_QUIT,0,0);

end;

end.

library HOOK_DLL_TSN;

uses Windows, Messages, SysUtils;

var SysHook: HHook = 0; Wnd: Hwnd = 0;

const IDM_TSN=$C0;

function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;forward;

{Процедура установки HOOK-а}

procedure hook(switch : Boolean) export; stdcall;

begin

if switch=true then

// Устанавливаем хук на сообщения после их обработки в приложении

// Наша процедура захвата называется "SysHook", в данном модуле

SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, HInstance, 0)

else UnhookWindowsHookEx(SysHook);

end;

function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;

{ Обработчик перехвата }

label 1;

var dc: HDC; h, h2: HWND; x: cardinal; ss: string;

begin

{ Если нам не стоит обрабатывать это событие, то и не надо,

передадим упраление следующиму хуку }

if (code<0) or (code<>HC_ACTION) then goto 1;

// Ищем калькулятор, если он не запущен, но отдыхаем …

h:=FindWindow('SciCalc',nil); if h=0 then goto 1;

h2:=GetWindow(h,GW_CHILD); // Нашли окно отображения (табло) у кальулятора

// Если калькулятор не виден, то ничего не надо …

if not IsWindowVisible(h) then goto 1;

// Получаем указатель на текущее обрабатываемое окно, ждем калькулятор

Wnd:=TMsg(Pointer(lParam)^).hwnd;

// Механизм нашей прорисовки на калькуляторе для любого окна
<< 1 ... 7 8 9 10 11 12 13 14 15 >>
На страницу:
11 из 15