You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将C#程序最小化到系统托盘?

没问题!把软件最小化到系统托盘其实是个挺常见的需求,不同编程语言和操作系统的实现思路略有不同,我给你整理了几个主流场景的方案,你可以根据自己的开发环境参考:

针对Windows平台的实现

用C#/.NET(WinForms)实现

  • 先在你的WinForms项目里添加一个NotifyIcon控件到主窗体上
  • 给NotifyIcon设置Icon属性(可以用本地图标文件),并把Visible属性设为true
  • 处理窗体的Resize事件:当窗体被最小化时,将窗体的Visible设为false,确保托盘图标保持显示
  • 可以给NotifyIcon绑定一个ContextMenuStrip右键菜单,添加“恢复窗口”和“退出”选项:点击“恢复”时把窗体Visible设为true并恢复窗口状态,点击“退出”则关闭程序

用Python实现(推荐pystray库)

先通过pip安装依赖:

pip install pystray pillow

示例代码:

import pystray
from PIL import Image

# 定义菜单点击事件
def on_quit(icon, item):
    icon.stop()
    # 这里可以添加关闭程序的逻辑

def on_show_window(icon, item):
    # 这里写恢复主窗口的逻辑,比如显示隐藏的窗口
    print("恢复窗口")

# 加载托盘图标(可以替换成你的图标文件路径)
try:
    image = Image.open("app_icon.ico")
except:
    # 如果没有图标文件,用PIL生成一个简单的占位图标
    image = Image.new("RGB", (64, 64), (255, 255, 255))

# 创建右键菜单
menu = pystray.Menu(
    pystray.MenuItem("显示窗口", on_show_window),
    pystray.MenuItem("退出", on_quit)
)

# 初始化托盘图标
icon = pystray.Icon("my_app", image, "我的应用", menu)

# 启动托盘服务(这会阻塞主线程,若有UI需放在子线程处理)
icon.run()
针对macOS平台的实现

macOS的系统托盘对应菜单栏图标,用Swift实现的思路如下:

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
    var statusItem: NSStatusItem!
    var mainWindow: NSWindow?

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        // 创建状态栏图标项
        statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
        if let button = statusItem.button {
            button.image = NSImage(named: NSImage.Name("MenuIcon"))
            button.action = #selector(toggleMainWindow(_:))
            button.target = self
        }
        
        // 隐藏Dock上的应用图标(可选)
        NSApp.setActivationPolicy(.accessory)
        
        // 获取主窗口
        mainWindow = NSApplication.shared.windows.first
    }

    @objc func toggleMainWindow(_ sender: Any?) {
        guard let window = mainWindow else { return }
        // 切换窗口显示/隐藏状态
        if window.isHidden {
            window.makeKeyAndOrderFront(nil)
        } else {
            window.orderOut(nil)
        }
    }
}
针对Linux平台的实现

以Python+PyQt5为例,实现系统托盘功能:
先安装依赖:

pip install pyqt5

示例代码:

from PyQt5.QtWidgets import (QApplication, QSystemTrayIcon, 
                             QMenu, QAction, QMainWindow)
from PyQt5.QtGui import QIcon
import sys

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("我的应用")
        self.setGeometry(100, 100, 400, 300)

        # 初始化系统托盘
        self.init_tray_icon()

    def init_tray_icon(self):
        # 创建托盘图标
        self.tray_icon = QSystemTrayIcon(QIcon("app_icon.png"), self)
        
        # 创建右键菜单
        tray_menu = QMenu()
        
        show_action = QAction("显示窗口", self)
        quit_action = QAction("退出", self)
        
        show_action.triggered.connect(self.show)
        quit_action.triggered.connect(QApplication.instance().quit)
        
        tray_menu.addAction(show_action)
        tray_menu.addAction(quit_action)
        
        self.tray_icon.setContextMenu(tray_menu)
        self.tray_icon.show()

        # 处理双击托盘图标事件
        self.tray_icon.activated.connect(self.on_tray_activated)

    def on_tray_activated(self, reason):
        # 双击托盘图标时显示窗口
        if reason == QSystemTrayIcon.DoubleClick:
            self.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    # 启动时默认隐藏窗口,只显示托盘图标(可选)
    window.hide()
    sys.exit(app.exec_())

内容的提问来源于stack exchange,提问作者user8253046

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:12:39