Как запустить программу С# без активного окна?

Я пытаюсь создать программу на С#, но я не хочу, чтобы окно было активным, когда я его открываю. Я хотел бы, чтобы он открывался в фоновом режиме, а окно отображалось поверх других моих программ, за исключением того, что я хочу, чтобы мое активное окно оставалось прежним. Это потому, что я использую полноэкранные программы, и я не хочу, чтобы мое маленькое всплывающее окно выводило меня из полноэкранного режима.

Использование программы (может помочь понять, что мне нужно): я создаю набор макросов, которые превращают запасную мышь в медиа-контроллер. Колесо прокрутки управляет громкостью, левая кнопка управляет воспроизведением/паузой и т. д. Я использую Spotify для музыки и хочу иметь возможность изменять громкость Spotify независимо от общей громкости моего компьютера. Я уже понял это, используя код здесь. Я хочу, чтобы отображалось всплывающее окно, сообщающее мне, что при использовании колеса прокрутки я изменяю громкость Spotify, а не глобальную громкость. Я хочу иметь возможность активировать макрос, отображать всплывающее окно, изменять громкость по своему желанию, а затем деактивировать макрос, не выходя из полноэкранных приложений. Надеюсь, это поможет, спасибо!

Программное использование Редактировать: Вот просто видео с объяснением, должно быть проще, чем пытаться объяснить. Чтобы уточнить, я хочу, чтобы программа не меняла активированное окно при запуске и всегда была самой верхней, без необходимости сначала активировать ее. Спасибо!!! https://streamable.com/2pewz

Я использую программу QuickMacros, чтобы открыть всплывающее окно, и я пробовал там несколько разных настроек, но мне не повезло. У меня нет опыта работы с C#, поэтому я ничего не пробовал внутри C#.

Мой код не имеет отношения к вопросу, но вот на всякий случай. Все это дает мне возможность перемещать всплывающее окно.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SpotifyPopup
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {

    }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                this.Left += e.X - lastPoint.X;
                this.Top += e.Y - lastPoint.Y;
            }
        }
        Point lastPoint;
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            lastPoint = new Point(e.X, e.Y);
        }

        private void label1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                this.Left += e.X - lastPoint2.X;
                this.Top += e.Y - lastPoint2.Y;
            }
        }
        Point lastPoint2;
        private void label1_MouseDown(object sender, MouseEventArgs e)
        {
            lastPoint2 = new Point(e.X, e.Y);
        }
    }

        } 

Спасибо за помощь!


person KPopOG    schedule 03.01.2019    source источник


Ответы (2)


Ваш вопрос немного неясен, но если я прав, вы хотите запустить приложение в свернутом состоянии, для этого просто используйте код ниже в конструкторе формы.

this.WindowState = FormWindowState.Minimized;

И когда ваше событие запущено, и вы хотите, чтобы ваше приложение было на вершине, просто используйте

this.TopMost = true;
this.WindowState = FormWindowState.Normal;

и для правильного позиционирования вашей формы вы можете использовать этот ответ

Редактировать

Хорошо, теперь ваши потребности более ясны, это демонстрация того, что, я думаю, вы хотите, в этом примере форма начинается свернутой и появляется наверху колесика мыши, а затем переходит в фоновый режим при простое, вы можете добавить больше событий в код и адаптируйте его под свои нужды,
я использовал глобальные хуки для этой демонстрации благодаря этой ссылке, поэтому не забудьте добавить правильный пакет nuget на основе предоставленной ссылки.
вот код:

using Gma.System.MouseKeyHook;
using System;
using System.Drawing;
using System.Windows.Forms;

public class Form1 : System.Windows.Forms.Form
{
    private Timer timer;
    private IKeyboardMouseEvents m_GlobalHook;

    [STAThread]
    static void Main()
    {
        Application.Run(new Form1());
    }

    public Form1()
    {
        Subscribe();

        timer = new Timer();
        timer.Interval = 1000;
        timer.Tick += Timer_Tick;

        // Set up how the form should be displayed.
        ClientSize = new System.Drawing.Size(292, 266);
        Text = "Notify Icon Example";

        WindowState = FormWindowState.Minimized;

        Rectangle workingArea = Screen.GetWorkingArea(this);
        Location = new Point(workingArea.Right - Size.Width - 100,
                                  workingArea.Bottom - Size.Height - 100);
    }

    private void Timer_Tick(object sender, EventArgs e)
    {
        WindowState = FormWindowState.Minimized;
        TopMost = false;
    }

    public void Subscribe()
    {
        // Note: for the application hook, use the Hook.AppEvents() instead
        m_GlobalHook = Hook.GlobalEvents();

        m_GlobalHook.MouseWheel += M_GlobalHook_MouseWheel;
    }

    private void M_GlobalHook_MouseWheel(object sender, MouseEventArgs e)
    {
        WindowState = FormWindowState.Normal;
        TopMost = true;
        timer.Stop();
        timer.Start();
    }

    public void Unsubscribe()
    {
        m_GlobalHook.MouseDownExt -= M_GlobalHook_MouseWheel;

        //It is recommened to dispose it
        m_GlobalHook.Dispose();
    }

}
person hessam hedieh    schedule 03.01.2019
comment
Спасибо за ваш ответ! Мне повезло с свернутым состоянием окна, но большая часть верхней части не работала. Окно запускается в свернутом виде, но ничего не отображает, пока не будет нажато. - person KPopOG; 03.01.2019
comment
@KPopOG, я отредактировал свой ответ, посмотрите, поможет ли это. - person hessam hedieh; 03.01.2019
comment
Немного... позвольте мне добавить контекст в мой первоначальный пост о целях проекта, и это может быть немного полезнее. Я не хотел добавлять слишком много ненужного чтения, но мог бы помочь вам. - person KPopOG; 03.01.2019
comment
Хорошо, я закончил. Добавлю еще немного информации, надеюсь будет полезно. Спасибо! - person KPopOG; 03.01.2019
comment
Я возился с тем, что вы предложили еще немного, но не повезло. Любые другие идеи? - person KPopOG; 04.01.2019
comment
@KPopOG, посмотри и дай мне знать, что это помогает. - person hessam hedieh; 04.01.2019
comment
Ах! Это так близко. Я чувствую себя ужасно из-за того, что вы делаете всю эту работу... Я расскажу немного подробнее... редактируя исходный пост. - person KPopOG; 05.01.2019
comment
@KPopOG, мне так не кажется, мне нравится помогать, и я учусь на этом, я видел видео, но до сих пор не уверен, что понял, так что ты просто хочешь, чтобы оно всегда было на высоте с момента его запуска?, хорошо, так что запустите окно в состоянии Normal вместо Minimized и пусть TopMost = true выполняет работу, если это не то, что вы хотите, пожалуйста, запустите демонстрационный код, который я отправил, и точно сообщите, какое поведение следует изменить, если вы считаете, что есть что объяснить, возможно, мы можем связаться через skype найдите вопрос и ответ и отредактируйте наш здесь для справки другим. - person hessam hedieh; 05.01.2019

Посмотрите здесь: Перенесите окно на передний план в WPF

В этой теме обсуждается общий механизм представления, активации и отображения окон с помощью WPF.

person tordam    schedule 03.01.2019
comment
ОП говорит о winforms, а не о WPF - person hessam hedieh; 03.01.2019