Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запуск приложения свёрнутым 
:(
    Опции темы
CasperSC
Дата 21.1.2010, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 27.11.2009

Репутация: нет
Всего: 1



Здравствуйте, подскажите пожалуйста кто нибудь как сделать, чтобы приложение запускалось из автозагрузки свёрнутым, а при ручном запуске не свёрнутым. незнаю, но мож кого интересует как я вообще реализовал авторзапуск:
Код

public void AutoRunCreateOrDelete()
        {
            if (Properties.Settings.Default.AutoRun)
            {
                Microsoft.Win32.RegistryKey myKey =
    Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run\", true);
                myKey.SetValue("MyProgram.NET", Application.ExecutablePath);
                Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run\", true);
                myKey.Close();
                Registry.CurrentUser.Close();
            }
            else
            {
                Microsoft.Win32.RegistryKey myKey =
    Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run\", true);
                myKey.SetValue("MyProgram.NET", Application.ExecutablePath);
                myKey.DeleteValue("MyProgram.NET");
                myKey.Close();
                Registry.CurrentUser.Close();
            }
        }


Читал про передачу аргументов методу Main, но что-то я не понимаю как это организовать через реестр, ну всмысле я про аргументы, в смысле не знаю как их передать через реестр и записать в ключ реестра. И ещё есть вариант, узнать сколько времени работает система, но мне кажется это самы худший. так как не у всех за минуту компьютер грузиться, да и можно запустить самому программу, после включения компьютера и пользователь будет недоумевать, почему программа, то запускается свёрнутой, то нормально.
PM MAIL   Вверх
explorer
Дата 21.1.2010, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 26.2.2008

Репутация: 1
Всего: 2



Заведи ключ (параметр командной строки), присутствие которого будет означать, что нужно запустить программу сразу свернутой. Ключ передать как параметр строки просто:
Код

if (Properties.Settings.Default.AutoRun)
            {
                Microsoft.Win32.RegistryKey myKey =
    Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run\", true);
                myKey.SetValue("MyProgram.NET", Application.ExecutablePath + " -hide");
                Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run\", true);
                myKey.Close();
                Registry.CurrentUser.Close();
            }
            else
            {
                Microsoft.Win32.RegistryKey myKey =
    Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run\", true);
                myKey.SetValue("MyProgram.NET", Application.ExecutablePath + " -hide");
                myKey.DeleteValue("MyProgram.NET");
                myKey.Close();
                Registry.CurrentUser.Close();
            }

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

Это сообщение отредактировал(а) explorer - 21.1.2010, 11:36
--------------------
 
PM MAIL WWW ICQ   Вверх
CasperSC
Дата 21.1.2010, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 27.11.2009

Репутация: нет
Всего: 1



Код

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main(string[] arguments)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            if (arguments.Length != 0)
            {
                if (arguments[0] == "-hide")
                {
                    MainForm.formMain.hideForm = true; ;
                }
            }
            Application.Run(new MainForm());
        }
    }
}




 
Код

public partial class MainForm : Form
    {
        ...
       public static MainForm formMain;   //объявляю переменную
        ...
        public MainForm()
        {
            InitializeComponent();
          formMain = this;     //здесь ссылаюсь на главную форму
            Set_MouseDown_Hook(this);
        }


Код

private void MainForm_Shown(object sender, EventArgs e)
        {
            if (hideForm == true)
            {
                this.Visible = false;
            }
        }


Ну проверял с помощью MessageBox.Show("Работает");
И работает, только когда вместо MessageBox стоит this.Visible = false; форма просто не грузиться, а точнее грузиться и сразу завершается, увидел это с помощью Process Explorer'a (замена диспетчеру задач)

Это сообщение отредактировал(а) CasperSC - 21.1.2010, 12:51
PM MAIL   Вверх
KelTron
Дата 21.1.2010, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



Если я правильно понял задачу:
Код

static void Main(string[] arguments)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    bool isMinimizeOnLoad = false;
    if (arguments.Length != 0)
    {
        if (arguments[0] == "-hide")
        {
            isMinimizeOnLoad = true;
        }
    }
    Application.Run(new MainForm(isMinimizeOnLoad));
}


Код

public partial class MainForm : Form
{
    private bool isMinimizeOnLoad;

