◆◆◆如何在关机前对另一个程序进行操作◆◆◆
我现在采用的方法是(.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