C#编写WIN32系统托盘程序
基本功能概述:
- 程序运行后驻留系统托盘,左键呼出,右键退出。后续可加右键菜单。
- 注册系统案件WIN+F10,呼出程序。
- 重写系统消息,最小化和关闭按钮隐藏程序
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices; public enum HotkeyModifiers
{
Alt = ,
Control = ,
Shift = ,
Win =
} 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, , (int)HotkeyModifiers.Win, Keys.F10); this.Closing += delegate {
UnregisterHotKey (this.Handle, );
}; 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);
}
}
C#编写WIN32系统托盘程序的更多相关文章
- QT系统托盘应用程序
在QT中QSystemTrayIcon类提供了创建系统托盘程序的功能. QSystemTrayIcon类为系统托盘中的应用程序提供图标.现代操作系统通常会在桌面上提供一个称为系统托盘(system t ...
- WP7系统托盘和应用程序栏
(一)系统托盘和应用程序栏系统托盘(1)显示系统级别的状态信息(2)Apps能隐藏和显示系统托盘Micosoft.Phone.Shell.SystemTray.IsVisible=true;应用程序栏 ...
- Java应用程序使用系统托盘资源
要想使自己开发的Java SE项目运行在自己的电脑系统托盘上,这并不是什么难事,总共需要如下几步即可: 1.线判断一下,系统托盘是否可用,否则接下来的程序将不可避免的报出异常咯 2.获得一个Syste ...
- MFC程序最小化到系统托盘及其响应函数
预备知识: Windows API函数: WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid ...
- WinForm 程序在系统托盘显示
前言 有些程序在关闭或最小化的时候会隐藏在系统托盘中,双击或右击会重新显示,winform实现其功能很简单,这边就简单的介绍下. 实现 在winform实现托盘使用notifyIcon控件,如果加菜单 ...
- java程序加到系统托盘的方法
package swingtest; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; impor ...
- 用Qt写软件系列四:定制个性化系统托盘菜单
导读 一款流行的软件,往往会在功能渐趋完善的时候,通过改善交互界面来提高用户体验.毕竟,就算再牛逼的产品,躲藏在糟糕的用户界面之后总会让用户心生不满.界面设计需综合考虑审美学.心理学.设计学等多因素, ...
- 探索Win32系统之窗口类(转载)
Window Classes in Win32 摘要 本文主要介绍win32系统里窗口类的运做和使用机制,探索一些细节问题,使win32窗口类的信息更加明朗化. 在本文中,"类", ...
- C# Win32控制台应用程序忽略 Ctrl + C,阻止程序退出
C# Win32控制台应用程序忽略 Ctrl + C,阻止程序退出,这里使用到了Windows API SetConsoleCtrlHandler函数 注意:在VS中调试执行时,在处理程序例程中设置断 ...
随机推荐
- bootstrap-15
缩略图:缩略图在网站中最常用的地方就是产品列表页面,一行显示几张图片,有的在图片底下(左侧或者右侧)带有标题.描述信息.Bootstrap框架将这一部独立成一个模块组件,并通过thumbnail样式配 ...
- ios常见的页面传值方式
iOS页面间的传值细分有很多种,基本的传值方式有三种:委托Delegate传值.通知NSNotification传值.Block传值,其他在项目中可能会遇到的还有:UserDefault或文件方式传值 ...
- jsp基础知识
- Swift一些数据结构题目的编码实现
题目:在字符串中找出连续最长的数字串,并把这个串的长度返回:如果长度相同,返回最后一个连续字符串 样例输入abcd12345ed125ss123456789abcd12345ss54321 样例输出输 ...
- Linear Algebra lecture7 note
Computing the nullspace (Ax=0) Pivot variables-free variables Special solutions: rref( A)=R rank o ...
- EF 未应用自动迁移,因为自动迁移会导致数据丢失的解决办法
在 工具->库程序包管理器->程序包管理器控制台 窗口里运行 Add-Migration Initial 指令再输入Update-Database执行
- web编程
展示层 html/css/javascript/jquery/jquery easyUI/ajax bootstrap web层 varnish/haproxy/squid----lvs/keepal ...
- div标签上下滚动
<div id="myInfo" style={{width:'100%',height:'100%', overflow:'scroll'}}></div> ...
- [转]面向过程的分析(POA),和面向对象的分析(OOA)
欢迎转载本文,转载地址: http://www.juliantec.info/articles/basic-concept/poa-and-ooa.html 软件开发方法论概述 在60年代的软件开发行 ...
- crontab服务详解(任务计划)
crontab是一个很方便的在unix/linux系统上定时(循环)执行某个任务的程序使用cron服务,用 service crond status 查看 cron服务状态,如果没有启动则 servi ...