Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.05.2014, 00:52
Fakov Fakov вне форума
Прохожий
 
Регистрация: 31.01.2010
Сообщения: 6
Репутация: 10
По умолчанию Независимая форма

Подскажите. Без злого умысла пытаюсь сделать программу, которая после запуска оставляет в автозагрузке системы форму. Не пойму, объясните: могу ли я сделать в одном проекте две формы таким образом, чтобы одна форма была как бы основной, которую использует пользователь, а вторая - техническая, которая при запуске первой формы запускается и прячется в автозагрузке, и что самое главное - после запуска системы загружается уже только вторая форма.

Разъясните пожалуйста логику создания таких форм, спасибо.
Ответить с цитированием
  #2  
Старый 28.05.2014, 01:46
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Fakov
Подскажите. Без злого умысла пытаюсь сделать программу, которая после запуска оставляет в автозагрузке системы форму. Не пойму, объясните: могу ли я сделать в одном проекте две формы таким образом, чтобы одна форма была как бы основной, которую использует пользователь, а вторая - техническая, которая при запуске первой формы запускается и прячется в автозагрузке, и что самое главное - после запуска системы загружается уже только вторая форма.

Разъясните пожалуйста логику создания таких форм, спасибо.
Можно использовать параметры командной строки, а в самом приложении проверять, если приложение было запущено с нужным параметром, то создавать вторую форму вместо первой.

Вот в этом примере если запустить приложение с параметром "autostart", то будет создана вторая форма, иначе первая:
Код:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;

  if (ParamCount > 0) and (ParamStr(1) = 'autostart')
    then Application.CreateForm(TForm2, Form2)
    else Application.CreateForm(TForm1, Form1);

  Application.Run;
end.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Fakov (28.05.2014)
  #3  
Старый 28.05.2014, 07:49
Fakov Fakov вне форума
Прохожий
 
Регистрация: 31.01.2010
Сообщения: 6
Репутация: 10
По умолчанию

А где этот параметр указывать в программе?
Еще какие-то варианты есть? Вообще может можно делать хайд формы если программа запущена не пользователем, а через автозапуск???
Ответить с цитированием
  #4  
Старый 28.05.2014, 09:51
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Fakov
А где этот параметр указывать в программе?
Это не в программе, а в строке запуска приложения, т.е. например нажимаем "Пуск" -> "Выполнить" (или нажимаем горячие клавиши Win+R) и там вводим так (без кавычек): "C:\Путь_к_программе\Project1.exe autostart" - теперь приложение запустится и у него главной формой будет Form2, а не Form1
Цитата:
Сообщение от Fakov
Еще какие-то варианты есть? Вообще может можно делать хайд формы если программа запущена не пользователем, а через автозапуск???
Насколько мне известно нет никакого различия между тем было ли запущено приложение через автозагрузку или же оно было запущено через проводник "вручную".

p.s. Кстати тот вариант, что я предложил, это сокращённая версия первоначального варианта, я его сократил прямо в редакторе сообщений перед отправкой на форум не проверив его на работоспособность и он оказался неработоспособным - Delphi не всегда адекватно реагирует на правки в dpr-файле.

Вот первоначальная, рабочая версия:
Код:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  if (ParamCount > 0) and (ParamStr(1) = 'autostart') then
  begin
    Application.CreateForm(TForm2, Form2);
  end else
  begin
    Application.CreateForm(TForm1, Form1);
  end;

  Application.Run;
end.
Ответить с цитированием
  #5  
Старый 28.05.2014, 15:47
Fakov Fakov вне форума
Прохожий
 
Регистрация: 31.01.2010
Сообщения: 6
Репутация: 10
По умолчанию

то есть я правильно понимаю, что нельзя сделать "дроп"-форму от приложения, которая была бы как самостоятельная программа? Чтобы сделать скрытое приложение, необходимо делать непосредственно новую application?
Если так, тогда второй вопрос - при запуске приложения, как сделать, чтобы скачивался необходимый exe и запускался?
Ответить с цитированием
  #6  
Старый 28.05.2014, 16:18
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Fakov
то есть я правильно понимаю, что нельзя сделать "дроп"-форму от приложения, которая была бы как самостоятельная программа?
Любое окно в Windows (а форма это тоже окно) всегда принадлежит какому либо процессу (приложению). Форма (окно) не принадлежащее процессу (приложению) - такого быть не может и даже не имеет никакого смысла.
Цитата:
Сообщение от Fakov
Чтобы сделать скрытое приложение, необходимо делать непосредственно новую application?
Почему же? В моём примере одно приложение с двумя формами, но при запуске "активируется" (становится главной) только одна из них в зависимости от параметра командной строки.
И что значит скрытое? Не видимое на экране что-ли? Для этого не нужно отдельного приложения - достаточно вызвать метод Hide у формы и она скроется.
Цитата:
Сообщение от Fakov
Если так, тогда второй вопрос - при запуске приложения, как сделать, чтобы скачивался необходимый exe и запускался?
Запускать приложения можно API-функциями (в порядке уменьшения предпочтения) CreateProcess, ShellExecute, WinExec.
А скачивать откуда? С интернета что-ли? Можешь использовать для этого стандартные компоненты с вкладки "Indy Clients" (компоненты IdHTTP, IdFTP и прочие). Или вот мне ещё нравиться качать с помощью WinINet, или можно ещё через WinHTTP.
Ответить с цитированием
  #7  
Старый 28.05.2014, 19:04
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

Что-то мне вопросы автора на этом и другом форумах напоминают подготовку к написанию трояна или какой другой не слишком полезной программы.
__________________
Не стоит путать форумы с богадельнями. © Bargest
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Freeman за это полезное сообщение:
Alegun (28.05.2014), Fakov (29.05.2014)
  #8  
Старый 29.05.2014, 09:50
Fakov Fakov вне форума
Прохожий
 
Регистрация: 31.01.2010
Сообщения: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от Freeman
Что-то мне вопросы автора на этом и другом форумах напоминают подготовку к написанию трояна или какой другой не слишком полезной программы.
хах, пока не прочел - даже не думал, что принцип-то как раз трояновый! =D вообще хочу автообновление программы сделать без запуска программы.
Ответить с цитированием
  #9  
Старый 29.05.2014, 12:01
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Fakov
...хочу автообновление программы сделать без запуска программы.
Сборка в любом случае запускается - принцип такой - запуск, проверка наличия обновления, если есть то запустить обновлялку закрыв основную, обновить прогу и снова запустить. По-любому должны быть два независимых экзешника и "обновлятор" кстати можно вшить в ресурсы основного, для упрощения
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:16.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter