c#关机时自动退出程序

程序运行时最小化到任务栏托盘,可这时候关闭或重启操作系统使如果程序没有退出,则系统不能关闭.那么如何实现关机时自动退出程序呢?其实很简单,当windows操作系统执行关闭动作时,它会发送给各个正在运行的应用程序一个消息WM_QUERYENDSESSION,告诉应用程序要关机了,如果反馈回来的消息值为1,那么windows操作系统就会自动关闭.因此,通过截获WM_QUERYENDSESSION消息,就能实现自动退出程序.
ContractedBlock.gif ExpandedBlockStart.gif Code
 1ExpandedBlockStart.gifContractedBlock.gif/**//// <summary> 
 2        /// 操作系统关闭时,关闭应用程序 
 3        /// </summary> 
 4        /// <param name="m">截获系统消息</param> 

 5        protected override void WndProc(ref Message m) 
 6ExpandedBlockStart.gifContractedBlock.gif        
 7            switch (m.Msg) 
 8ExpandedSubBlockStart.gifContractedSubBlock.gif            
 9                case 0x0011://WM_QUERYENDSESSION 
10                    m.Result = (IntPtr)1
11                    break
12                default : 
13                    base.WndProc(ref m); 
14                    break
15            }
             
16        }

17
18ExpandedBlockStart.gifContractedBlock.gif/**//// <summary>
19        /// 重载WndProc消息处理函数
20        /// </summary>
21        /// <param name="m">windows消息</param>

22        protected override void WndProc(ref System.Windows.Forms.Message m)
23ExpandedBlockStart.gifContractedBlock.gif        {
24            try
25ExpandedSubBlockStart.gifContractedSubBlock.gif            {
26                switch(m.Msg)
27ExpandedSubBlockStart.gifContractedSubBlock.gif                {
28                        //系统退出消息处理,WM_QUERYENDSESSION是询问程序是否需要关闭,
29                        //要有相应的反回值,0不关闭程序;1关闭程序
30                    case WM_QUERYENDSESSION:
31                        m.Result = (IntPtr)WM_TRUE;
32                        return;
33                        //休眠事件处理                    
34                    case WM_POWERBROADCAST :
35                        if (m.WParam == (IntPtr)PBT_APMQUERYSUSPEND)
36ExpandedSubBlockStart.gifContractedSubBlock.gif                        {
37                            //系统即将休眠消息处理
38                            try
39ExpandedSubBlockStart.gifContractedSubBlock.gif                            {
40                                this.BusManager.Close();
41                                m.Result = (IntPtr)WM_TRUE;
42                            }

43                            catch
44ExpandedSubBlockStart.gifContractedSubBlock.gif                            {
45                                //捕捉异常,不做处理
46                            }

47                        }

48                        break;
49                    default:
50                        break;
51                }

52                base.WndProc (ref m);
53            }
            
54            catch(Exception e)
55ExpandedSubBlockStart.gifContractedSubBlock.gif            {
56                MessageBox.Show(e.Message);
57            }

58        }

59
60

以上是2段代码,任何一个均可实现关机关闭程序!

转载于:https://www.cnblogs.com/luhuan860/archive/2009/08/20/1550575.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值