programing

어떻게 만들까요?시스템 트레이에서만 실행되는 NET Windows Forms 응용 프로그램?

goodsources 2023. 5. 6. 14:56
반응형

어떻게 만들까요?시스템 트레이에서만 실행되는 NET Windows Forms 응용 프로그램?

Windows Forms 응용 프로그램을 시스템 트레이에서 실행하려면 어떻게 해야 합니까?

트레이로 최소화할 수 있는 응용프로그램이 아니라 트레이에만 존재하며 다음 이상의 기능이 없는 응용프로그램입니다.

  • 우상
  • 공구 팁 및
  • 오른쪽 클릭 메뉴

코드 프로젝트 문서 작업 트레이 응용 프로그램 만들기에서는 시스템 트레이에만 존재하는 응용 프로그램을 만드는 매우 간단한 설명과 예제를 제공합니다.

기본적으로 변경합니다.Application.Run(new Form1()); 된 줄Program.cs대신 상속받은 클래스를 시작합니다.ApplicationContext 그 에게 그고해클생의성초가합기니록다도하화자리래를 하도록 .NotifyIcon

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        Application.Run(new MyCustomApplicationContext());
    }
}


public class MyCustomApplicationContext : ApplicationContext
{
    private NotifyIcon trayIcon;

    public MyCustomApplicationContext ()
    {
        // Initialize Tray Icon
        trayIcon = new NotifyIcon()
        {
            Icon = Resources.AppIcon,
            ContextMenu = new ContextMenu(new MenuItem[] {
                new MenuItem("Exit", Exit)
            }),
            Visible = true
        };
    }

    void Exit(object sender, EventArgs e)
    {
        // Hide tray icon, otherwise it will remain shown until user mouses over it
        trayIcon.Visible = false;

        Application.Exit();
    }
}

mat1t에 따르면 - 알림을 추가해야 합니다.프로그램 아이콘을 누른 후 다음 코드와 같은 코드를 사용하여 도구 설명 및 상황에 맞는 메뉴를 설정합니다.

this.notifyIcon.Text = "This is the tooltip";
this.notifyIcon.ContextMenu = new ContextMenu();
this.notifyIcon.ContextMenu.MenuItems.Add(new MenuItem("Option 1", new EventHandler(handler_method)));

이 코드는 시스템 트레이에만 아이콘을 표시합니다.

this.notifyIcon.Visible = true;  // Shows the notify icon in the system tray

양식이 있는 경우(이유에 관계없이) 다음이 필요합니다.

this.ShowInTaskbar = false;  // Removes the application from the taskbar
Hide();

상황에 맞는 메뉴를 얻으려면 오른쪽 클릭이 자동으로 처리되지만, 왼쪽 클릭에서 일부 작업을 수행하려면 클릭 핸들러를 추가해야 합니다.

    private void notifyIcon_Click(object sender, EventArgs e)
    {
        var eventArgs = e as MouseEventArgs;
        switch (eventArgs.Button)
        {
            // Left click to reactivate
            case MouseButtons.Left:
                // Do your stuff
                break;
        }
    }

와함트앱작으로 작성했습니다.NET 1.1과 저는 양식이 필요하지 않았습니다.
먼저프로트시개작하설체정다니합으로 합니다.Main모듈에 정의되어 있습니다.
다음 요소를 .NotifyIcon그리고.ContextMenu.
다을포야합니다를 .MenuItem"종료" 또는 이와 유사합니다.
을 .ContextMenu에▁NotifyIcon.
출을 합니다.Application.Run().
MenuItem반드시 집합을 호출합니다.NotifyIcon.Visible = False,그리고나서Application.Exit()필한내용에다니추합에 하세요.ContextMenu그리고 적절하게 처리합니다 :)

  1. 마법사를 사용하여 새 Windows 응용 프로그램을 만듭니다.
  2. Form1암호에서.
  3. .cs를 제거하고 .cs 을 합니다.Form1.
  4. 을 합니다.NotifyIcon클래스를 선택하여 시스템 트레이 아이콘을 만듭니다(아이콘 추가).
  5. 상황에 맞는 메뉴를 추가합니다.
  6. 는또반에 합니다.NotifyIcon마우스를 클릭하여 마우스 오른쪽 버튼과 왼쪽 버튼을 구분하여 상황에 맞는 메뉴를 설정하고 버튼(오른쪽/왼쪽)을 누를 때마다 표시합니다.
  7. Application.Run()앱을계실위해로 을 계속 Application.Exit()그만두기 위해오라bool bRunning = true; while(bRunning){Application.DoEvents(); Thread.Sleep(10);} 다음 럼세트그를 합니다.bRunning = false;앱을 종료합니다.

"시스템 트레이" 응용 프로그램은 일반적인 Winforms 응용 프로그램일 뿐이며, Windows 시스템 트레이 영역에 아이콘을 만듭니다.sys.tray 아이콘을 만들려면 Notify를 사용합니다.아이콘 구성 요소는 도구 상자(공통 컨트롤)에서 찾을 수 있으며 다음과 같이 속성을 수정할 수 있습니다.아이콘, 도구 팁.또한 마우스 클릭 및 더블 클릭 메시지를 처리할 수 있습니다.

그리고 한 가지 더, 모양과 느낌 또는 표준 트레이 앱을 달성하기 위해 메인 폼 쇼 이벤트에 다음 줄을 추가합니다.

private void MainForm_Shown(object sender, EventArgs e)
{
    WindowState = FormWindowState.Minimized;
    Hide();
} 

