您的位置:程序门 -> .net技术 -> c#



这个c#应用程序有些不解?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


这个c#应用程序有些不解?
发表于:2007-04-26 10:19:06 楼主

    实现的功能是使用c#捕获windows的关机事件   捕获windows的关机事件,做一个程序让它在关机的时候提醒自己,用处大着呢!  

        首先是调用microsoft.win32命名空间下面的systemevents类,他有一个静态的事件sessionending在系统注销或者关机时发生,此事件只有在winform的程序下有效,而在控制台程序下面无效,不能激发事件;还有一点我们必须在程序推出时将加上的事件移除掉,否则就容易造成内存溢出。  

关键代码如下:  

using   system;  
using   system.collections.generic;  
using   system.windows.forms;  

using   microsoft.win32;  

namespace   shutdown  
{  
static   class   program  
{  
/**////  
///   应用程序的主入口点。  
///  
[stathread]  
static   void   main()  
{  
application.enablevisualstyles();  
application.setcompatibletextrenderingdefault(false);  
formshutdown   formshutdown   =   new   formshutdown();  
systemevents.sessionending   +=   new   sessionendingeventhandler(formshutdown.systemevents_sessionending);  
application.run(formshutdown);  
}  

}  
}form   的代码:  
using   system;  
using   system.collections.generic;  
using   system.componentmodel;  
using   system.data;  
using   system.drawing;  
using   system.text;  
using   system.windows.forms;  
using   microsoft.win32;  

namespace   shutdown  
{  
public   partial   class   formshutdown   :   form  
{  
const   string   message_txt   =   "您签退了吗? ";  
const   string   message_title   =   "提示 ";  

public   formshutdown()  
{  
initializecomponent();  
}  


internal   void   systemevents_sessionending(object   sender,   sessionendingeventargs   e)  
{  
dialogresult   result   =   messagebox.show(message_txt,   message_title,   messageboxbuttons.yesno);  

e.cancel   =   (result   ==   dialogresult.no);  
}  

private   void   formshutdown_load(object   sender,   eventargs   e)  
{  
this.location   =   new   point(screen.primaryscreen.workingarea.width   -   200,   0);  
}  

protected   override   void   onclosed(eventargs   e)  
{  
systemevents.sessionending   -=   new   sessionendingeventhandler(this.systemevents_sessionending);  
base.onclosed(e);  
}  
}  
}  
        此程序在使用c#2.0在windows2003下测试通过。大家在使用systemevents.sessionending事件时切记要在程序退出时移除事件。  

不过有两点遗憾之处,有待解决  

1.   使用这种方式不能捕获休眠时的事件  

2.   这个程序占用的内存太多了,只有这么一个小功能居然占了12m的内存,这都是.net   framework惹的祸;实在是不可思议。  


转http://dotnet.chinaitlab.com/
发表于:2007-04-26 10:24:171楼 得分:0
不懂       友情up
发表于:2007-04-26 10:26:262楼 得分:0
捕获windows的关机事件

怎么不解?
发表于:2007-04-26 10:35:223楼 得分:0
学习
发表于:2007-04-26 10:35:284楼 得分:0
休眠和关机是两个完全不同的概念
发表于:2007-04-26 10:44:125楼 得分:0
xue   xi
发表于:2007-04-26 10:44:126楼 得分:0
gz
发表于:2007-04-26 10:50:497楼 得分:0
关机和休眠就不是一回事,当然不能捕获了

你点关闭计算机的这两个也不是一个按钮好不好
发表于:2007-04-26 11:11:308楼 得分:0
代码挺容易解释的。
发表于:2007-04-26 11:46:369楼 得分:0
见过关机的代码,居然还有防止关机的,倒~~~~~~~~
发表于:2007-04-26 11:53:4610楼 得分:0
up
发表于:2007-04-26 12:41:5611楼 得分:0
这个能对付冲击波么?
发表于:2007-04-26 12:59:0612楼 得分:0
mark,慢慢看
发表于:2007-04-26 13:04:4413楼 得分:0
再写上捕获休眠事件不就行了吗?
发表于:2007-04-26 13:09:3614楼 得分:0
microsoft.win32.systemevents.powermodechanged+=


快速检索

最新资讯
热门点击