首页 >> 药膳食疗

使用捕获的关机事件计划

药膳食疗  2021年09月06日  浏览:4 次

在公司上班,下班时需要签退,而我呢隔三差五就会忘那么一次。怎么办呢,于是就想能不能捕获windows的关机事件,做一个程序让它在关机的时候提醒我一下呢。  非常幸运很容易就找到了n32命名空间下面的SystemEvents类,他有一个静态的事件SessionEnding在系统注销或者关机时发生,此事件只有在winform的程序下有效,而在控制台程序下面无效,不能激发事件;还有一点我们必须在程序推出时将加上的事件移除掉,否则就容易造成内存溢出。

关键代码如下:

以下是引用片段:

using System;

using neric;

using rms;

using n32;

namespace Shutdown

{

static class Program

{

54 /**////

/// 应用程序的主入口点。

///

[STAThread]

static void Main()

{

ableVisualStyles();

tCompatibleTextRenderingDefault(false);

FormShutdown formShutdown = new FormShutdown();

ssionEnding += new SessionEndingEventHandler(stemEvents_SessionEnding);

n(formShutdown);

}

}

}Form 的代码:

using System;

using neric;

using ponentModel;

using ta;

using awing;

using xt;

using rms;

using n32;

namespace Shutdown

{

public partial class FormShutdown : Form

{

const string MESSAGE_TXT = \"您签退了吗?\";

const string MESSAGE_TITLE = \"提示\";

public FormShutdown()

{

InitializeComponent();

}

internal void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)

{

DialogResult result = ow(MESSAGE_TXT, MESSAGE_TITLE, sNo);

ncel = (result == );

}

private void FormShutdown_Load(object sender, EventArgs e)

{

cation = new Point(dth - 200, 0);

}

protected override void OnClosed(EventArgs e)

{

ssionEnding -= new SessionEndingEventHandler(stemEvents_SessionEnding);

Closed(e);

}

}

}

此程序在使用c#2.0在Windows2003下测试通过。大家在使用ssionEnding事件时切记要在程序退出时移除事件。

不过有两点遗憾之处:

1. 使用这种方式不能捕获休眠时的事件

2. 这个程序占用的内存太多了,只有这么一个小功能居然占了12M的内存,这都是.Net framework惹的货;实在是不可思议。

大家有没有什么好主意可以克服这两个缺点呢?

成都哪里能治疗癫痫
郑州白癜风专业医院
武汉治疗妇科习惯性流产医院
友情链接