使用Windows自定义消息结束应用程序

BackCopy.exe的关闭有一系列条件,我想用另外一个程序结束它,但不想使用结束进程的方式。于是写:

protected override void WndProc(ref System.Windows.Forms.Message m)
{
   const int WM_QUERYENDSESSION = 0x0011;
   const int WM_CLOSEPROGRAM = 0x8001;

   switch (m.Msg)
   {
       //系统退出消息处理,WM_QUERYENDSESSION是询问程序是否需要关闭,
       //要有相应的返回值,0不关闭程序;1关闭程序
       case WM_QUERYENDSESSION:
                    m.Result = (IntPtr)1;
                    return;
       case WM_CLOSEPROGRAM:
                    textBox1.Text = "";
                    Close();
                    break;
       default:
                    break;
    }
    base.WndProc(ref m);
}

在要它结束的程序中写到:

int FindBackCopy(System.IntPtr param0, System.IntPtr param1)
{
     StringBuilder s = new StringBuilder(256);

     baseclass.NativeMethods.GetWindowTextW(param0, s, s.Capacity);
     if (s.ToString().Trim().IndexOf("BackCopy") != -1)
     {
           baseclass.NativeMethods.SendMessageW(param0, baseclass.NativeConstants.WM_CLOSEPROGRAM , 0, 0);  
           return 0;
      }
      return 1;
  }

  

private void button1_Click(object sender, EventArgs e)
{
     baseclass.WNDENUMPROC backcopyproc = new baseclass.WNDENUMPROC(FindBackCopy);
     baseclass.NativeMethods.EnumWindows(backcopyproc, 0);

     ......

}

 

其中:
public partial class NativeConstants
{
    public const int WM_CLOSEPROGRAM = 0x8001;
}

WM_USER常量是Windows帮助应用程序定义私有窗口类里的私有消息,通常使用WM_USER+一个整数值,但总值不能超过0x7FFF。

#define WM_USER       0x0400

WM_APP常量是Windows帮助应用程序定义私有消息,通常使用WM_APP+一个整数值,但总值不能超过0xBFFF。

#define WM_APP       0x8000

这两个都定义在WinUser.h中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值