◆◆◆如何在关机前对另一个程序进行操作◆◆◆
我现在采用的方法是(.net   2005): 
 在自己程序A里重写   WndProc(ref   Message   m)   函数 
 拦截关机的   WM_QUERYENDSESSION   消息 
 接下来执行一段代码对另一个程序B进行操作(只是在该程序的某个按钮上模拟了鼠标点击操作而已)   
 遇到的问题是:在执行到这段代码时,发现另一个程序B已经被windows关闭了! 
 想重新执行它却被告知“窗口站已关闭”,执行失败。   
 估计可行的解决方法是: 
 1、让自己的程序A   抢在B被关闭前   拦截WM_QUERYENDSESSION消息。 
 2、设置全局钩子,钩住ExitWindowsEx函数。   
 哪位高人可以告诉我具体解决的方法呢? 
 感激不尽!     
------解决方案--------------------使用系统定义好的类,用如下三个事件就可以了,   
 SystemEvents.SessionEnded; 
 SystemEvents.SessionEnding; 
 SystemEvents.SessionSwitch; 
------解决方案--------------------应该在B中拦截,即不让系统自动关闭B 
 private const int WM_QUERYENDSESSION=0x0011; 
 protected override void WndProc(ref Message m) 
 { 
 switch(m.Msg) 
 { 
 case WM_QUERYENDSESSION: 
 StringBuilder sb=new StringBuilder(512); 
 GetPrivateProfileString( "Option ", "不允许关机 ", "Yes ",sb,sb.Capacity, "c:\\1.ini "); 
 if(sb.ToString()== "Yes ") 
 { 
 m.Result=(IntPtr)0; 
 } 
 else 
 { 
 WritePrivateProfileString( "Option ", "关机时间 ",DateTime.Now.ToString(), "c:\\log.ini "); 
 base.WndProc(ref m); 
 }   
 //WritePrivateProfileString( "Option ", "不允许关机 ", "Yes ", "c:\\log.ini "); 
 //GetPrivateProfileString( "Option ", "不允许关机 ", "Yes ", "c:\\log.ini "); 
 break; 
 default: 
 base.WndProc(ref m); 
 break; 
 }   
 }   
------解决方案--------------------参考, 
 http://blog.csdn.net/zhzuo/archive/2005/04/14/347712.aspx