Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]
Maratina
20-01-2016, 15:40
привет
есть несколько .exe файлов к игре ( игра старая) почему несколько ? каждый под "свое" разрешение экрана, допустим 1280х720, 1280х1024, 1366х768, и тд
возможно ли сделать "автоматический" выбор этого файла в зависимости от разрешения экрана ??
допустим проверить так
function GetDC(HWND: DWord): DWord; external 'GetDC@user32.dll stdcall';
function GetDeviceCaps(DC: DWord; Index: Integer): Integer; external 'GetDeviceCaps@gdi32.dll stdcall';
function ReleaseDC(HWND: DWord;DC: DWord): Integer; external 'ReleaseDC@user32.dll stdcall';
function GetMonitorInfo(MetricType:Byte;Descriptor:THandle) : Word;
var
dc: DWord;
begin
Result:= 0;
case MetricType of
1:
begin
dc:= GetDC(Descriptor);
Result:= GetDeviceCaps(dc,8);
end;
2:
begin
dc:= GetDC(Descriptor);
Result:= GetDeviceCaps(dc,10);
end;
end;
ReleaseDC(Descriptor,dc);
end;
или не получится ? и просто сделать выбор компонентов ?:
sergey3695
21-01-2016, 11:19
Maratina, пример
function Sides: String;
begin
Result:= 'bPillarBox4to3';
if (screen.Width=1024) and (screen.Height=576) then
Result:= 'bPillarBox16to9';
if (screen.Width=1280) and (screen.Height=720) then
Result:= 'bPillarBox16to9';
if (screen.Width=1024) and (screen.Height=576) then
Result:= 'bPillarBox16to9';
if (screen.Width=1366) and (screen.Height=768) then
Result:= 'bPillarBox16to9';
if (screen.Width=1920) and (screen.Height=1080) then
Result:= 'bPillarBox16to9';
if (screen.Width=2048) and (screen.Height=1152) then
Result:= 'bPillarBox16to9';
if (screen.Width=2560) and (screen.Height=1440) then
Result:= 'bPillarBox16to9';
if (screen.Width=2048) and (screen.Height=1152) then
Result:= 'bPillarBox16to9';
if (screen.Width=1280) and (screen.Height=800) then
Result:= 'bPillarBox16to10';
if (screen.Width=1440) and (screen.Height=900) then
Result:= 'bPillarBox16to10';
if (screen.Width=1600) and (screen.Height=1024) then
Result:= 'bPillarBox16to10';
if (screen.Width=1680) and (screen.Height=1050) then
Result:= 'bPillarBox16to10';
if (screen.Width=1920) and (screen.Height=1200) then
Result:= 'bPillarBox16to10';
if (screen.Width=2560) and (screen.Height=1600) then
Result:= 'bPillarBox16to10';
if (screen.Width=1280) and (screen.Height=1024) then
Result:= 'bPillarBox5to4';
if (screen.Width=2560) and (screen.Height=2048) then
Result:= 'bPillarBox5to4';
end;
El Sanchez
22-01-2016, 11:57
Вижу что преобразование кодировки не идет, но не могу разобраться почему »
LordSP, ну так в dll DsShow ожидает Unicode-строку, а передается ANSI-строка.
ANSI-cтрока Hello World! (последовательность байт):
48(H) 65(e) 6C(l) 6C(l) 6F(o) 20( ) 57(W) 6F(o) 72(r) 6C(l) 64(d) 21(!)
Unicode-строка Hello World! (последовательность байт, 2 байта на символ):
48 00 (H) 65 00(e) 6C 00(l) 6C 00(l) 6F 00(0) 20 00( ) 57 00(W) 6F 00(o) 72 00(r) 6C 00(l) 64 00(d) 21 00(!)
ANSI-cтрока Hello World!, которую пытаются трактовать как Unicode-строку (последовательность байт):
48 65(效) 6C 6C(汬) 6F 20(漠 в UTF-16BE, но у нас UTF-16LE и такого символа нет, поэтому не отображается ) 57 6F(潗) 72 6C(汲) 64 21(Ⅴ)
P.S. Да, и так строки в dll не передаются. Так вообще нельзя делать, ну совсем нельзя. Курите для начала комментарий в dpr-файле dll, а потом, к примеру, http://www.gunsmoker.ru/2009/01/blog-post.html
El Sanchez, Модуль ShareMem я подключал, ничего не вышло, я в Delphi не так силен, Вы не могли бы пример показать? Насчет кодировки я понимал сразу, но так и не понял как правильно передавать строки.
dracosha
22-01-2016, 17:00
Всем привет. Ребят подскажите пожалуйста... Собрал только что китайской версией установщик. В тотал командер видно что файл создан 22.01.2016 в 16:21, а если навести курсор на сам экзешник, то пишет следующее: Дата создания: 08.01.2016 19:04
http://i.imgur.com/gAIpHxv.png
Подскажите пожалуйста что надо сделать чтобы писались правильные дата и время?
dracosha, а если правой кнопкой на сетап => свойства => подробно, дата изменения?
dracosha
22-01-2016, 19:09
nik1967, там правильная дата, сегодняшняя, такая же как и в тотале, но на всплывающей подсказке какая-то "левая" дата :(
Думал может в тотале кривая подсказка, но нет, в проводнике такая же история.
http://i.imgur.com/HGNnRTv.png
http://i.imgur.com/xW2LZ2R.pnghttp://i.imgur.com/19ZnUZM.png
dracosha, ну тогда, файл был создан именно 08.01.2016, а 22.01.2016 он был обновлён. О чём и докладывают свойства файла.
dracosha
22-01-2016, 20:22
nik1967, файл я удалил и скомпилил по новой - без изменений :(
dracosha, Смотрите:
http://i5.imageban.ru/thumbs/2016.01.22/6dceff628bb752cfebd19fd96a9563df.png (http://i5.imageban.ru/out/2016/01/22/6dceff628bb752cfebd19fd96a9563df.png)
Обратите внимание под столбцами "Изменен" и "Дата создания".
Изменён - это дата создания/изменение самого инсталлятора.
Дата создания - это дата появления на носителе (Скачивание/копирование откуда-либо)
dracosha
22-01-2016, 23:46
Nordek, файл я удаляю, затем открываю свой скрипт.iss китайским компилятором Inno и жму кнопку Компиляция, через 20 секунд новый файл появляется на диске, которого не было. Вопрос: какие даты создания и изменения должны быть у этого файла? Разницу в несколько секунд я конечно же допускаю, но разница та почти в две недели. Я как-то раньше обращал на это внимание и все было в порядке, это точно... Может какие системные глюки.
какие даты создания и изменения должны быть у этого файла? »
В столбце "Изменён" - Дата создания самого инсталлятора. Т.е вы создали инсталлятор 22 января 2016 года в 15:00, таковой она и останется.
Дата в столбце "Дата создания" условная. Т.е может меняться от перемещения, копирования, скачивания и т.д.
но разница та почти в две недели. »В директиве OutputBaseFilename, которая в секции [Setup], назначьте другое имя на выходе.
Пример:
OutputBaseFilename=setup1
vadjliss
23-01-2016, 07:52
парни подскажите как убрать время создания файла
http://fs5.directupload.net/images/160123/temp/u9erokbb.jpg (http://fs5.directupload.net/images/160123/u9erokbb.jpg)
dracosha
23-01-2016, 09:50
Nordek, спасибо большое. Хоть файл я и удалял, но данные о его создании где-то все равно оставались. После твоего совета удалил свой файл и рестартанул систему - все стало на место.
Возник вопрос... Можно ли через препроцессор в китайской версии организовать удаление файла указанного в директиве OutputBaseFilename секции [Setup] до того как начнется компиляция?
p.s. варианты с ком.строкой не интересны.
kotyarko@fb
23-01-2016, 13:06
Можно ли через препроцессор в китайской версии организовать удаление файла указанного в директиве OutputBaseFilename секции [Setup] до того как начнется компиляция? »Можно попробовать так:
#DeleteFile(SetupSetting("OutputBaseFilename"))
dracosha
23-01-2016, 15:10
kotyarko@fb, не прокатило :(
http://i.imgur.com/P0MTEOf.png
kotyarko@fb
23-01-2016, 15:55
dracosha, тогда как-то так:
#expr DeleteFile(AddBackslash(SetupSetting("OutputDir")) + SetupSetting("OutputBaseFilename"))
dracosha
23-01-2016, 16:10
kotyarko@fb, да, так собирается, только я не успеваю проверить удаляется файл или нет :(
А вообще да, товарищ Nordek прав, дата создания файла условная и зависит от времени перемещения, копирования и скачивания.
И совсем не стоит заморачиваться на этой дате.
vadjliss
24-01-2016, 14:24
парни помогите два скрипта соединить вместе голову уже сломал
procedure CurStepChanged(CurStep: TSetupStep);
var
ErrorCode: Integer;
begin
If CurStep = ssDone then
begin
ShellExec('open', 'http://forum.oszone.net//', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
HostFile: TStringList;
begin
HostFile := TStringList.Create;
try
with HostFile do
if CurStep = ssPostInstall then
begin
LoadFromFile(ExpandConstant('{sys}\drivers\etc\hosts'));
Add('127.0.0.1 www.xxx');
Add('127.0.0.1 www.xxx');
Add('127.0.0.1 www.xxx');
Add('127.0.0.1 xxx');
Add('127.0.0.1 xxx');
Add('127.0.0.1 xxx');
SaveToFile(ExpandConstant('{sys}\drivers\etc\hosts'));
end;
finally
HostFile.free;
end;
end;
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC