Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]
TROY Diamond
17-01-2012, 19:45
Как добавить "задание" в "Назначенные задания" - файл .job (Windows\Tasks)?
Gnom_aka_Lexander
17-01-2012, 21:04
Ну как, ну как, сделать так: »
Очень просто. Неужели это у когото может вызывать трудности?
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[*Code]
procedure InitializeWizard();
begin
WizardForm.WizardBitmapImage.Align := alClient;
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
with TLabel.Create(WizardForm) do
begin
Parent := WizardForm.WelcomePage;
Caption := WizardForm.WelcomeLabel2.Caption;
Font := WizardForm.WelcomeLabel2.Font;
Font.Color := clWhite;
WordWrap := True;
Transparent := True;
SetBounds(ScaleX(40),ScaleY(79),ScaleX(301),ScaleY(92));
end;
with TLabel.Create(WizardForm) do
begin
Parent := WizardForm.WelcomePage;
Caption := WizardForm.WelcomeLabel1.Caption;
Font := WizardForm.WelcomeLabel1.Font;
Font.Color := clWhite;
WordWrap := True;
Transparent := True;
SetBounds(ScaleX(40),ScaleY(24),ScaleX(301),ScaleY(35));
end;
end;
А вообще - неужели трудно почитать справку? ее уже и на русский перевели вполне грамотно, по моему.
TROY Diamond
17-01-2012, 21:47
1. Значение "AppMutex", - дайте, пожалуйста, полный скрипт с его использованием!
Читай справку, типа скажете...
Вот, что это такое и куда вставлять, - я вообще не понял:
CreateMutex(nil, False, 'MyProgramsMutexName');
CreateMutex(NULL, FALSE, "MyProgramsMutexName");
2. "Определение класса приложения", как это как его определить?
Что это:
function NextButtonClick(CurPage: Integer): Boolean;
var
sz:Integer;
s:string;
h:Longint;
begin
Result:=True;
If CurPage=1
then
begin
h:=FindWindowByClassName('My-Program-WINDOW');
If h<>0 then
SendMessage(h, 16, 0, 0); //Вот это и есть закрытие программы
end
else
If CurPage=6 then
Как мне название своего приложения записать и куда?
Мне нужно, чтобы если приложение запущено появлялось сообщение "Один экземпляр уже запущен", с предложением его закрыть.
А ещё лучше, чтобы приложение ЗАКРЫВАЛОСЬ САМО - ВООБЩЕ БЕЗ ЗАПРОСА, как при установке, так и при удалении...
TROY Diamond
17-01-2012, 22:03
Очень просто. Неужели это у когото может вызывать трудности?
А как "наоборот" наложить на все, НО КРОМЕ ПЕРВОЙ И ПОСЛЕДНЕЙ? Один вариант: одну и туже картинку, второй на каждую страницу разные...
СПАСИБО! Да, возникают может с остальными вопросами поможете?!
А вообще - неужели трудно почитать справку? ее уже и на русский перевели вполне грамотно, по моему.
Читал... и вообще не понял:
CreateMutex(nil, False, 'MyProgramsMutexName');
CreateMutex(NULL, FALSE, "MyProgramsMutexName");
И это, что:
function NextButtonClick(CurPage: Integer): Boolean;
var
sz:Integer;
s:string;
h:Longint;
begin
Result:=True;
If CurPage=1
then
begin
h:=FindWindowByClassName('My-Program-WINDOW');
If h<>0 then
SendMessage(h, 16, 0, 0); //Вот это и есть закрытие программы
end
else
If CurPage=6 then
TROY Diamond
18-01-2012, 00:21
Где взять дополнительные языки: Украинский, белорусский, например?
и почему когда я добавляю множество языков в секцию Lahguages, при установке можно выбрать, только Английский и русский?
Есть такая задача - перепаковать дистрибутив flylinkdc++(FlylinkDC-x86-r407-build-8559) c тем , чтобы удалить из него ненужный Yandex Bar . Распаковал его c помощью Universal Extractor 1.61 , нашел в папке tmp YandexPackSetup-flylinkdc2-20111031.exe - его удаляем . Но вот проблема , при попытке перекомпилировать (использую Inno Setup v 5.4.2 RUS Portable) ругается Required function or procedure 'Postfix' no found в строке AppName=FlylinkDC++{code:Postfix| }
Ссылок на postfix немало . Что-то внятное по поводу где взять функцию postfix точно подходящую в данном случае в Сети не нашел. Может опытные товарищи будут так добры направить на путь истинный ?
R.i.m.s.k.y.
18-01-2012, 12:04
olmak, Postfix - это процедура из секции Code, она вытаскивается в лучшем случае бинарником
короче никак
olmak
Гугл (http://google.com/search?q=innosetup+%22{code%3APostfix|+}%22)
function Postfix(Separator: String): String;
begin
if Is64BitInstallMode then begin
Separator := Separator + 'x64';
Result := Separator;
end;
end;
end;
TROY Diamond
18-01-2012, 16:41
Очень просто. Неужели это у кого-то может вызывать трудности?
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[*Code]
procedure InitializeWizard();
begin
WizardForm.WizardBitmapImage.Align := alClient;
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
with TLabel.Create(WizardForm) do
begin
Parent := WizardForm.WelcomePage;
Caption := WizardForm.WelcomeLabel2.Caption;
Font := WizardForm.WelcomeLabel2.Font;
Font.Color := clWhite;
WordWrap := True;
Transparent := True;
SetBounds(ScaleX(40),ScaleY(79),ScaleX(301),ScaleY(92));
end;
with TLabel.Create(WizardForm) do
begin
Parent := WizardForm.WelcomePage;
Caption := WizardForm.WelcomeLabel1.Caption;
Font := WizardForm.WelcomeLabel1.Font;
Font.Color := clWhite;
WordWrap := True;
Transparent := True;
SetBounds(ScaleX(40),ScaleY(24),ScaleX(301),ScaleY(35));
end;
end;
А на последней странице?! Там ведь должно быть как "обычно" или же эту картинку надо "подгонять"!
Нужно, чтобы, либо эта же картинка была, либо "обычная" (164x314) А то сплюснуто получилось - используется большая картинка, но подогнана под стандарт.
НАВЕРНОЕ, НАДО, НАОБОРОТ, ЧТОБЫ ОБЫЧНАЯ, "ТАК И БЫЛА", А "БОЛЬШАЯ" - ПОДГРУЖАЛАСЬ, НАПРИМЕР ИЗ TEMP...
Или одну и туже большую, но в начале и в конце и надо учитывать, что в конце всё "по-другому" и "Запустить программу" ещё есть!
Gnom_aka_Lexander
18-01-2012, 16:58
А на последней странице?! Там ведь должно быть как "обычно" или же эту картинку надо "подгонять"! »
Ты сам хоть чего-нибудь делать будешь? Если не видишь, чего в трех строчках написано, брось это дело, ты не хочешь учится. А без желания ничего не получится. программирование не дом - дом можно из кусков наляпать как попало, и пускай стоит. Программу из кусков не наляпаешь, нужно ЧИТАТЬ И ПОНИМАТЬ то. что читаешь.
Делай так-же, как на первой сделано. Для этого есть абсолютно все, что тебе нужно в приведенном коде.
дом можно из кусков наляпать как попало, и пускай стоит »
Совсем не удачное сравнение... Если как попало, то дом стоять точно не будет ;)
TROY Diamond, по всей видимости вы решили освоить Inno Setup наскоком за несколько дней, но уверяю вас, так у вас ничего не получится.
Начните с простых примеров, сначала без использования секции [Сode], затем разобрав и поняв их, переходите к более сложным примерам...
На данный момент, я так понимаю, у вас в голове каша из-за того, что вы прыгаете с одного на другое, даже не разобравшись как работают предложенные вам варианты.
P.S.
Как добавить "задание" в "Назначенные задания" »
Можно почитать здесь (http://support.microsoft.com/kb/313565/ru) и здесь (http://support.microsoft.com/kb/814596/ru)
Пример с использованием Schtasks.exe
procedure InitializeWizard();
var
ResultCode: Integer;
begin
Exec('schtasks.exe', '/create /sc daily /st 22:00:00 /tn TestMyProg /tr "\"{#CompilerPath}Examples\MyProg.exe"\"',
ExpandConstant('{sys}'), SW_HIDE, ewNoWait, ResultCode);
end;
Много примеров командной строки Schtasks.exe (http://www.windowsfaq.ru/content/view/83/57/)
Gnom_aka_Lexander
18-01-2012, 22:00
Если как попало, то дом стоять точно не будет »
Смотря какими гвоздями все это заколотить. Извиняюсь за оффтоп...
TROY Diamond
18-01-2012, 22:24
Serega
Спасибо хоть кто-то откликнулся, а не пнул. Мне нужно, чтобы при входе пользователя в систему запускалась прога и сворачивалась в трей. Автозапуск...
Может и со СТАРЫМ вопросом поможете - КАК отключить сообщение о нехватке места на ЖД, Вы говорили, что можно как-то автоматом нажать "Да"
...
А читать я читаю, только вопросов ещё больше появляется!
wertulll
19-01-2012, 15:09
ребят может ктонибуть удалить весь ISDone из этого скрипта ? помогите чтото не выходит
хоть кто-то откликнулся, а не пнул.»
Ну уж вам то грех такое говорить, вам постоянно кто-нибудь подсказывает, но а то, что вы сами не хотите учиться, это уж извините, только ваша вина.
Запомните одну золотую истину, никто ничего за вас делать не будет!
КАК отключить сообщение о нехватке места на ЖД »
Пример для расширенной версии
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
ExtraDiskSpaceRequired=536870912000
Compression=lzma2/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes
[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl
[Code]
const
BM_CLICK = $00F5;
function FindWindowEx(Parent, Child: Longint; ClassName, WindowName: PChar): Longint; external 'FindWindowExA@user32.dll stdcall';
var
tmr: TTimer;
procedure Timer(Sender: TObject);
var
hWnd: Longint;
begin
hWnd := FindWindowByWindowName(SetupMessage(msgDiskSpaceWarningTitle)); // ищем сообщение о нехватке места
if hWnd > 0 then // если нашли
PostMessage(FindWindowEx(hWnd, 0, 'Button', PChar(SetupMessage(msgButtonYes))), BM_CLICK, 0, 0); // нажимаем на кнопку
end;
procedure InitializeWizard;
begin
tmr := TTimer.Create(WizardForm);
with tmr do
begin
Enabled := False;
Interval := 5;
OnTimer := @Timer;
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
tmr.Enabled := CurPageID = wpSelectDir;
end;
TROY Diamond
19-01-2012, 19:56
Ну уж вам то грех такое говорить, вам постоянно кто-нибудь подсказывает, но а то, что вы сами не хотите учиться, это уж извините, только ваша вина.
Запомните одну золотую истину, никто ничего за вас делать не будет!
СПАСИБО ВАМ ОГРОМНОЕ!!! Ну такой я, - трудно мне догнать...
А на обычной версии НЕТ способа...
По поводу "Назначенных заданий", - стал разбираться, столкнулся с проблемой, КАК задачу "вынести галочкой", на страницу "Дополнительные задания" (там же где ярлыки предлагается создать).
Нужно, чтобы если пользователь оставить галочку (по умолчанию она должна стоять), то задача добавится и прога будет загружаться при входе пользователя в систему и сворачиваться в трей...
А на обычной версии НЕТ способа... »
Есть конечно, используйте InnoCallback.dll.
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
ExtraDiskSpaceRequired=536870912000
Compression=lzma2/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes
[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl
[Files]
Source: InnoCallback.dll; Flags: dontcopy
[ Code]
type
TimerProc = procedure(Sender: TObject);
const
BM_CLICK = $00F5;
function FindWindowEx(Parent, Child: Longint; ClassName, WindowName: PChar): Longint; external 'FindWindowExA@user32.dll stdcall';
function CallbackAddr(Callback: TimerProc; ParamCount: Integer): LongWord; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
procedure Timer(Sender: TObject);
var
hWnd: Longint;
begin
hWnd := FindWindowByWindowName(SetupMessage(msgDiskSpaceWarningTitle)); // ищем сообщение о нехватке места
if hWnd > 0 then // если нашли
PostMessage(FindWindowEx(hWnd, 0, 'Button', PChar(SetupMessage(msgButtonYes))), BM_CLICK, 0, 0); // нажимаем на кнопку
end;
procedure InitializeWizard;
begin
SetTimer(WizardForm.Handle, 1, 5 {задаём интервал}, CallbackAddr(@Timer, 0));
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectDir then
KillTimer(WizardForm.Handle, 0);
end;
R.i.m.s.k.y.
20-01-2012, 08:44
хоть кто-то откликнулся, а не пнул »
Хамишь, парниша!
Ты лично мне через ЛС парил моск целую неделю, и не говори, епт, что впустую! Ответы я тебе давал на что знал, просто ты настолько ленивый, что не можешь разобраться даже с Task!
КАК задачу "вынести галочкой", на страницу "Дополнительные задания" (там же где ярлыки предлагается создать)
При этом еще и умудряешься портить скрипты, код и примеры, которые тебе дают в помощь, а потом жалишься "почему не работает", даже не утруждая себя сообщением об ошибке, типа мы помогли - мы и виноваты что не работает!
И после этого ты, блеатЪ, заявляешь хоть кто-то откликнулся, а не пнул
http://rghost.ru/35997729/image.png (http://rghost.ru/35997729.view)
У модераторов прошу прощения.
Можете конечно отправить меня в баню, но вместе с этим вот троллем. Все его сообщения - скрытые оскорбления и сексуальное насилие над моском.
wertulll
20-01-2012, 09:18
да замудрёный скриптец так и не выходит :sorry:
R.i.m.s.k.y.
20-01-2012, 09:44
wertulll, глянул краем уха
если исдоне удалять - там ничего не останется
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.