Tapas77789
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору [Setup] AppName=My Program AppVerName=My Program v 1.5 DefaultDirName={pf}\My Program OutputDir=. [Languages] Name: ru; MessagesFile: "compiler:Languages\Russian.isl" [code] #define A = (Defined UNICODE) ? "W" : "A" const GWL_WNDPROC = -4; WM_SYSCOMMAND = $0112; MF_BYPOSITION = $400; MF_SEPARATOR = $800; MyIDT = 99; var OldProc: Longint; function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall delayload'; function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall delayload'; function AppendMenu(hMenu: HMENU; uFlags, uIDNewItem: UINT; lpNewItem: String): BOOL; external 'AppendMenu{#A}@user32.dll stdcall'; function DeleteMenu(hMenu: Thandle; uPosition: Longword; uFlags: Longword): Boolean; external 'DeleteMenu@user32.dll stdcall'; function GetSystemMenu(hWnd: HWND; bRevert: BOOL): HMENU; external 'GetSystemMenu@user32.dll stdcall'; procedure AboutSetupClick; begin //здесь обрабатываем нажатие на пункт меню "О.Репаке" MsgBox('bla-bla-bla', mbInformation, MB_OK); end; function WFProc(h: hwnd; Msg, wParam, lParam: Longint): Longint; begin if (Msg = WM_SYSCOMMAND) then begin if(wParam = MyIDT) then begin AboutSetupClick; end; result:=0; end; Result := CallWindowProc(OldProc, h, Msg, wParam, lParam); end; procedure InitializeWizard(); var SysMenu: HMENU; begin SysMenu := GetSystemMenu(Wizardform.Handle, False); DeleteMenu(SysMenu, 8, MF_BYPOSITION); AppendMenu(SysMenu, 0, MyIDT, 'О.Репаке'); OldProc:=SetWindowLong(WizardForm.Handle, GWL_WNDPROC, CallbackAddr('WFProc')); end; procedure DeinitializeSetup(); begin SetWindowLong(WizardForm.Handle, GWL_WNDPROC, OldProc); end; |