Ветеран
Сообщения: 1133
Благодарности: 581
|
Профиль
|
Отправить PM
| Цитировать
Raf-9600,
Попробуйте
Код: 
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom
[Components]
Name: SoundUnit; Description: Описание SoundUnit; Types: full custom
Name: inMPQ; Description: Описание inMPQ; Types: full
[Run]
Filename: {app}\del Ogg [SoundUnit].bat; StatusMsg: Удаление лишних файлов...; Components: SoundUnit; Afterinstall: Ext; Flags: runhidden
[code]
////////////////////////////////////////////
// Данный скрипт прячет чужую программу
////////////////////////////////////////////
type
_TMsg = record
hwnd: HWND;
message: LongWord;
wParam: Longint;
lParam: Longint;
time: LongWord;
pt: TPoint;
end;
const
WM_CLOSE = $0010;
WM_QUIT = $0012;
PM_REMOVE = 1;
// отобpажает или пpячет окно обpазом, указанным паpаметpом CmdShow
function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL; external 'ShowWindow@user32.dll stdcall';
// запускает указанный файл, с параметрами указанными в CmdShow
function WinExec(lpCmdLine: PChar; uCmdShow: Cardinal): Cardinal;
external 'WinExec@kernel32.dll stdcall';
// пpовеpяет очеpедь пpикладной задачи на сообщение и копиpует его в Msg,
// если в очеpеди нет сообщений, функция выполняет немедленный возвpат и пеpедает упpавление Windows.
function PeekMessage(var lpMsg: _TMsg; hWnd: HWND;
wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
// пеpеводит комбинации wm_KeyDown/Up в wm_Char или wm_DeadChar и комбинации wm_SysKeyDown/Up в wm_SysChar или
// wm_SysDeadChar и напpавляет символьное сообщение в очеpедь пpикладной задачи.
function TranslateMessage(const lpMsg: _TMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
// пеpедает в Msg сообщение оконной функции окна
function DispatchMessage(const lpMsg: _TMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';
var
cap_win: string;
_res: Boolean;
// сообщаем, что уже можно запускать RunProg
procedure Ext;
begin
_res:= True;
end;
procedure Application_ProcessMessages;
var
Msg: _TMsg;
begin
while PeekMessage(Msg, WizardForm.Handle, 0, 0, PM_REMOVE) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
procedure RunProg(file, param, capt, mes: string; wait: Boolean);
var
Wnd: THandle;
i, ID: Integer;
begin
cap_win:= capt;
if FileExists(file) = True then // проверям наличие файла рядом с инсталлятором
begin
// показываем своё сообщение
if mes <> '' then WizardForm.StatusLabel.Caption:= mes;
// запускаем файл
ID:= WinExec(AddQuotes(file + param), SW_HIDE);
if ID > 32 then
repeat
if FindWindowByWindowName(capt) > 0 then
begin
Wnd:= FindWindowByWindowName(capt);
ShowWindow(Wnd, SW_HIDE); // прячем программу... :)
Break;
end
else Sleep(10);
i:= i+1;
until (Wnd > 0) or (i = 500) // выходим из цикла, если нашли окно или после пяти секунд
else
begin
MsgBox('Ошибка при запуске файла: ' + ExtractFileName(file), mbInformation, MB_OK);
Exit;
end;
// если надо подождать, то ждём пока программа не закроется...
if wait = True then
while FindWindowByWindowName(capt) > 0 do
Application_ProcessMessages;
WizardForm.StatusLabel.Caption:= WizardForm.StatusLabel.Caption;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
n: Integer;
begin
if (CurStep = ssPostInstall) and (IsComponentSelected('inMPQ')) then
begin
n:= 0;
while _res = False do
begin
n:= n + 1;
Application_ProcessMessages;
if n = 60000 then Break;
end;
RunProg(ExpandConstant('{src}\winmpq\WinMPQ.exe'), // расположение программы
' s Sound.txt', // параметр запуска
'WinMPQ', // заголовок окна программы
'Встраивание озвучки юнитов...', // сообщение в окне мастера
True); // True - ждать завершения программы
end;
end;
|
-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.
Отправлено: 22:52, 08-07-2009
| #1097
|