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中调试执行时,在处理程序例程中设置断 ...
随机推荐
- 2016 、12 、11<本周>
翻了翻记录 想把上周没搞出来的1159和day2T2搞出来.
- 自学 PHP,如何不走弯路?
1.一本好书至关重要.如果这本书的知识非常深入,那么还是不要看了.对初学者来说只能是打击.因为很多东西都看不懂.一本知识较为浅显,并且说明非常详细,但是能让你上手的基础知识又非常完善的书籍就非常好.( ...
- [课程设计]Scrum团队分工及明确任务1.0 ----多鱼点餐
[课程设计]Scrum团队分工及明确任务1.0 ----多鱼点餐 一.开发背景 多鱼点餐系统是一套比较系统化的针对餐厅点餐服务的产品,从顾客进入餐厅点餐到用餐结束再到最后的结账买单,需要全面的.高效的 ...
- Unicode 和 UTF-8 的关系
曾经这个世界上,有着gb2312,gbk,latin1,utf 等各种字符集,现在,我们也能不时的看到他们的身影. 但是值得庆幸的事,时过境迁,这些主要的字符集,都已经逐渐被utf8取代. 但是我们很 ...
- .net frameworkAPI文档下载地址
http://www.msdn.hk/html/2014/5.html VS2013 ILdasm 反编译工具安装在下面地址里了 C:\Program Files (x86)\Microsoft SD ...
- DEX 方法超过64K限制和gradle编译OOM问题解决
如果你是一个android开发者,你至少听说过的Dalvik的蛋疼的64K方法限制.概括地说,在一个DEX文件,你可以调用很多的方法,但你只能调用它们最前面的65,536个 ,因为这是在方法调用集合中 ...
- windows开机记录查询
http://jingyan.baidu.com/article/3d69c5516b9a9ef0cf02d7f3.html
- mylistview 中item的子项的布局文件xml
@Override public View getView(final int position, View view, ViewGroup parent) { System.out.println( ...
- 【java】之3种方式实现Object和Map之间的转换
利用commons.BeanUtils实现Obj和Map之间转换,这种是最简单,也是最经常用的 public static Object mapToObject(Map<String, Obje ...
- vbs 的二个解释程序区别与切换及与BAT互调用。
WScript.exe : 窗口中运行CScript.exe :命令行中运行 用法:<CScript|WScript> scriptname.extension [option...] [ ...