
27.01.2015, 00:48
|
 |
Начинающий
|
|
Регистрация: 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;
|