Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]
Dodakaedr
20-10-2014, 22:23
Nordek, а копировать и перемещать как?
Dodakaedr,
[Code]
procedure InitializeWizard();
var
ResultCode: Integer;
begin
Exec('cmd.exe', ExpandConstant('/C XCOPY {sd}\2 {sd}\1 /E /I'), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilIdle, ResultCode);
end;
[Code]
procedure InitializeWizard();
var
ResultCode: Integer;
begin
Exec('cmd.exe', ExpandConstant('/C MD {sd}\1 && MOVE {sd}\2 {sd}\1'), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilIdle, ResultCode);
end;
Dodakaedr, Win + R »
cmd /k help
kotyarko@fb
21-10-2014, 00:13
Например? »
Можно использовать SHFileOperation.
Dodakaedr
21-10-2014, 17:07
kotyarko@fb, делал как в примере описано не работает. У меня unicode версия.
Назрел вопрос: как в инно удалить из памяти массив строк, типа Ars: array of String? В дельфи можно отправить в Finalize(), а здесь как? Просто привести к "0"?
Dodakaedr
21-10-2014, 21:07
Nordek, А если в пути есть пробел, то как быть? Так не копирует.[Code]
procedure InitializeWizard();
var
RCode: Integer;
begin
Exec('cmd.exe', ExpandConstant('/C XCOPY ""{commonappdata}\Astra\DR Updater"" ""{src}\Data\DR Updater"" /E /I'), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilIdle, RCode);
end;
ROMKA-1977
21-10-2014, 22:00
Подскажите как выполнить кнопкой переход на нужную страницу? В моём случае необходимо выполнить переход кастомной кнопкой с ReadyPage на страницу SelectDirPage, не кликая несколько раз кнопку "Назад".
Dodakaedr
22-10-2014, 21:44
Как провести проверку на наличие атрибута "Только чтение" у файла hosts и если оно присутствует то убрать, внести изменения и снова поставить атрибут "Только чтение", а если отсутствует атрибут, то просто внести изменения?
sergey3695
22-10-2014, 21:52
Dodakaedr,
http://forum.ru-board.com/topic.cgi?forum=5&topic=33457&start=990&limit=1&m=1
далее сам.
У меня unicode версия. »
для Unicode
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
function GetFileAttributes(lpFileName: string): integer;
external 'GetFileAttributes{#A}@kernel32.dll stdcall';
function SetFileAttributes(lpFileName: string; dwFileAttributes: integer): integer;
external 'SetFileAttributes{#A}@kernel32.dll stdcall';
Dodakaedr
22-10-2014, 23:13
Вот собрал, все выполняется кроме последнего, атрибут не становится обратно. Хэлп.
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.
[Code]
function GetFileAttributes(lpFileName: string): integer;
external 'GetFileAttributes{#A}@kernel32.dll stdcall';
function SetFileAttributes(lpFileName: string; dwFileAttributes: integer): integer;
external 'SetFileAttributes{#A}@kernel32.dll stdcall';
procedure SetAttr();
var
FileName:string;
begin
FileName:= ExpandConstant('{sys}\drivers\etc\hosts');
if (GetFileAttributes(FileName) and FILE_ATTRIBUTE_NORMAL) = FILE_ATTRIBUTE_NORMAL then
SetFileAttributes(FileName, FILE_ATTRIBUTE_READONLY);
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
HostFile: TStringList;
FileName: string;
begin
FileName:= ExpandConstant('{sys}\drivers\etc\hosts');
if (GetFileAttributes(FileName) and FILE_ATTRIBUTE_READONLY) = FILE_ATTRIBUTE_READONLY then
SetFileAttributes(FileName, FILE_ATTRIBUTE_NORMAL);
HostFile := TStringList.Create;
try
with HostFile do
if CurStep = ssPostInstall then
begin
LoadFromFile(ExpandConstant('{sys}\drivers\etc\hosts'));
Add('127.0.0.1 tratata.ru');
SaveToFile(ExpandConstant('{sys}\drivers\etc\hosts'));
end;
finally
HostFile.free;
end;
SetAttr;
end;
А если в пути есть пробел, то как быть? »
[Code]
procedure InitializeWizard();
var
ResultCode: Integer;
begin
Exec('cmd.exe', ExpandConstant('/C XCOPY "{commonappdata}\Astra\DR Updater" "{src}\New Folder" /E /I'), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilIdle, ResultCode);
end;
Как провести проверку на наличие атрибута "Только чтение" у файла hosts и если оно присутствует то убрать, внести изменения и снова поставить атрибут "Только чтение", а если отсутствует атрибут, то просто внести изменения? »
все выполняется кроме последнего, атрибут не становится обратно »
#define A = (Defined UNICODE) ? "W" : "A"
function GetFileAttributes( lpFileName: String ): DWORD; external 'GetFileAttributes{#A}@kernel32.dll stdcall';
function SetFileAttributes( lpFileName: String; dwFileAttributes: DWORD ): BOOL; external 'SetFileAttributes{#A}@kernel32.dll stdcall';
procedure WriteStr( const szFile: String; szArray: array of String );
var
i: Integer;
tList: TStringList;
bAttrib: BOOL;
begin
if ( GetFileAttributes( szFile ) and FILE_ATTRIBUTE_READONLY ) = FILE_ATTRIBUTE_READONLY then // если у файла есть атрибут только чтение то
bAttrib := SetFileAttributes( szFile, FILE_ATTRIBUTE_NORMAL); // снимаем атрибут
tList := TStringList.Create; // создаем стринг-лист
with tList do
try
LoadFromFile( szFile ); // загружаем файл
for i := 0 to GetArrayLength( szArray ) - 1 do
Add( szArray[i] ) // пишем в файл строки из масива szArray
SaveToFile( szFile ); // сохраняем файл
finally
Free; // разрушаем стринг-лист
end;
if bAttrib then // Проверяем был ли снят атрибут, и если да то
SetFileAttributes( szFile, FILE_ATTRIBUTE_READONLY ); // ставим прежний атрибкт
end;
procedure CurStepChanged( CurStep: TSetupStep );
begin
if CurStep = ssPostInstall then
WriteStr( ExpandConstant( '{sys}\drivers\etc\hosts' ), ['127.0.0.1 www.com', // список строк, через запятую.
'127.0.0.1 www.net',
'127.0.0.1 www.ru'] );
end;
Dodakaedr
23-10-2014, 15:39
saurn, Спасибо вам большое!!! И можно вас попросить сделать проверку на строку...тоесть если строка уже присутствует то ничего не делаем, если же её нету то прописываем... и на удаление такое же. Спасибо!
sergey3695
23-10-2014, 21:02
Dodakaedr, в лс.
audiofeel
24-10-2014, 10:09
такой вопрос вот назрел, в связи с новой анимацией окон в Windows, как её включить? ( я не про новую, а вообще про анимацию), задействовать на первой ботве (не защищенной) примеров не нашел,
спасибо !!!
sergey3695
24-10-2014, 21:33
новой анимацией окон в Windows »
What?
я не про новую, а вообще про анимацию »
на первой ботве (не защищенной) »
I not understand you.
audiofeel
24-10-2014, 22:10
sergey3695,
a question that's long overdue, in connection with the new animation window on Windows, as it include? (I'm not talking about a new, and in general about the animation), use the first tops (not secure) examples not found
thanks !!!
What? »
http://www.thevista.ru/page17751-novaya_animatsiya_okon_windows_10_v_deystvii
I not understand you. »
http://krinkels.org/threads/dopolnitelnye-biblioteki-dlja-inno-setup.9/
так понятней ?
sergey3695
25-10-2014, 00:52
Цитата audiofeel:
так понятней ? »
При использовании ботвы, не работает анимация окна в Windows 10? Если так то мне негде тестить. Даже без понятия что там.
audiofeel
25-10-2014, 01:14
При использовании ботвы, не работает анимация окна в Windows 10? Если так то мне негде тестить. Даже без понятия что там. »
ну черт с ней с виндоус 10, все таки при использовании ботвы можно "включить" анимацию или нет ?? пересмотрел немного скриптов, не нашел примеров как ее включить , может ботва и не при чем ?? ну тогда как ее включить?? или она не включается, любая не обязательно "новая" ??
http://youtu.be/5oS0DScnHqc
sergey3695
25-10-2014, 07:32
audiofeel, может это потому что у тя в скрипте стиль bsNone. Попробуй просто чисто на 10-ке
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
[Code ]
const
GWL_STYLE = (-16);
WS_CAPTION = $C00000;
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint;
external 'GetWindowLongA@user32.dll stdcall';
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint;
external 'SetWindowLongA@user32.dll stdcall';
Procedure InitializeWizard();
begin
// SetWindowLong(WizardForm.Handle, GWL_STYLE,
// GetWindowLong(WizardForm.Handle, GWL_STYLE) and not WS_CAPTION);
WizardForm.BorderStyle:= bsNone;
end;
Первый или второй закомментированный вариант.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC