PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 [96] 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Dodakaedr
29-10-2014, 18:58
Всем привет! Как можно определить, требуется ли перезагрузка компа или нет? Ситуация в следующем: имеется программа которая после удаления требует перезагрузку компа, но пользователь выбирает нет и при повторной установки без перезагрузки пк не хочет устанавливаться. Как определить это самое требование перезагрузки?

diman_21Ru
29-10-2014, 19:01
Всем привет в скрипте есть функции при наведение на мод описание и картинка как можно прикрутить звук при выборе мода, пример тут :

bandaletoff
30-10-2014, 02:14
Доброго времени суток!
Подскажите пожалуйста, что и куда добавить в скрипт, чтобы перед деинсталляцией программы, сначала удалились драйвера. Папка с файлами на установку и удаление драйверов находится в каталоге программы.
Спасибо!

Zorbbb
31-10-2014, 05:33
Уважаемые, путь к установленной игре можно узнать из секции 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"

Shkutu
31-10-2014, 15:09
Всех приветствую, у меня ту вопрос возник. В инно есть такая директива как AllwaysRestart. В случае, когда она выставлена в "yes" инсталлятор после установки спрашивает пользователя, надо ли перезагружать систему и по-умолчанию выбрано "да". Так вот вопрос - как сделать так, чтоб по-умолчанию там было выбрано "нет"? Есть ли какая-то настройка для этого или какой компонент у формы инсталлятора отвечает за эти радио-кнопки?

bandaletoff, используйте секцию [UninstallRun]. подробнее можно посмотреть в справке.

saurn
31-10-2014, 16:04
А как правильно прописать такой ключ? Не пойму как быть с фигурными скобками. »
Экранировать символом "{" в шестнадцатеричной кодировке.
{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
Экранировать символом "{" в шестнадцатеричной кодировке. »
Не обязательно в шестнадцатеричной форме, достаточно просто двух символов "{", цитата из справки:
Символ "{" рассматривается как начало константы. Если требуется ввести "{", наберите ее два раза. (Не нужно при этом удваивать символ "}".)

saurn
31-10-2014, 17:15
Не обязательно в шестнадцатеричной форме, достаточно просто двух символов "{" »
В этом случае подобный способ работать не будет, так как символ будет воспринят, как часть синтаксиса константы.
Если использовать две фигурные скобки в начале, то в конце все равно придется экранировать шестнадцатеричным представлением символа:
{reg:HKLM\SOFTWARE\1C\{{BAC329E8-C7D7-4777-8D69-3AFD40603326%7d,InstallDir|{sd}\Games\Game1}

Zorbbb
31-10-2014, 17:26
saurn,
Благодарю, зажило.

kotyarko@fb
01-11-2014, 00:33
как можно прикрутить звук при выборе мода »
Например, так:

diman_21Ru
02-11-2014, 01:05
kotyarko@fb, у меня почему то не работает функция то ли не так вставил запускаю компиляцию и не запускается у меня уникод.

TryRooM
02-11-2014, 02:48
diman_21Ru,

RawDataResource работает на расширенной версии компилятора от Restools

diman_21Ru
02-11-2014, 10:05
TryRooM, У меня расширенная, уникод же обычно ругаться будет если не так вставишь но тут собирает и установщик не запускает

TryRooM
02-11-2014, 10:32
diman_21Ru,

Попробуй упростить через Modules, меньше путаницы в скрипте будет.

saurn
09-11-2014, 09:40
Реализация 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');

TryRooM
10-11-2014, 06:30
diman_21Ru,

Не забывай прописывать имя компонента и в Modules

ROMKA-1977
10-11-2014, 09:38
Подскажите возможно ли средствами Inno Setup выполнить переименование папки Мои документы в Documents в локализованной винде?




© OSzone.net 2001-2012