Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]
Dodakaedr
29-10-2014, 18:58
Всем привет! Как можно определить, требуется ли перезагрузка компа или нет? Ситуация в следующем: имеется программа которая после удаления требует перезагрузку компа, но пользователь выбирает нет и при повторной установки без перезагрузки пк не хочет устанавливаться. Как определить это самое требование перезагрузки?
diman_21Ru
29-10-2014, 19:01
Всем привет в скрипте есть функции при наведение на мод описание и картинка как можно прикрутить звук при выборе мода, пример тут :
bandaletoff
30-10-2014, 02:14
Доброго времени суток!
Подскажите пожалуйста, что и куда добавить в скрипт, чтобы перед деинсталляцией программы, сначала удалились драйвера. Папка с файлами на установку и удаление драйверов находится в каталоге программы.
Спасибо!
Уважаемые, путь к установленной игре можно узнать из секции Setup, вот пример:
[Setup]
DefaultDirName={reg:HKCU\SOFTWARE\Comp\Game,InstallDir|{sd}\Games\Game1}
А как правильно прописать такой ключ? Не пойму как быть с фигурными скобками.
[HKEY_LOCAL_MACHINE\SOFTWARE\1C\{BAC329E8-C7D7-4777-8D69-3AFD40603326}]
"InstallDir"="C:\\Games\\Game1"
Всех приветствую, у меня ту вопрос возник. В инно есть такая директива как AllwaysRestart. В случае, когда она выставлена в "yes" инсталлятор после установки спрашивает пользователя, надо ли перезагружать систему и по-умолчанию выбрано "да". Так вот вопрос - как сделать так, чтоб по-умолчанию там было выбрано "нет"? Есть ли какая-то настройка для этого или какой компонент у формы инсталлятора отвечает за эти радио-кнопки?
bandaletoff, используйте секцию [UninstallRun]. подробнее можно посмотреть в справке.
А как правильно прописать такой ключ? Не пойму как быть с фигурными скобками. »
Экранировать символом "{" в шестнадцатеричной кодировке.
{reg:HKLM\SOFTWARE\1C\%7B{BAC329E8-C7D7-4777-8D69-3AFD40603326},InstallDir|{sd}\Games\Game1}
-------------------------------------------------------------------------------------------------------
какой компонент у формы инсталлятора отвечает за эти радио-кнопки? »
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
AlwaysRestart=yes
[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
if ( CurPageID = wpFinished ) then
WizardForm.NoRadio.Checked := True;
end;
// property YesRadio: TNewRadioButton; read;
// property NoRadio: TNewRadioButton; read;
Habetdin
31-10-2014, 17:06
Экранировать символом "{" в шестнадцатеричной кодировке. »
Не обязательно в шестнадцатеричной форме, достаточно просто двух символов "{", цитата из справки:
Символ "{" рассматривается как начало константы. Если требуется ввести "{", наберите ее два раза. (Не нужно при этом удваивать символ "}".)
Не обязательно в шестнадцатеричной форме, достаточно просто двух символов "{" »
В этом случае подобный способ работать не будет, так как символ будет воспринят, как часть синтаксиса константы.
Если использовать две фигурные скобки в начале, то в конце все равно придется экранировать шестнадцатеричным представлением символа:
{reg:HKLM\SOFTWARE\1C\{{BAC329E8-C7D7-4777-8D69-3AFD40603326%7d,InstallDir|{sd}\Games\Game1}
saurn,
Благодарю, зажило.
kotyarko@fb
01-11-2014, 00:33
как можно прикрутить звук при выборе мода »
Например, так:
diman_21Ru
02-11-2014, 01:05
kotyarko@fb, у меня почему то не работает функция то ли не так вставил запускаю компиляцию и не запускается у меня уникод.
diman_21Ru,
RawDataResource работает на расширенной версии компилятора от Restools
diman_21Ru
02-11-2014, 10:05
TryRooM, У меня расширенная, уникод же обычно ругаться будет если не так вставишь но тут собирает и установщик не запускает
diman_21Ru,
Попробуй упростить через Modules, меньше путаницы в скрипте будет.
Реализация WinAPI функции GlobalMemoryStatusEx http://msdn.microsoft.com/ru-ru/library/windows/desktop/aa366589%28v=vs.85%29.aspx
Предоставляет информацию об использовании физической и виртуальной памяти. Просьба к знатокам: указать на возможные ошибки.
[Code]
type
Int64 = record
Intlow: Integer;
IntHigh: Integer;
end;
_MEMORYSTATUSEX = record
dwLength: DWORD;
dwMemoryLoad: DWORD;
ullTotalPhys: Int64;
ullAvailPhys: Int64;
ullTotalPageFile: Int64;
ullAvailPageFile: Int64;
ullTotalVirtual: Int64;
ullAvailVirtual: Int64;
ullAvailExtendedVirtual: Int64;
end;
function GlobalMemoryStatusEx( var lpBuffer: _MEMORYSTATUSEX ): BOOL; external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
function StrFormatByteSize64( qdw: Currency; var pszBuf: Char; cchBuf: UINT ): PAnsiChar; external 'StrFormatByteSize64A@shlwapi.dll stdcall';
function BytesToSize( const Bytes: Extended ): String;
var
pszBuf: array [0..15] of Char;
begin
try
Result := StrFormatByteSize64( Abs ( Bytes div 1E4 ), pszBuf[0], sizeof( pszBuf ) );
except
end;
end;
function Size64( const IntLow: Integer; const IntHigh: Integer ): Extended;
begin
Result := ( ( IntHigh + Integer( IntLow < 0 ) ) * 4.294967296E9 + IntLow );
end;
procedure InitializeWizard();
var
msEx: _MEMORYSTATUSEX;
szMemoryLoad: String;
szTotalPhys: String;
szAvailPhys: String;
szTotalPageFile: String;
szAvailPageFile: String;
szTotalVirtual: String;
szAvailVirtual: String;
begin
msEx.dwLength := SizeOf( msEx ) ;
if not GlobalMemoryStatusEx( msEx ) then Exit;
szMemoryLoad := Format( '%s: %d%s', ['MemoryLoad', msEx.dwMemoryLoad, '%'] );
szTotalPhys := Format( '%s: %s', ['TotalPhys', BytesToSize( Size64( msEx.ullTotalPhys.Intlow, msEx.ullTotalPhys.IntHigh ) )] );
szAvailPhys := Format( '%s: %s', ['AvailPhys', BytesToSize( Size64( msEx.ullAvailPhys.Intlow, msEx.ullAvailPhys.IntHigh ) )] );
szTotalPageFile := Format( '%s: %s', ['TotalPageFile', BytesToSize( Size64( msEx.ullTotalPageFile.Intlow, msEx.ullTotalPageFile.IntHigh ) )] );
szAvailPageFile := Format( '%s: %s', ['AvailPageFile', BytesToSize( Size64( msEx.ullAvailPageFile.Intlow, msEx.ullAvailPageFile.IntHigh ) )] );
szTotalVirtual := Format( '%s: %s', ['TotalVirtual', BytesToSize( Size64( msEx.ullTotalVirtual.Intlow, msEx.ullTotalVirtual.IntHigh ) )] );
szAvailVirtual := Format( '%s: %s', ['AvailVirtual', BytesToSize( Size64( msEx.ullAvailVirtual.Intlow, msEx.ullAvailVirtual.IntHigh ) )] );
MsgBox(
szMemoryLoad + #13#10 +
szTotalPhys + #13#10 +
szAvailPhys + #13#10 +
szTotalPageFile + #13#10 +
szAvailPageFile + #13#10 +
szTotalVirtual + #13#10 +
szAvailVirtual,
mbInformation,
MB_OK
);
end;
kotyarko@fb
09-11-2014, 20:32
Возник вопрос по поводу WinAPI: а можно ли узнать, включено ли в системе масштабирование (установленный % не имеет значения)?
sergey3695
09-11-2014, 21:59
kotyarko@fb, сравни разрешение экрана и монитора
type
TagMonitorInfo = record
cbSize: DWord;
Monitor, Work: TRect;
dwFlags: DWord;
end;
var MonitorInfo: TagMonitorInfo;
function GetMonitorInfo(hMonitor: Integer; var lpMonitorInfo: TagMonitorInfo): Boolean; external 'GetMonitorInfoA@user32';
procedure InitializeWizard();
begin
MonitorInfo.cbSize:= SizeOf(MonitorInfo);
if GetMonitorInfo(1, MonitorInfo)
then MsgBox(IntToStr(MonitorInfo.Monitor.Right)+ 'x' +IntToStr(MonitorInfo.Monitor.Bottom), mbInformation, MB_OK);
end;Определение монитора.
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;
// GetSystemMetrics - для второго способа онли.
function GetSystemMetrics(nIndex: Integer): Integer; external 'GetSystemMetrics@user32.dll stdcall';
procedure InitializeWizard();
begin
MsgBox('Разрешение монитора: ' + IntToStr(GetMonitorInfo(1,MainForm.Handle)) + ' x ' + IntToStr(GetMonitorInfo(2,MainForm.Handle)), mbConfirmation, MB_OK);
MsgBox('Разрешение монитора 2: ' + IntToStr(GetSystemMetrics(0)) + ' x ' + IntToStr(GetSystemMetrics(1)), mbConfirmation, MB_OK);
MsgBox('Разрешение монитора 3: ' + IntToStr(Screen.Width) + ' x ' + IntToStr(Screen.Height), mbConfirmation, MB_OK);
end;
Самый простой 3 вариант.
diman_21Ru
09-11-2014, 23:53
TryRooM, вот там в скрипте поиск названия файла идет через
Name: "main\a"; Description: "A Files";
pSoundMemory_A := GetResourceSoundAddr('_IS_SNDA');
а у меня вот как и кажется я не правильно указал раз ошибка, как исправить чтобы заработала?
Name: OZE1/OZE1/OZE1; Description:Атмосферная от Strategic Music;Flags: disablenouninstallwarning exclusive
pSoundMemory_Атмосферная от Strategic Music := GetResourceSoundAddr('_IS_SNDA');
diman_21Ru,
Не забывай прописывать имя компонента и в Modules
ROMKA-1977
10-11-2014, 09:38
Подскажите возможно ли средствами Inno Setup выполнить переименование папки Мои документы в Documents в локализованной винде?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC