Показать сообщение отдельно
  #8  
Старый 27.01.2015, 00:48
Аватар для Alloc
Alloc Alloc вне форума
Начинающий
 
Регистрация: 17.09.2014
Сообщения: 104
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Давайте, чтобы не ходить вокруг да около, я выставлю код небольшой программы которую делаю, чтобы вы имели представление о чем идет речь.

Прошу поправить меня или посоветовать как сделать его (код) лучше. Буду очень признателен за помощь. Еще раз спасибо тем кто откликнулся!

Как она выглядит

Собственно сам код:

Код:
//Процедура которая устанавливает совместимость игры ("Revenant.exe") с Win95,98,XP (rb1, rb2, rb3)
procedure RegIt(Param: string; AddDel: Boolean);
var
  Registry: TRegistry;
begin
  Registry := TRegistry.Create;
  Registry.RootKey := HKEY_CURRENT_USER;
  Registry.OpenKey('Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers', True);
  if AddDel = True then Registry.WriteString(ExtractFilePath(ParamStr(0))+'Revenant.exe', Param);
  if AddDel = False then Registry.DeleteValue(ExtractFilePath(ParamStr(0))+'Revenant.exe');
  Registry.CloseKey;
  Registry.Free;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  Ini: Tinifile;
begin
  RenameFile('wdraw.dll','ddraw.dll'); // Переименовываем файл при выходе.

  if rb1.Checked = True then RegIt('', False); //Убираем совместимость с Win95
  if rb2.Checked = True then RegIt('', False); //Убираем совместимость с Win98
  if rb3.Checked = True then RegIt('', False); //Убираем совместимость с WinXP

//Сохраняем в .ini отмеченные опции
  Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'Revenant.ini');
  Ini.WriteBool('Launcher','SingleCPU',chk1.Checked); //Run Game on single CPU
  Ini.WriteBool('Launcher','UseWineD3D',chk2.Checked); //Use WineD3D (override system ddraw library)
  Ini.WriteBool('Launcher','CompMode95',rb1.Checked); //Win95
  Ini.WriteBool('Launcher','CompMode98',rb2.Checked); //Win98
  Ini.WriteBool('Launcher','CompModeXP',rb3.Checked); //WinXP
  Ini.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  Ini: Tinifile;
begin
  RenameFile('ddraw.dll','wdraw.dll'); // Переименовываем файл при входе.

//Загружаем из .ini отмеченные опции
  Ini:=TiniFile.Create(extractfilepath(paramstr(0))+'Revenant.ini');
  chk1.Checked:=Ini.ReadBool('Launcher','SingleCPU',False); //Run Game on single CPU
  chk2.Checked:=Ini.ReadBool('Launcher','UseWineD3D',False); //Use WineD3D (override system ddraw library)
  rb1.Checked:=Ini.ReadBool('Launcher','CompMode95',False); //Win95
  rb2.Checked:=Ini.ReadBool('Launcher','CompMode98',True); //Win98
  rb3.Checked:=Ini.ReadBool('Launcher','CompModeXP',False); //WinXP
  Ini.Free;
end;

//Кнопка запуска Игры (Run Game)
procedure TForm1.btn1Click(Sender: TObject);
begin
//Если отпечена опция "Use WineD3D (override system ddraw library)" то переименовываем файл
  if chk2.Checked = True then
     RenameFile('wdraw.dll','ddraw.dll');

//Если отмечена одна из опций "Win95,98,XP" тогда ставим соответствующую совместимость игре
  if rb1.Checked = True then RegIt('WIN95 RunAsAdmin DisableNXShowUI', True);
  if rb2.Checked = True then RegIt('WIN98 RunAsAdmin DisableNXShowUI', True);
  if rb3.Checked = True then RegIt('WINXPSP3 RunAsAdmin DisableNXShowUI', True);

//Если отмечена опция "Run Game on single CPU" запускаем игру на одном Ядре процессора.
  if chk1.Checked = True then
     WinExec(Pchar('cmd.exe /c start /affinity 1 Revenant.exe'), SW_HIDE)
  else //Иначе просто запускаем
     WinExec(Pchar('Revenant.exe'), SW_SHOW);
//Я выбрал именно WinExec потому, что только с ней у меня получилось запустить скрытно cmd.exe и задать параметры (cmd.exe /c start /affinity 1 Revenant.exe) для запуска игры
end;
Ответить с цитированием