程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> C#編寫WIN32系統托盤程序

C#編寫WIN32系統托盤程序

編輯:C#基礎知識

基本功能概述:

  1. 程序運行後駐留系統托盤,左鍵呼出,右鍵退出。後續可加右鍵菜單。
  2. 注冊系統案件WIN+F10,呼出程序。
  3. 重寫系統消息,最小化和關閉按鈕隱藏程序
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;

public enum HotkeyModifiers
{
    Alt = 1,
    Control = 2,
    Shift = 4,
    Win = 8
}

public class MyForm:Form
{
    [DllImport ("user32.dll")]
    private static extern bool RegisterHotKey (IntPtr hWnd, int id, int modifiers, Keys vk);

    [DllImport ("user32.dll")]
    private static extern bool UnregisterHotKey (IntPtr hWnd, int id);

    const int WM_HOTKEY = 0x312;
    const int WM_SYSCOMMAND = 0X112;
    const int SC_MAXMIZE = 0xf030;
    const int SC_MINMIZE = 0xf020;
    const int SC_CLOSE = 0xf060;

    public MyForm ()
    {
        NotifyIcon ni = new NotifyIcon (){ Icon = this.Icon, Visible = true };
        //RegisterHotKey
        bool bOK = RegisterHotKey (this.Handle, 0, (int)HotkeyModifiers.Win, Keys.F10);

        this.Closing += delegate {
            UnregisterHotKey (this.Handle, 0);
        };

        ni.MouseDown += (sender, e) => {
            if (e.Button == MouseButtons.Left) {
                this.Activate ();
                this.Visible = true;
            }
            if (e.Button == MouseButtons.Right) {
                if (DialogResult.Yes==MessageBox.Show("Quit? Realy?","Quit",MessageBoxButtons.YesNo)) {
                    this.Close ();
                }
            }
        };
    }

    //WndProc
    protected override void WndProc (ref Message m)
    {
        switch (m.Msg) {
        case WM_SYSCOMMAND:
            int code = m.WParam.ToInt32 ();
            if (code == SC_CLOSE || code == SC_MINMIZE) {
                this.Visible = false;
                return;//Must Prevent WndProc
            }
            break; //others, such as SC_MAXMIZE must in WndProc.
        case WM_HOTKEY:
            this.Text = DateTime.Now.ToString ();
            this.Activate ();
            this.Visible = true;
            break;
        }
        base.WndProc (ref m);
    }
}

public class MyClass
{
    public static void Main ()
    {
        MyForm form = new MyForm ();
        Application.Run (form);
    }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved