[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; WM_USER = $0400; 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('Здесь могла бы быть ваша реклама', mbInformation, MB_OK); end; procedure MenuSetupClick; begin //здесь обрабатываем нажатие на пункт меню "O RePack" MsgBox('bla-bla-bla', mbInformation, MB_OK); end; function WFWndProc(h:HWND;Msg,wParam,lParam:Longint):Longint; begin if (Msg=WM_SYSCOMMAND) then begin if(wParam=9999) then begin AboutSetupClick; Result:=0; end; if(wParam=MyIDT) then begin MenuSetupClick; Result:=0; end; end else begin if Msg=$0002 then SetWindowLong(WizardForm.Handle,-4,OldProc); Result:=CallWindowProc(OldProc,h,Msg,wParam,lParam); end; 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('WFWndProc')); end; procedure DeinitializeSetup(); begin SetWindowLong(WizardForm.Handle, GWL_WNDPROC, OldProc); end; |