PDA

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


Страниц : 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

Raf-9600
04-04-2012, 16:43
Johny777, Это не подойдет. Но все равно спасибо за помощь :)

El Sanchez
04-04-2012, 20:50
вроде полностью будет так:
читать дальше »
а чему равны?
GWL_EXSTYLE = ?;
WS_EX_COMPOSITED = ?; »
Johny777, ну, почти угадал.

const
GWL_EXSTYLE = (-20)
WS_EX_COMPOSITED = $2000000

Devils Night
04-04-2012, 23:09
Как добавить ключ реестра?
Не каким образом не добавляет, по разному пробовал:
[Registry]
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{D1514D66-7796-4DAB-BF64-9B54924EA9F7}_is1; ValueType: dword; ValueName: IsAppInstalled; ValueData: $00000001

[Registry]
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{#AppID}_is1; ValueType: dword; ValueName: IsAppInstalled; ValueData: $00000001

[Registry]
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{#AppID}; ValueType: dword; ValueName: IsAppInstalled; ValueData: $00000001

.

R.i.m.s.k.y.
04-04-2012, 23:53
Devils Night, в секцию Uninstall реестра во время установки доступа нет, туда можно сунуться во время InitializeSetup или после [Run]

Devils Night
05-04-2012, 15:57
в секцию Uninstall реестра во время установки доступа нет, туда можно сунуться во время InitializeSetup или после [Run] »Понял, значит придётся использовать секцию RUN.

Ребят, подскажите такую вещь, как по средствам INNO По VID & PID сделать так чтобы определялось устройство и высвечивалось в инсталяторе?

Ivan_009
05-04-2012, 16:04
Как у новой bass.dll v2.4.8 создать кнопку вкл выкл музыки... :help:

R.i.m.s.k.y.
05-04-2012, 16:06
Devils Night, если мне нужны названия и пиды/виды - я из реестра дергаю, в шапке есть ultimate Black Skin, он выдергивает названия, ис тех же ключей реестра можно дернуть и пиды

в общем за основу возьми из шапки скрипт "проверку системных требований"
вот так я дергаю для видюшки пид/вид, на выходе список видюшек с пидами/видами, каждая видюшка на новой строчке

function GetAllVideoCard():String; // HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}
var
Keys : TArrayOfString;
key, DriverDesc, MatchingDeviceId : string;
i : integer;
begin
Result := '';
key := 'SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}'; RegGetSubkeyNames(HKLM, key, Keys)
for i := 0 to GetArrayLength(Keys)-1 do begin
RegQueryStringValue(HKLM, key + '\' + Keys[i], 'DriverDesc', DriverDesc);
RegQueryStringValue(HKLM, key + '\' + Keys[i], 'MatchingDeviceId', MatchingDeviceId); StringChangeEx(MatchingDeviceId, 'pci\', '', True);
if (Pos(LowerCase(DriverDesc), LowerCase(Result)) = 0) then Result := Result + #13#10 + DriverDesc + ' (' + MatchingDeviceId + ')';
end;
end;

заодно GUID устройств http://msdn.microsoft.com/en-us/library/windows/hardware/ff553426(v=vs.85).aspx

Johny777
05-04-2012, 16:28
подскажите пожалуйста
как убрать кнопку системного меню в середине?
http://img254.imageshack.us/img254/3651/88859877.jpg (http://imageshack.us/photo/my-images/254/88859877.jpg/)
(правый фрвгмент скрина из готового инсталла на основе Inno, а не фотошоп)
за эти кнопки отвечает
WizardForm.BorderIcons := [biSystemMenu];
вот так не убирается
Procedure InitializeWizard();
begin
WizardForm.BorderIcons :=WizardForm.BorderIcons - [biMaximize];
end;
:(

Devils Night
05-04-2012, 16:58
если мне нужны названия и пиды/виды - я из реестра дергаю »Да вот рыскаю реестр, ищу.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} »Ага, спасибо большое.
А вот когда устройство есть но не установлены драйвера, оно определяется в Class\{4D36E968-E325-11CE-BFC1-08002BE10318} или HARDWARE?

в шапке есть ultimate Black Skin »
Я можно сказать весь этот код закоментировал, и в итоге он вообще перестал работать, хотел чтоб осталось одно устройство, например:
Видеоадаптер: NVIDIA GeForce 8600, но без оформления рамками, в общем не получается. Если можно кодик одного устройства (без всяких там виндовсов, файлов подкачек), пожалуста?!


function GetAllVideoCard():String; // HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}
var
Keys : TArrayOfString;
key, DriverDesc, MatchingDeviceId : string;
i : integer;
begin
Result := '';
key := 'SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}'; RegGetSubkeyNames(HKLM, key, Keys)
for i := 0 to GetArrayLength(Keys)-1 do begin
RegQueryStringValue(HKLM, key + '\' + Keys[i], 'DriverDesc', DriverDesc);
RegQueryStringValue(HKLM, key + '\' + Keys[i], 'MatchingDeviceId', MatchingDeviceId); StringChangeEx(MatchingDeviceId, 'pci\', '', True);
if (Pos(LowerCase(DriverDesc), LowerCase(Result)) = 0) then Result := Result + #13#10 + DriverDesc + ' (' + MatchingDeviceId + ')';
end;
end;»
Ну вот вставил:

[Code ]
function GetAllVideoCard():String; // HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}
var
Keys : TArrayOfString;
key, DriverDesc, MatchingDeviceId : string;
i : integer;
begin
Result := '';
key := 'SYSTEM\CurrentControlSet\Control\Class\{4D36E968-E325-11CE-BFC1-08002BE10318}'; RegGetSubkeyNames(HKLM, key, Keys)
for i := 0 to GetArrayLength(Keys)-1 do begin
RegQueryStringValue(HKLM, key + '\' + Keys[i], 'DriverDesc', DriverDesc);
RegQueryStringValue(HKLM, key + '\' + Keys[i], 'MatchingDeviceId', MatchingDeviceId); StringChangeEx(MatchingDeviceId, 'pci\', '', True);
if (Pos(LowerCase(DriverDesc), LowerCase(Result)) = 0) then Result := Result + #13#10 + DriverDesc + ' (' + MatchingDeviceId + ')';
end;
end;

А как сделать чтоб оно в инсаляторе где нибудь внизу выдало например Видеоадаптер: Такой то, такой то. Естественно без оформления и рамок.

Raf-9600
05-04-2012, 17:57
В Inno Setup от Restools есть замечательная возможность сворачивать компоненты (ComponentsListTVStyle=true), а возможно ли сделать так, чтобы при выборе какого-то компонента, сворачивалась определённое древо компонентов?

Допустим у меня есть:
[Components]
Name: "Game1"; Description: Игра 1;
Name: "Game1\One"; Description: Пункт 1;
Name: "Game1\Two"; Description: Пункт 2;
Name: "Game2"; Description: Игра 2;
Name: "Game2\One"; Description: Пункт 1;
Name: "Game2\Two"; Description: Пункт 2;
Нужно чтобы при выборе Game2 сворачивалось древо компонентов Game1, и наоборот. Такое реально?

Devils Night
05-04-2012, 18:19
Raf-9600, не оно (http://krinkels.ru/showthread.php?p=2656#post2656) ?

alert30
05-04-2012, 18:36
Как сделать выборочный компонент, чтобы при галочке: после установки прописывался реестр (reg-файл), при не галочке: после установки не прописывался реестр (reg-файл)?

Raf-9600
05-04-2012, 18:38
не оно ? »
Если не сложно, можете показать пример, в котором допустим выбрав компонент Game1, сворачивалось бы древо Game2? :pray:

Johny777
05-04-2012, 18:43
Raf-9600,
нафига?
а если у него дочерние как у тебя в примере?
смотри
я выбираю основной - игру. И тут дерево дочерних сворачивается. Т.е. рабиокнопки с выбором озвучек, чекбоксы к ним ещё дочерние
Тебе разве такое нужно?

R.i.m.s.k.y.
05-04-2012, 18:44
Да вот рыскаю реестр, ищу. »

я ж тебе гуиды девайсов выше показал, дергай гуиды и смотри в ключе HKLM\SYSTEM\CurrentControlSet\Control\Class\ГУИД

А как сделать чтоб оно в инсаляторе где нибудь внизу выдало например Видеоадаптер: Такой то, такой то. Естественно без оформления и рамок. »
в расширенной версии через редактор форм


alert30, вот ты сейчас одним предложением описал [Components] и как он работает, его и используй

Devils Night
05-04-2012, 18:45
Если не сложно, можете показать пример, »
Ну наверно так:

[Setup]
AppName=1
AppVersion=1
AppVerName=1
DefaultDirName={pf}\1
DefaultGroupName=1
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=setup
SolidCompression=true
Compression=lzma/ultra64
InternalCompressLevel=ultra64

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Components]
Name: Fav; Description: 1; Types: full; Flags: collapsed
Name: Fav\1; Description: 1; Types: custom; Flags: exclusive
Name: Fav\2; Description: 2; Types: custom; Flags: exclusive

Name: Fav\3; Description: 2; Types: custom; Flags: exclusive collapsed
Name: Fav\3\1; Description: 1; Types: custom
Name: Fav\3\2; Description: 2

[Code ]
procedure InitializeWizard();
begin
//-------------------- Скрыть компонент - Начало --------------------\\
WizardForm.ComponentsList.TreeViewStyle := True;
//-------------------- Скрыть компонент - Конец --------------------\\
end;

Johny777
05-04-2012, 18:52
alert30,
как и со всем остальным

[Components]
Name: B; Description: описание к B;

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Bethesda Softworks"; ValueType: String; Flags: uninsdeletevalue uninsdeletekeyifempty; Componets: B

alert30
05-04-2012, 18:58
Johny777, это точно работает, просто я хочу, которую выше написал:
а) галочку поставишь в компоненте - установка + пропись реестр
б) не поставишь галочку в компоненте - установка
?

Извените, все заработало.

Johny777
05-04-2012, 19:00
alert30,
файлы не помеченые компонентом ставятся всегда
а галка компонента пусть будет только для реестра (как у меня в примере)

Извените, все заработало. »
вообще вот пример как повесть два действия на один чекбокс (кастомный!)
и опять же можно менять его название, описывающее то или иное действие будучи отмеченным или неотмеченным


procedure off(Sender: TObject);
begin
/// если чекбокс не отмечен
If off_checkbox.Checked = false
then
begin
здесь вносим одну запись в реестр
off_checkbox.Caption := 'Я не отмечен и занесу этот ключ в реестр';
end
else /// в противном случае (отмечен)
begin
вносим другую запись
off_checkbox.Caption := 'Спасибо, что отметил. Теперь занесу другой';
end;
end;

Raf-9600
05-04-2012, 19:07
нафига?
а если у него дочерние как у тебя в примере?
смотри
я выбираю основной - игру. И тут дерево дочерних сворачивается. Т.е. рабиокнопки с выбором озвучек, чекбоксы к ним ещё дочерние »
Дочерние я таким образом скрывать не планирую. У меня инсталлятор на две игры, при том выбрать сразу обе невозможно, и мне кажется, что было бы удобно, чтобы, когда пользователь выбрал одну из игр, все древо компонентов относящихся к другой, сворачивалось.

Ну наверно так: »
Мне бы с зависимостью от конкретного компонента... И чтобы сворачивалось не все, а только одно, определённое древо.




© OSzone.net 2001-2012