首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

◆◆◆怎么在关机前对另一个程序进行操作◆◆◆

2012-01-23 
◆◆◆如何在关机前对另一个程序进行操作◆◆◆我现在采用的方法是(.net2005):在自己程序A里重写WndProc(refMess

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

热点排行