Войти

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

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, при установке можно выбрать, только Английский и русский?

olmak
18-01-2012, 11:55
Есть такая задача - перепаковать дистрибутив 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, она вытаскивается в лучшем случае бинарником
короче никак

XXXler
18-01-2012, 12:48
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
А на последней странице?! Там ведь должно быть как "обычно" или же эту картинку надо "подгонять"! »
Ты сам хоть чего-нибудь делать будешь? Если не видишь, чего в трех строчках написано, брось это дело, ты не хочешь учится. А без желания ничего не получится. программирование не дом - дом можно из кусков наляпать как попало, и пускай стоит. Программу из кусков не наляпаешь, нужно ЧИТАТЬ И ПОНИМАТЬ то. что читаешь.
Делай так-же, как на первой сделано. Для этого есть абсолютно все, что тебе нужно в приведенном коде.

Serega
18-01-2012, 20:29
дом можно из кусков наляпать как попало, и пускай стоит »
Совсем не удачное сравнение... Если как попало, то дом стоять точно не будет ;)

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 из этого скрипта ? помогите чтото не выходит

Serega
19-01-2012, 19:04
хоть кто-то откликнулся, а не пнул.»
Ну уж вам то грех такое говорить, вам постоянно кто-нибудь подсказывает, но а то, что вы сами не хотите учиться, это уж извините, только ваша вина.
Запомните одну золотую истину, никто ничего за вас делать не будет!
КАК отключить сообщение о нехватке места на ЖД »
Пример для расширенной версии


[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
Ну уж вам то грех такое говорить, вам постоянно кто-нибудь подсказывает, но а то, что вы сами не хотите учиться, это уж извините, только ваша вина.
Запомните одну золотую истину, никто ничего за вас делать не будет!

СПАСИБО ВАМ ОГРОМНОЕ!!! Ну такой я, - трудно мне догнать...

А на обычной версии НЕТ способа...

По поводу "Назначенных заданий", - стал разбираться, столкнулся с проблемой, КАК задачу "вынести галочкой", на страницу "Дополнительные задания" (там же где ярлыки предлагается создать).

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

YURSHAT
20-01-2012, 03:54
А на обычной версии НЕТ способа... »
Есть конечно, используйте 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