    public MainForm(bool isMinimizeOnLoad)
    {
        InitializeComponent();
        this.isMinimizeOnLoad = isMinimizeOnLoad;
    }

    private void MainForm_Load(object sender, EventArgs e)
    {
        if (this.isMinimizeOnLoad)
        {
            this.WindowState = FormWindowState.Minimized;
        }
    }
}





--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
CasperSC
Дата 21.1.2010, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 27.11.2009

Репутация: нет
Всего: 1



Цитата(KelTron @  21.1.2010,  14:46 Найти цитируемый пост)
Если я правильно понял задачу:


К сожалению нет. Во первых не свёрнута форма должна быть, а скрыта, просто иконка в трее напоминать о программе. Одно название переменной в двух разных методах немного запутывает (isMinimizeOnLoad). Мне вообще просто надо было бы реализовать получение атрибута (вроде уже реализовал) и скрытие формы если какая либо переменная связанная с атрибутом равна true. Попробую этот способ, только с скрытием формы, напишу рабочий результат, если такой будет.

-------------------------------------------------

Короче я попробовал, оказывается всё работает, мой способ почти ничем не отличается, только названием переменных и при событии главной формы Shown скрывается форма:
Код
if (this.hideForm)
            {
                this.Hide();
            }



Это сообщение отредактировал(а) CasperSC - 21.1.2010, 18:59
PM MAIL   Вверх
KelTron
Дата 21.1.2010, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



Ну всё то же самое, только добавь на форму NotifyIcon и при загрузке пихай программу в трей...

Цитата(CasperSC @  21.1.2010,  17:23 Найти цитируемый пост)
Одно название переменной в двух разных методах немного запутывает

Если переменная используется для одной и той же цели, почему бы не назвать её одинаково ..)

Добавлено через 2 минуты и 54 секунды
Чтоб скрыть форму из панели задач нужно добавить 1 строчку:
Код

if (this.isMinimizeOnLoad)
        {
            this.WindowState = FormWindowState.Minimized;
            this.ShowInTaskbar = false;
        }



--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
CasperSC
Дата 21.1.2010, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 27.11.2009

Репутация: нет
Всего: 1



Цитата(KelTron @ 21.1.2010,  18:30)
Добавлено @ 18:33
Чтоб скрыть форму из панели задач нужно добавить 1 строчку:
Код

if (this.isMinimizeOnLoad)
        {
            this.WindowState = FormWindowState.Minimized;
            this.ShowInTaskbar = false;
        }

Нет такой способ мне кажется слишком замудрённым, не из-за его якобы сложности, а из-за того, что проще сделать this.Hide(); и всё. Если использовать выше приведённый способ, то у меня автоматом в приложении появляются несостыковки. так как например при событии главной формы VisibleChanged происходит:

Код

 private void MainForm_VisibleChanged(object sender, EventArgs e)
        {
            if (this.Visible)
            {
                this.trayMenuStrip.Items[this.trayMenuStrip.Items.IndexOf(показатьToolStripMenuItem)].Text = "Скрыть";
            }
            else
            {
                this.trayMenuStrip.Items[this.trayMenuStrip.Items.IndexOf(показатьToolStripMenuItem)].Text = "Показать";
            }
        }



И соответсвенно реакция на видимость формы у того же контекстного меню:
Код

private void показатьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (this.Visible)
            {
                if (Properties.Settings.Default.UseAnimationHide)
                {
                    this.AnimatedHide();
                }
                else
                {
                    this.Hide();
                }  
            }
            else
            {
                if (Properties.Settings.Default.UseAnimationHide)
                {
                    this.AnimatedShow();
                }
                else
                {
                    //так как используется смена положения Y 
                    //в анимированном скрытии, то при выключении этой возможности
                    //форма могла остаться за экраном
                    this.Location = pointLocation;
                    this.Show();
                }  
            }
        }


Это сообщение отредактировал(а) CasperSC - 21.1.2010, 20:07
PM MAIL   Вверх
KelTron
Дата 21.1.2010, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



Цитата(CasperSC @  21.1.2010,  19:46 Найти цитируемый пост)
проще сделать this.Hide();

Ну, кстати, да так лучше. Совсем забыл, что есть такой метод ..)







--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0716 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.