저는 수락된 답변을 에 적용했습니다.NET Core, 사용되지 않는 클래스에 대해 권장되는 대체 기능 사용:

  • 컨텍스트 메뉴 -> 컨텍스트 메뉴 스트립
  • MenuItem -> ToolStripMenuItem

Program.cs

namespace TrayOnlyWinFormsDemo
{
    internal static class Program
    {
        [STAThread]
        static void Main()
        {
            ApplicationConfiguration.Initialize();
            Application.Run(new MyCustomApplicationContext());
        }
    }
}

MyCustomApplicationContext.cs

using TrayOnlyWinFormsDemo.Properties;  // Needed for Resources.AppIcon

namespace TrayOnlyWinFormsDemo
{
    public class MyCustomApplicationContext : ApplicationContext
    {
        private NotifyIcon trayIcon;

        public MyCustomApplicationContext()
        {
            trayIcon = new NotifyIcon()
            {
                Icon = Resources.AppIcon,
                ContextMenuStrip = new ContextMenuStrip()
                {
                    Items = { new ToolStripMenuItem("Exit", null, Exit) }
                },
                Visible = true
            };
        }

        void Exit(object? sender, EventArgs e)
        {
            trayIcon.Visible = false;
            Application.Exit();
        }
    }
}

제가 알기로는 여전히 양식을 사용하여 신청서를 작성해야 하지만 양식에 대한 컨트롤이 없고 표시되지도 않습니다.알림 사용응용프로그램을 작성하는 아이콘(MSDN 샘플은 여기에서 찾을 수 있음).

다음은 Visual Studio 2010을 사용한 방법입니다.NET 4

  1. Windows Forms 응용 프로그램 만들기, 속성에서 '단일 인스턴스 응용 프로그램 만들기' 설정
  2. 컨텍스트 메뉴 스트립 추가
  3. 상황에 맞는 메뉴 스트립에 일부 항목을 추가하고, 이 항목을 두 번 클릭하여 '종료'(두 번 클릭) -> 핸들러 -> me와 같은 핸들러를 가져옵니다.닫기()
  4. 알림 추가아이콘, 디자이너가 방금 만든 것으로 설정한 컨텍스트 메뉴 스트립에서 아이콘을 선택합니다(Visual Studio 폴더의 'common7...'에서 일부를 찾을 수 있습니다).
  5. 디자이너에서 양식의 속성을 설정합니다.FormBorderStyle:없음, ShowIcon:false, ShowInTaskbar:false, 불투명도:0%, WindowState:최소화됨
  6. Form1_Load 끝에 Me.Visible=false를 추가합니다. +를 사용할 때 아이콘이 숨겨집니다.
  7. 실행하고 필요에 따라 조정합니다.

알림 영역 응용 프로그램에 매우 친숙한 프레임워크입니다.알림을 추가하기에 충분합니다.기본 양식 및 자동 생성된 코드를 아래 코드로 변경하려면 아이콘:

public partial class Form1 : Form
{
    private bool hidden = false;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.ShowInTaskbar = false;
        //this.WindowState = FormWindowState.Minimized;
        this.Hide();
        hidden = true;
    }

    private void notifyIcon1_Click(object sender, EventArgs e)
    {
        if (hidden) // this.WindowState == FormWindowState.Minimized)
        {
            // this.WindowState = FormWindowState.Normal;
            this.Show();
            hidden = false;
        }
        else
        {
            // this.WindowState = FormWindowState.Minimized;
            this.Hide();
            hidden = true;
        }
    }
}

.Net 6에서 저는 다음과 같이 반에서 열심히 공부해야 했습니다.

private NotifyIcon trayIcon;
private ContextMenuStrip contextMenu1;
private ToolStripMenuItem menuItem1;

public MyCustomApplicationContext()
{
    contextMenu1 = new System.Windows.Forms.ContextMenuStrip();
    menuItem1 = new System.Windows.Forms.ToolStripMenuItem();
    this.menuItem1.Text = "E&xit";
    this.menuItem1.Click += new System.EventHandler(Exit);
    this.contextMenu1.Items.AddRange(
            new System.Windows.Forms.ToolStripMenuItem[] {this.menuItem1 });
    trayIcon = new NotifyIcon(){Icon = Resources.AppIcon, ContextMenuStrip = this.contextMenu1, Visible = true };            

}
notifyIcon1->ContextMenu = gcnew

System::Windows::Forms::ContextMenu();
System::Windows::Forms::MenuItem^ nIItem = gcnew
System::Windows::Forms::MenuItem("Open");

nIItem->Click += gcnew System::EventHandler(this, &your_class::Open_NotifyIcon);

notifyIcon1->ContextMenu->MenuItems->Add(nIItem);

양식을 작성하고 수정한 후 다음으로 전달할 수 있습니다.Application.Run매개 변수로:

    internal static class Program
    {
        /// <summary>
        ///  The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            ApplicationConfiguration.Initialize();
            var form = new Form1();
            form.Hide();
            form.Opacity = 0;
            form.ShowInTaskbar = false;
            Application.Run(form);
        }
    }

추가할 항목NotifyIcon그리고.ContextMenu(필요한 경우) 일반 앱으로 설계 시 양식에 추가할 수 있습니다.다음 항목을 확인합니다.Notifyicon이라Visible아이콘이 연결되어 있습니다.이렇게 하면 나중에 어떤 이유로든 필요한 양식으로 작업할 수 있습니다.

간단히 추가

this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;

양식 개체로 이동합니다.시스템 트레이에는 아이콘만 표시됩니다.

언급URL : https://stackoverflow.com/questions/995195/how-can-i-make-a-net-windows-forms-application-that-only-runs-in-the-system-tra

반응형