Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]
Разве никто не может помочь?
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
Ребята как убрать в скрипте распаковку исдоном?
Ребята как убрать в скрипте распаковку исдоном? »
Написать самому нужный инсталлятор. ИМХО проще, чем в чужом скрипте вырезать незнамо что.
Это нужно только для информирования »Да.
В Inno, проверка IsWin64 встроенная - можно даже наглядно увидеть присутствие IsWin64:
Inno Script Studio
"Вид » Секции » Файлы"
На элементе жмёшь "ПКМ (Правая кнопка мыши) » Свойства элемента (Alt+Enter)"
Затем переходишь во вкладку "Общие"
Далее, "Скрипты паскаля » Проверка:"
Dodakaedr
31-03-2014, 22:45
Nordek, спс
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.