Войти

Показать полную графическую версию : Скрипты 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

Raz3r
31-03-2014, 14:10
ролрллгнлнглнг

Raz3r
31-03-2014, 15:14
Разве никто не может помочь?

Habetdin
31-03-2014, 16:34
Raz3r, вам же даже программа сообщила, где и в чем ошибка :)
Runtime Error at 70:165: "Unknown custome message name". »
Замените:
CustomMessage('Удалить все пользовательские настройки программы?')
на простую строку:
'Удалить все пользовательские настройки программы?'
И аналогично для второго вызова CustomMessage.
[hr]Функция CustomMessage (http://www.jrsoftware.org/ishelp/index.php?topic=isxfunc_custommessage) используется для получения значений из секции [CustomMessages], например:
[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl"
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
ru.TestExample=Удалить файл?
en.TestExample=Delete file?

[Code]
// Где-то в коде...
// CustomMessage('TestExample')
// или же:
// ExpandConstant('{cm:TestExample}')

Dodakaedr
31-03-2014, 17:47
Простейшее использование IsWin64 на примере установки файлов: »
То есть по этому примеру не нужно что-то прописывать в секции [Code]?

[Code]
function InitializeSetup: Boolean;
begin
if IsWin64 then
MsgBox(ExpandConstant('{cm:IsWin64}') + ExpandConstant('{pf64}'), mbInformation, MB_OK)
else
MsgBox(ExpandConstant('{cm:IsWin32}') + ExpandConstant('{pf32}'), mbInformation, MB_OK);
result:=true;
end; »
Это нужно только для информирования, или какая-то еще роль здесь играет?

Dinvin4ester
31-03-2014, 20:29
Ребята как убрать в скрипте распаковку исдоном?

nik1967
31-03-2014, 20:52
Ребята как убрать в скрипте распаковку исдоном? »
Написать самому нужный инсталлятор. ИМХО проще, чем в чужом скрипте вырезать незнамо что.

Nordek
31-03-2014, 22:44
Это нужно только для информирования »Да.
В Inno, проверка IsWin64 встроенная - можно даже наглядно увидеть присутствие IsWin64:
Inno Script Studio
"Вид » Секции » Файлы"
На элементе жмёшь "ПКМ (Правая кнопка мыши) » Свойства элемента (Alt+Enter)"
Затем переходишь во вкладку "Общие"
Далее, "Скрипты паскаля » Проверка:"

Dodakaedr
31-03-2014, 22:45
Nordek, спс

Nordek
31-03-2014, 23:28
Unknown custome message name »
Ну правильно. Ругается на то, что отсутствует CustomMessages.
Вот готовый вариант:
[CustomMessages]
DelSetUser=Удалить все пользовательские настройки программы?
DelSetServer=Удалить все файлы сервера?

[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if (CurUninstallStep = usUninstall) and
(MsgBox(CustomMessage('DelSetUser'), mbInformation, MB_YESNO or MB_DEFBUTTON2) = IDYES) then
DelTree(ExpandConstant('{app}\config'), True, True, True);
begin
if (CurUninstallStep = usUninstall) and
(MsgBox(CustomMessage('DelSetServer'), mbInformation, MB_YESNO or MB_DEFBUTTON2) = IDYES) then
DelTree(ExpandConstant('{app}\files'), True, True, True);
DeleteFile(ExpandConstant('{app}\ts3server.sqlitedb'));
end;
end;
в данном скрипте обрати внимание на то, что изменилось в MsgBox.

Если же хочешь прописывать в MsgBox текст, то удали то, что отметил красным:
[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if (CurUninstallStep = usUninstall) and
(MsgBox(CustomMessage('Удалить все пользовательские настройки программы?'), mbInformation, MB_YESNO or MB_DEFBUTTON2) = IDYES) then
DelTree(ExpandConstant('{app}\config'), True, True, True);
begin
if (CurUninstallStep = usUninstall) and
(MsgBox(CustomMessage('Удалить все файлы сервера?'), mbInformation, MB_YESNO or MB_DEFBUTTON2) = IDYES) then
DelTree(ExpandConstant('{app}\files'), True, True, True);
DeleteFile(ExpandConstant('{app}\ts3server.sqlitedb'));
end;
end;

т.е должно получиться так:
[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if (CurUninstallStep = usUninstall) and
(MsgBox('Удалить все пользовательские настройки программы?', mbInformation, MB_YESNO or MB_DEFBUTTON2) = IDYES) then
DelTree(ExpandConstant('{app}\config'), True, True, True);
begin
if (CurUninstallStep = usUninstall) and
(MsgBox('Удалить все файлы сервера?', mbInformation, MB_YESNO or MB_DEFBUTTON2) = IDYES) then
DelTree(ExpandConstant('{app}\files'), True, True, True);
DeleteFile(ExpandConstant('{app}\ts3server.sqlitedb'));
end;
end;


Кстати, использование [CustomMessages], позволяет задавать сообщения на других языках, например:
[Languages]
Name: en; MessagesFile: compiler:Default.isl
Name: ru; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
en.add=Add
en.del=Delete
ru.add=Добавить
ru.del=Удалить

Dodakaedr
01-04-2014, 15:30
Использую Inno Ultra, в редакторе форм есть строка BorderIcons в которой можно скрыть системное меню (biSystemMenu), теперь интересует как вывести только кнопку "закрыть"?

Ivan_009
01-04-2014, 22:07
интересует как вывести только кнопку "закрыть"? »

Dodakaedr, Пример:

function GetClassLong(Wnd: HWnd; Index: Integer): Longint; external 'GetClassLongA@user32.dll stdcall';
function SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetClassLongA@user32.dll stdcall';

procedure Close;
begin
SetClassLong(Wizardform.Handle, -26, GetClassLong(Wizardform.Handle, -26) or $200);
end;

procedure InitializeWizard;
begin
Close;
WizardForm.Position:= poScreenCenter;
end;

Dodakaedr
01-04-2014, 22:13
SID или имя залогиненного пользователя можете узнать так:
#define A = (Defined UNICODE) ? "W" : "A"
const
WTS_CURRENT_SERVER_HANDLE = 0;
WTS_CURRENT_SESSION = (-1);
WTSUserName = 5;

function WTSQuerySessionInformation(hServer: THandle; SessionId, WTSInfoClass: DWORD; var ppBuffer: Longint; var pBytesReturned: DWORD): BOOL; external 'WTSQuerySessionInformation{#A}@wtsapi32.dll stdcall';
procedure WTSFreeMemory(pMemory: Longint); external 'WTSFreeMemory@wtsapi32.dll stdcall';

///////////////////////////////////////////////////////
function GetLoggedOnUser(const IsSID: Boolean): String;
var
i: Integer;
aNames: TArrayOfString;
dwLength: DWORD;
lpBuffer: Longint;
begin
if not RegGetSubkeyNames(HKLM, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList', aNames) then Exit;
try
if not WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSUserName, lpBuffer, dwLength) then Exit;
Result := CastIntegerToString(lpBuffer);
if IsSID then for i := 0 to GetArrayLength(aNames)-1 do if Pos(Lowercase(Result), LowerCase(ExpandConstant(Format('{reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%s,ProfileImagePath|}', [aNames[i]])))) > 0 then
begin
Result := aNames[i];
Break;
end;
finally
WTSFreeMemory(lpBuffer);
end;
end;

/////////////////////////////
procedure InitializeWizard();
begin
MsgBox(GetLoggedOnUser(False), mbInformation, MB_OK);
MsgBox(GetLoggedOnUser(True), mbInformation, MB_OK);
end;
Как с помощью этого кода занести ключ регистрации в HKEY_USERS\S-1-5-21-2866158627-181887668-3254620381-500\Software\TotalImageConverter...????
Root: HKU; SubKey: S-1-5-21-2866158627-181887668-3254620381-500\Software\TotalImageConverter; ValueType: string; ValueName: Key; ValueData: 0r/1GkAO/GMNgF5gip+qjw0OmwHwWCAw73h0I2eO/k6wRVs8HEWGdKK2BOVGxJvFmY3aD6pFMBveZb87Jht+hNWdqXcyekWPDvm3RstdisI6BSJy0UW8wtKQa217TKPbReCRXL38Z5YD9 gyu0B68h2dV9yPzo; Flags: uninsdeletevalue uninsdeletekeyifempty

Где "S-1-5-21-2866158627-181887668-3254620381-500" SID пользователя. Или подскажите другие способы решения этой задачи.....

Пример: »
Не работает, наверное из-за того что использую скин (XPOSX7.cjstyles). Как исправить?

Gnom_aka_Lexander
02-04-2014, 08:46
как вывести только кнопку "закрыть"? »
так:
procedure InitializeWizard();
begin
WizardForm.BorderIcons := [biSystemMenu];
end;
или так:
procedure InitializeWizard();
begin
WizardForm.BorderStyle := bsDialog;
end;

Dodakaedr
02-04-2014, 08:52
Gnom_aka_Lexander, и эти способы не выводят кнопку.

Gnom_aka_Lexander
02-04-2014, 09:05
Dodakaedr, если ты удаляешь все кнопки, то вывести не выйдет. нужно не вместе, а вместо.

Dodakaedr
02-04-2014, 09:07
procedure InitializeWizard();
begin
WizardForm.BorderStyle := bsDialog;
end; »
Этот вариант работает если не использовать скин, а со скином как сделать?

Gnom_aka_Lexander
02-04-2014, 09:09
Dodakaedr, скрипт свой с файлами залей куда-нибудь. должно и со скином все работать.

Dodakaedr
02-04-2014, 09:21
скрипт свой с файлами залей куда-нибудь »
http://rghost.ru/53703721

Gnom_aka_Lexander
02-04-2014, 09:25
Dodakaedr, у тебя в скрипте:
with WizardForm do
begin
BorderIcons := [biMinimize];
Caption := '{#MyAppName} {#MyAppVersion}';
end;
biMinimize срабатывет только вместе с biMaximize, и как я уже писал - нужно не вместе, а вместо. В твоем случае, там должно быть не biMinimize а biSystemMenu.

Dodakaedr
02-04-2014, 09:30
biMinimize срабатывет только вместе с biMaximize, и как я уже писал - нужно не вместе, а вместо. В твоем случае, там должно быть не biMinimize а biSystemMenu. »
Спасибо, но это не то что хотел, при использовании biSystemMenu появляется полное системное меню, а мне нужно только кнопка закрыть, как оно срабатывает без скина.




© OSzone.net 2001-2012