Вопрос Как проверить установлена ли игра, если да, то заменить свойство кнопки?

zettend

Старожил
Здравствуйте.
Требуется проверить игру через реестр, если она там есть, то передать путь до EXE с реестра в кнопку и заменить её свойства с Next на "команду запуска".
Кнопка отрисовывается так:
Код:
hNextBtn := TButtonCreate(WizardForm.Handle, 385,339,100,46, 'btn_Meh.png', BtnFont.Handle, CustomMessage('ButtonNext'), 'SoundEnterPlay', 'WizardFormBtnClick');
 

Shegorat

Lord of Madness
Администратор
Incorrect
Нужно смотреть обработчик клика на кнопку.
Далее, для проверки ключа в реестре есть функции
Код:
function RegValueExists(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean;
function RegQueryStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean;
Первая проверяет значение в реестре, вторая получает строковое значение.
С помощью них можно реализовать требуемое
 

Nemko

Дилетант
Модератор
Incorrect, пример с блокнотом:

Код:
[Setup]
AppName=Exp
AppVersion=0.1
CreateAppDir=no

[Files]
Source: Files\*; Flags: dontcopy

[CustomMessages]
btnRun=Запуск

[Modules]
#include "Modules\botva2.iss"

[Code]
//-[ Header ]----------------------------------------------------------------------------------------------------------------------------------------
var
  GameIstall: Boolean;
  ResultReg: String;

function TButtonCreate(h: hWnd; X, Y, Width, Height: Integer; FileName: PAnsiChar; BtnFont: hWnd; Text: String; Proc: TBtnEventProc): HWND;
begin
  Result:=BtnCreate(h, ScaleX(X), ScaleY(Y), ScaleX(Width), ScaleY(Height), FileName, 0, False);
  if Proc <> nil then BtnSetEvent(Result, BtnClickEventID, WrapBtnCallback(Proc, 1));
  BtnSetFont(Result, BtnFont);
  BtnSetText(Result, Text);
end;

procedure CheckGame(RootKey: Integer; SubKeyName, ValueName: String);
begin
  GameIstall:=RegQueryStringValue(RootKey, SubKeyName, ValueName, ResultReg);
  StringChange( ResultReg, '%ProgramFiles%', ExpandConstant('{pf}'));
  StringChange( ResultReg, '"', '');
end;

procedure NextBtnClick(h: hWnd);
var
  ResultCode: Integer;
begin
with WizardForm do begin
  if CurPageID <> wpWelcome then NextButton.Click
  else begin
    if GameIstall then begin
      Exec(ResultReg, '', '', SW_SHOW, ewNoWait, ResultCode);
      WizardForm.Close;
    end else NextButton.Click;
  end;
 end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Cancel:=True;
  if CurPageID = wpWelcome then Confirm:=not GameIstall;
end;

//-[ Code ]------------------------------------------------------------------------------------------------------------------------------------------
var
  hNextBtn: HWND;

function InitializeSetup: Boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
  if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll')) then ExtractTemporaryFile('CallbackCtrl.dll');
  Result:=True;
end;


procedure InitializeWizard;
begin
with WizardForm do begin
  NextButton.Width:=ScaleX(0); NextButton.TabStop:=False;
  //
  CheckGame(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WORDPAD.EXE', '');
  hNextBtn:=TButtonCreate(Handle, 317, 328, 80, 21, 'button.png', NextButton.Font.Handle, '', @NextBtnClick);
  //
 end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if GameIstall then begin
    BtnSetText(hNextBtn, CustomMessage('btnRun'));
    WizardForm.WelcomeLabel1.Caption:='Блокнот найден.';
    WizardForm.WelcomeLabel2.Caption:='Что бы запустить блокнот, жмакай "Запуск"';
  end else BtnSetText(hNextBtn, PAnsiChar(WizardForm.NextButton.Caption));
end;

procedure DeinitializeSetup;
begin
  gdipShutdown;
end;
 

Вложения

  • 24.7 KB Просмотры: 8
Сверху