Forslay
Junior Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Здравствуйте Уважаемые пользователи и профессионалы по использованию программы Inno Setup 5XX. ============== Я У вас новенький... У меня есть большая просьба - отнестись к моей просьбе очень отзывчиво, и главное что бы был результат. ============== Некоторые азы, я вроде бы изучил, но в создании профессиональной инсталляционной системы, умения у меня ещё пока не хватает. ==================== У меня есть игровой проект, заключается он в модификации Counter-Strike 1.6. То есть я делаю собственную сборку игры с некоторыми изменениями, ради интереса, перечисляю: > Собственная полная русификация > Изменение GUI, VGUI меню на более удобное > Собственный забиндённый конфиг > Отредактированный профиль ботов > Постоянное обновление исполнителей и их библиотек от Steam > А так же эмуляция Steam [Взлом Листен сервера] =================================== Это самый важный список изменений, отличающийся от стандартной CS с патчем. ==================== Раньше я запаковывал проект в программу Smart Install Maker, но когда понял, что мне не хватает возможностей, сразу же обратился к Inno Setup. ======================== На 19.06.07 - намечен новый выпуск CS. И для этого я хочу создать профессиональный красочный инсталлятор: > Встроенная mp3 музыка + клавиши управления. > Красивая Оболочка > Выбор русской и английской версии > (Снизу где пишеться Forslay Inc * 2007, что бы эту примочка была активна, при нажатии на неё - была переадресация на мой E-Mail. > Хорошая заставка! Желательно какое нить слайд шоу! Сдесь я перечислил всё, что покамись не в моих знаниях, умениях! Времени на изучение информации катострафически мало! ====== У меня есть уже полу-готовый скрипт к инсталляции Цитата: [Setup] AppName=Counter-Strike AppVerName=Counter-Strike 1.6 AppPublisher=Forslay Inc, 2007 © AppPublisherURL=http://ataka.muravlenko.ru:8080/ AppSupportURL=http://ataka.muravlenko.ru:8080/ AppUpdatesURL=http://ataka.muravlenko.ru:8080/ DefaultDirName={pf}\Counter-Strike DefaultGroupName=Counter-Strike AllowNoIcons=yes LicenseFile=C:\Program Files\Inno Setup 5\license.rtf InfoBeforeFile=C:\Program Files\Inno Setup 5\Info-1.rtf InfoAfterFile=C:\Program Files\Inno Setup 5\Info-2.rtf OutputDir=C:\Documents and Settings\Forslay\Рабочий стол OutputBaseFilename=CS SetupIconFile=D:\Разроботка\Client\Примочки\Иконки\ICO\steam orb.ico Compression=lzma SolidCompression=no WindowVisible=no UserInfoPage=yes WizardImageFile=Logo.bmp WizardSmallImageFile=Forslay.bmp [Registry] Root: HKCU; SubKey: Software\Valve\Half-Life\cstrike\Settings; ValueType: string; ValueName: User Token 2; ValueData: Root: HKCU; SubKey: Software\Valve\Half-Life\cstrike\Settings; ValueType: string; ValueName: User Token 3; ValueData: Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: string; ValueName: EngineDLL; ValueData: hw.dll Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: string; ValueName: User Token 2; ValueData: Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: string; ValueName: User Token 3; ValueData: Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: ScreenWindowed; ValueData: $00000000 Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: CrashInitializingVideoMode; ValueData: $00000000 Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: ScreenWidth; ValueData: $00000400 Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: ScreenHeight; ValueData: $00000300 Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: ScreenBPP; ValueData: $00000020 Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: string; ValueName: ValveKey; ValueData: AAAAA-AAAAA-AAAAA-AAAAA-AAAAA Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: EngineD3D; ValueData: $00000000 Root: HKCU; SubKey: Software\Valve\Steam; ValueType: string; ValueName: LastContentProviderURL; ValueData: http://forslay.clan.su/cstrike/gfx/steam_banner.html Root: HKCU; SubKey: Software\Valve\Steam; ValueType: string; ValueName: Language; ValueData: English Root: HKCU; SubKey: Software\Valve\Steam; ValueType: string; ValueName: Rate; ValueData: 25000 Root: HKCU; SubKey: Software\Valve\Steam; ValueType: string; ValueName: LastGameNameUsed; ValueData: Game CS by: sX89 Clan * Forslay Inc. [Languages] Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" [Messages] BeveledLabel=Forslay Inc, 2007 ©. [CustomMessages] UninstallProgram=Удаление %1 [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] Source: "C:\Counter-Strike\hl.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "C:\Counter-Strike\*"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\Program Files\Inno Setup 5\ISTask.dll"; DestDir: "{tmp}"; Flags: dontcopy Source: "C:\Program Files\Inno Setup 5\splash.bmp"; DestDir: "{tmp}"; Flags: dontcopy Source: "C:\Program Files\Inno Setup 5\splash.wav"; DestDir: "{tmp}"; Flags: dontcopy Source: compiler:callnsis.dll; Flags: dontcopy noencryption Source: compiler:get_hw_caps.dll; Flags: dontcopy noencryption Source: compiler:AdvSplash.dll; Flags: dontcopy noencryption Source: compiler:isxbb.dll; Flags: dontcopy noencryption [Code] //////////Проверка системных требований const NeedSize = 400; //Прописать, сколько мегабайт необходимо DRIVE_UNKNOWN = 0; DRIVE_NO_ROOT_DIR = 1; DRIVE_REMOVEABLE = 2; DRIVE_FIXED = 3; DRIVE_REMOTE = 4; DRIVE_CDROM = 5; DRIVE_RAMDISK = 6; //Все эффекты анимации AW_FADE_IN = $00080000; AW_FADE_OUT = $00090000; AW_SLIDE_IN_LEFT = $00040001; AW_SLIDE_OUT_LEFT = $00050002; AW_SLIDE_IN_RIGHT = $00040002; AW_SLIDE_OUT_RIGHT = $00050001; AW_SLIDE_IN_TOP = $00040004; AW_SLIDE_OUT_TOP = $00050008; AW_SLIDE_IN_BOTTOM = $00040008; AW_SLIDE_OUT_BOTTOM = $00050004; AW_DIAG_SLIDE_IN_TOPLEFT = $00040005; AW_DIAG_SLIDE_OUT_TOPLEFT = $0005000A; AW_DIAG_SLIDE_IN_TOPRIGHT = $00040006; AW_DIAG_SLIDE_OUT_TOPRIGHT = $00050009; AW_DIAG_SLIDE_IN_BOTTOMLEFT = $00040009; AW_DIAG_SLIDE_OUT_BOTTOMLEFT = $00050006; AW_DIAG_SLIDE_IN_BOTTOMRIGHT = $0004000A; AW_DIAG_SLIDE_OUT_BOTTOMRIGHT = $00050005; AW_EXPLODE = $00040010; AW_IMPLODE = $00050010; /////////// MB_ICONINFORMATION = $40; MB_ICONEXCLAMATION = $30; MB_ICONQUESTION = $20; MB_ICONSTOP = $10; MB_ICONNONE = $0; function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall'; var ListBox: TListBox; function AnimateWindow(hWnd: HWND; dwTime: DWORD; dwFlags: DWORD): Boolean; external 'AnimateWindow@user32 stdcall'; procedure ListBoxOnClick(Sender: TObject); var NewLetter, OldString: String; i: Integer; begin for i:= 0 to ListBox.Items.Count-1 do begin if ListBox.Selected[i] then begin NewLetter:= Copy(ListBox.Items[i], 0, 1); OldString:= Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text)); WizardForm.DirEdit.Text:= NewLetter + OldString; end; end; end; function GetLogicalDrives: DWORD; external 'GetLogicalDrives@kernel32.dll stdcall'; function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall'; function GetVideoCardName(): PChar; external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall'; function GetSoundCardName(): PChar; external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall'; function DetectHardware(): Integer; external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall'; function GetHardDriveFreeSpace(hdd: integer): Integer; external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall'; function GetHardDriveName(hdd: integer): PChar; external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall'; function GetHardDriveTotalSpace(hdd: integer): Integer; external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall'; function GetHardDrivesCount(): Integer; external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall'; function GetSoundCards(): Integer; external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall'; function GetSystemPage(): Integer; external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall'; function GetSystemPhys(): Integer; external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall'; function GetVidMemLocal(): Integer; external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall'; function GetVidMemNonLocal(): Integer; external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall'; function GetVideoCardDev(): Integer; external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall'; function GetVideoCardVen(): Integer; external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall'; function DelSp(const s:string):string;// функция удаления пробелов в начале строки var c, i: integer; stt, st, st1: string; begin c := 0; st := s; for i := 1 to Length(st) do begin stt := copy(st, i, 1); if (stt = ' ') and (c >= 1) then begin st1 := st1; c := c + 1; end else if (stt = ' ') and (c = 0) then begin c := c + 1; st1 := st1 + stt; end else if (stt <> ' ') then begin c := 0; st1 := st1 + stt; end end; Result:= st1; end; function CheckSystemPage(PreviousPageId: Integer): Integer; var Page: TWizardPage; ProcessorName:string; Processor,VideoCardPanel,AudioCardPanel,RAMPanel,PageFilePanel: TPanel; ProcessorNamePanel,VideoCardNamePanel,AudioCardNamePanel,RAMTotalPanel,PageFileTotalPanel: TPanel; ProcessorMHZ: Cardinal; StaticText,StaticText2:TNewStaticText; VidRam:integer; begin RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0','ProcessorNameString', ProcessorName); RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0','~MHz', ProcessorMHZ); GetVidMemLocal; GetSoundCards; Page := CreateCustomPage(PreviousPageId,'Апаратное Обеспечение','Программа установки обнаружила следуюшие необходимые компоненты'); StaticText:=TNewStaticText.Create(Page); with StaticText do begin Parent:=Page.Surface; Caption:='Все компоненты удовлетворяют требованиям игры.'; Left:=0; Top:=5; AutoSize:=True; end; StaticText2:=TNewStaticText.Create(Page); with StaticText2 do begin Parent:=Page.Surface; Caption:='Когда будете готовы продолжить установку, нажмите Далее' Left:=0; Top:=220; AutoSize:=True; end; Processor := TPanel.Create(Page); with Processor do begin Parent := Page.Surface; Caption := ' Ваш процессор'; Left := ScaleX(0); Top := ScaleY(32); alignment:=taLeftJustify; Width := ScaleX(121); Height := ScaleY(25); BevelInner := bvLowered; TabOrder := 0; end; ProcessorNamePanel := TPanel.Create(Page); with ProcessorNamePanel do begin Parent := Page.Surface; Caption :=DelSP(ProcessorName)+' '+IntToStr(ProcessorMHZ)+'MHz' ; //новое обработанное значение строки // Caption :=ProcessorName+' '+IntToStr(ProcessorMHZ)+'MHz' ; Left := ScaleX(128); Top := ScaleY(32); alignment:=taLeftJustify; Width := ScaleX(281); Height := ScaleY(25); BevelInner := bvLowered; Color :=$ccffcc; TabOrder := 1; end; if ProcessorMHZ<1800then begin ProcessorNamePanel.Color:=clRed; StaticText.Caption:='Не все компоненты удовлетворяют требованиям игры.'; end; VideoCardPanel:=TPanel.Create(Page); with VideoCardPanel do begin Parent:=Page.Surface; Caption:=' Ваша видеокарта'; Left:=ScaleX(0); alignment:=taLeftJustify; Top:=Processor.Top+27; Width:=ScaleX(121); Height:=ScaleY(25); BevelInner:=bvLowered; TabOrder:=0; end; VideoCardNamePanel:=TPanel.Create(Page); with VideoCardNamePanel do begin Parent:=Page.Surface; Caption:=' '+GetVideoCardName; //+' ОЗУ-'+inttostr(round(GetVidMemLocal/1000000))+' МБ'; //Caption:=' ОЗУ-'+inttostr(GetVidMemLocal)+' МБ'; VidrAM:= GetVidMemLocal/1000000; if VidRam>127 then begin if VidRam<200 then Caption:=Caption+' 128 МB' else if VidRam<300 then Caption:=Caption+' 256 МB' else if VidRam<400 then Caption:=Caption+' 384 МB' else if VidRam>500 then Caption:=Caption+' 512 МB'; end; Left:=ScaleX(128); Top:=VideoCardPanel.Top; alignment:=taLeftJustify; Width:=ScaleX(281); Height:=ScaleY(25); BevelInner:=bvLowered; Color :=$ccffcc; TabOrder:=1; end; if GetVidMemLocal<127000000 then //128MB begin StaticText.Caption:='Не все компоненты удовлетворяют требованиям игры.'; VideoCardNamePanel.Color:=clRed; end; AudioCardPanel:=TPanel.Create(Page); with AudioCardPanel do begin Parent:=Page.Surface; Caption:=' Ваша звуковая карта'; Left:=ScaleX(0); Top:=VideoCardPanel.Top+27; alignment:=taLeftJustify; Width:=ScaleX(121); Height:=ScaleY(25); BevelInner:=bvLowered; TabOrder:=0; end; AudioCardNamePanel:=TPanel.Create(Page); with AudioCardNamePanel do begin Parent:=Page.Surface; Caption:=' '+GetSoundCardName; Left:=ScaleX(128); alignment:=taLeftJustify; Top:=AudioCardPanel.Top; Width:=ScaleX(281); Height:=ScaleY(25); BevelInner:=bvLowered; TabOrder:=1; Color :=$ccffcc; end; if GetSoundCards=0 then begin StaticText.Caption:='Не все компоненты удовлетворяют требованиям игры.'; AudioCardNamePanel.Color:=clRed; end; RAMPanel:=TPanel.Create(Page); with RAMPanel do begin Parent:=Page.Surface; Caption:=' Оперативная память' Left:=0; Top:=AudioCardPanel.Top+27; alignment:=taLeftJustify; Width:=ScaleX(121); Height:=ScaleY(25); BevelInner:=bvLowered; TabOrder:=0; end; RAMTotalPanel:=TPanel.Create(Page); with RAMTotalPanel do begin Parent:=Page.Surface; Caption:=' '+IntToStr(GetSystemPhys+1) +' MB' Left:=AudioCardNamePanel.Left; Top:=RAMPanel.Top; alignment:=taLeftJustify; Width:=AudioCardNamePanel.Width; Height:=ScaleY(25); BevelInner:=bvLowered; TabOrder:=1; Color :=$ccffcc; end; if GetSystemPhys+1<256 then begin RAMTotalPanel.Color:=clRed; StaticText.Caption:='Не все компоненты удовлетворяют требованиям игры.'; end; PageFilePanel:=TPanel.Create(Page); with PageFilePanel do begin Parent:=Page.Surface; Caption:=' Ваш файл подкачки'; alignment:=taLeftJustify; Left:=0; Top:=RAMPanel.Top+27; Width:=RAMPanel.Width; Height:=ScaleY(25); BevelInner:=bvLowered; TabOrder:=0; end; PageFileTotalPanel:=TPanel.Create(Page); with PageFileTotalPanel do begin Parent:=Page.Surface; Caption:=' '+IntToStr(GetSystemPage)+' MB'; Left:=RAMTotalPanel.Left; Top:=PageFilePanel.Top; alignment:=taLeftJustify; Width:=RAMTotalPanel.Width; Height:=ScaleY(25); BevelInner:=bvLowered; TabOrder:=1; Color :=$ccffcc; end; if GetSystemPage<800 then begin PageFileTotalPanel.Color:=clRed; StaticText.Caption:='Не все компоненты удовлетворяют требованиям игры.'; end; Result := Page.ID; end; ////////////////// var KeyPage: TInputQueryWizardPage; ProgressPage: TOutputProgressWizardPage; function NextButtonClick(CurPageID: Integer): Boolean; var I: Integer; begin Result := True; if CurPageID = KeyPage.ID then begin ProgressPage.SetText('Проверка введенного пароля...', ''); ProgressPage.SetProgress(0, 0); ProgressPage.Show; try for I := 0 to 10 do begin ProgressPage.SetProgress(I, 10); Sleep(100); end; finally ProgressPage.Hide; end; if KeyPage.Values[0] = 'Forslay Inc' then Result := True else begin MsgBox('Пароль не прошёл валидатность. Пожалуйста введите правильный пароль.', mbError, MB_OK); Result := False; end; end else Result := True; end; function GetSystemMetrics(nIndex:Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall'; procedure callplug(parentwnd: Integer; pluginname,funcname,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10: PChar); external 'callplug@files:callnsis.dll stdcall'; procedure AboutButtonOnClick(Sender: TObject); begin MsgBox('Для регестрации данной копии игры, обратитесь к автору даннной модификации.', mbInformation, mb_Ok); MsgBox('Если Вы хотите это сделать сейчас, то обратитесь к автору [Forslay] следующими путями.', mbInformation, mb_Ok); MsgBox('ICQ номер: 483-064-648', mbInformation, mb_Ok); MsgBox('E-Mail: Forslay@inbox.ru', mbInformation, mb_Ok); MsgBox('Либо позвоните ему на сотовый прямо сейчас: +79091954089, а так же домашний: +73493824329', mbInformation, mb_Ok); MsgBox('После того как свяжитесь, сообщите свои данные: Имя и Фамилию, а так же Организацию', mbInformation, mb_Ok); end; procedure URLLabelOnClick(Sender: TObject); var ErrorCode: Integer; begin ShellExec('open', 'http://ataka.muravlenko.ru:8080', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); end; procedure DirOnClick(Sender: TObject); var res: Boolean; UserSelectDir: string; begin UserSelectDir := WizardForm.DirEdit.Text; res := BrowseForFolder('Выберите директорию для установки и нажмите ''ОК''', UserSelectDir, True); if res then begin WizardForm.DirEdit.Text := UserSelectDir; end; end; procedure InitializeWizard(); var AboutButton, CancelButton: TButton; URLLabel: TNewStaticText; BackgroundBitmapImage: TBitmapImage; BackgroundBitmapText: TNewStaticText; begin CheckSystemPage(wplicense) CancelButton := WizardForm.CancelButton; AboutButton := TButton.Create(WizardForm); AboutButton.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width; AboutButton.Top := CancelButton.Top; AboutButton.Width := CancelButton.Width; AboutButton.Height := CancelButton.Height; AboutButton.Caption := 'Регестрация'; AboutButton.OnClick := @AboutButtonOnClick; AboutButton.Parent := WizardForm; URLLabel := TNewStaticText.Create(WizardForm); URLLabel.Caption := 'Сайт проекта'; URLLabel.Cursor := crHand; URLLabel.OnClick := @URLLabelOnClick; URLLabel.Parent := WizardForm; URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline]; URLLabel.Font.Color := clBlue; URLLabel.Top := AboutButton.Top + AboutButton.Height - URLLabel.Height - 2; URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(20); BackgroundBitmapImage := TBitmapImage.Create(MainForm); BackgroundBitmapImage.Left := 50; BackgroundBitmapImage.Top := 90; BackgroundBitmapImage.AutoSize := True; BackgroundBitmapImage.Bitmap := WizardForm.WizardBitmapImage.Bitmap; BackgroundBitmapImage.Parent := MainForm; BackgroundBitmapText := TNewStaticText.Create(MainForm); BackgroundBitmapText.Left := BackgroundBitmapImage.Left; BackgroundBitmapText.Top := BackgroundBitmapImage.Top + BackgroundBitmapImage.Height + ScaleY(8); BackgroundBitmapText.Caption := 'TBitmapImage'; BackgroundBitmapText.Parent := MainForm; KeyPage := CreateInputQueryPage(wpWelcome, 'Персональная информация', 'Какой пароль необходим для продолжения?', 'Вы должны ввести пароль, который позволит дальнейший ход выполнения установочных действий. ' + 'Пароль находится в сопутствующем readme.txt.'); KeyPage.Add('Пароль:', False); ProgressPage := CreateOutputProgressPage('Персональная информация', 'Какой пароль необходим для продолжения?'); ExtractTemporaryFile('splash.bmp') ExtractTemporaryFile('splash.wav') ExtractTemporaryFile('AdvSplash.dll') callplug(0,ExpandConstant('{tmp}\AdvSplash.dll'),'show','1500','4000','2500','-1',ExpandConstant('{tmp}\splash'),'','','','','') end; function KillTask(ExeFileName: string): Integer; external 'KillTask@files:ISTask.dll stdcall delayload'; function RunTask(FileName: string; bFullpath: Boolean): Boolean; external 'RunTask@files:ISTask.dll stdcall delayload'; //**************************************************// function InitializeSetup(): Boolean; begin If RunTask('hl.exe', false) then begin if MsgBox('В данный момент запущена игра Counter-Strike, для продолжения установки я её вырублю. Ок?', mbInformation, mb_YesNo) = idYes then begin KillTask('hl.exe'); Result:= True; end else Exit; end; Result:=True; end; procedure CurPageChanged(CurPageID: Integer); begin If CurPageID=wpLicense then begin WizardForm.BackButton.Enabled := False; end else If CurPageID=wpInfoBefore then begin WizardForm.BackButton.Enabled := True; end; end; procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean); var hWnd: Integer; begin Cancel:=False; Confirm:=False; hWnd := StrToInt(ExpandConstant('{wizardhwnd}')); if MessageBox(hWnd, 'Вы действительно хотите отменить установку игры?', 'Выход из установки', MB_YESNO or $0) = idYes then Cancel:=true; end; function CheckSerial(Serial: String): Boolean; var mask:string; i:Integer; begin Result:=True; mask:='####-####-##****'; If Length(Serial)<>Length(mask) then begin Result:=False; exit; end; For i:=1 to Length(mask) do begin If StrGet(mask, i)='#' then If not ((Ord(StrGet(Serial, i))>=48) and (Ord(StrGet(Serial, i))<=57)) then begin Result:=False; exit; end; If StrGet(mask, i)='*' then If not ((StrGet(Serial, i)>='A') and (StrGet(Serial, i)<='Z')) then begin Result:=False; exit; end; end; end; //////////////Нажатия на Beveled procedure BevelLabelOnClick(Sender: TObject); var ErrorCode: Integer; begin ShellExec('open', 'http://www.chuvakstepan.xost.ru', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); end; /////////////////////////// //////////////Нажатия на Chuvakstepan Inc procedure LabelCOMP(Sender: TObject); var hWnd: Integer; begin MessageBox(hWnd, 'Что ты хотел, нажав на эту штуку?', 'Выход из установки', MB_OK or $0) end; /////////////////////////// [Icons] Name: "{group}\Counter-Strike"; Filename: "{app}\hl.exe" Name: "{group}\{cm:ProgramOnTheWeb,Counter-Strike}"; Filename: "http://ataka.muravlenko.ru:8080/" Name: "{group}\{cm:UninstallProgram,Counter-Strike}"; Filename: "{uninstallexe}" Name: "{commondesktop}\Counter-Strike"; Filename: "{app}\hl.exe"; Tasks: desktopicon Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Counter-Strike"; Filename: "{app}\hl.exe"; Tasks: quicklaunchicon [Run] Filename: "{app}\hl.exe"; Description: "{cm:LaunchProgram,Counter-Strike}"; Flags: shellexec postinstall skipifsilent | Поэтому прошу Вашей помощи! Профессионалы! Пожалуйста срочно помогите мне!!!!! Я уже просто незнаю на что надееться! У самого ни чо невыходит . Очень буду благодарен! Заранее Спасибо!!!!!! | Всего записей: 181 | Зарегистр. 15-06-2007 | Отправлено: 17:07 15-06-2007 | Исправлено: Forslay, 17:30 15-06-2007 |
|