SetConsoleCtrlHandler】的更多相关文章

最近控制台程序中需要捕获控制台关闭事件,在用户关闭的时候进行某些操作,找了一大圈发现了一个方法,通过调用WIN32 API SetConsoleCtrlHandler方法来实现,具体代码如下: using System; using System.Windows.Forms; using System.Diagnostics; using System.Runtime.InteropServices; namespace ConsoleColsed { public delegate bool…
转载自csdn:http://blog.csdn.net/zhongguoren666/article/details/8770615   SetConsoleCtrlHandler 处理控制台消息 一.如何处理所有的控制台消息. 第一步,首先要安装一个事件钩子,也就是说要建立一个回调函数.调用Win32 API,原型如下: BOOL SetConsoleCtrlHandler( PHANDLER_ROUTINE HandlerRoutine, // 回调函数 BOOL Add // 表示添加还…
#include "stdafx.h"#include <Windows.h> static BOOL WINAPI Handler(DWORD cntrlEvent);static BOOL exitFlag = FALSE; int _tmain(int argc, LPTSTR argv[]) /* Beep periodically until signaled to stop. */{        /* Add an event handler. */    i…
Excerpt: Registering a Control Handler Function   This is an example of the SetConsoleCtrlHandler function that is used to install a control handler. When a CTRL+C signal is received, the control handler returns TRUE, indicating that it has handled t…
http://www.groad.net/bbs/thread-8253-1-1.html 当你在命令行里工作时,经常会输入 Ctrl-C 这个组合键以停止程序的运行.SetConsoleCtrlHandler() 函数可以让一个或多个特定函数在接收到 Ctrl-C, Ctrl-break 这些与控制台有关的信号时得到执行. BOOL WINAPI SetConsoleCtrlHandler( _In_opt_  PHANDLER_ROUTINE HandlerRoutine, _In_    …
这里补充一下第一篇文章中提到的拦截关机消息 Delphi消息拦截:http://blog.csdn.net/cwpoint/archive/2011/04/05/6302314.aspx 下面我再介绍一种在控制台程序中拦截关机消息的方法. 使用SetConsoleCtrlHandler函数.经过测试这个函数不能取消操作. program Project1; {$APPTYPE CONSOLE} uses SysUtils, Windows, Messages; function EndMsg(f…
一.更新内容 1.修改*Server类,以及承继关系.2.增加IRunDevice的IServerProvider接口继承.3.修复增加COM设备驱动可能造成的异常.4.修复网络发送数据可能引发的异常.5.完善协议驱动器. 6.修改协议驱动接口.7.修改协议命令接口.8.修复协议命令,抽象基类情况下的异常BUG. 9.增加协议接口GetPackageLength,数据交互更灵活.10.修复一些BUG.11.优化代码. 二.GetPackageLength接口的使用 这个接口主要的使用场景是:当协…
捕获控制台(console)关闭事件: 1.Ctrl+C信号: 2.Ctrl+Break信号: 3.用户系统关闭Console时: 4.用户退出系统时: 5.系统将要关闭时: using System; using System.Runtime.InteropServices; using System.Threading; using System.Diagnostics; namespace ConsoleApplication2 { public delegate bool Console…
众所周知,我们在使用c#托管代码时,内存地址和GC回收那不是我们关心的,CLR已经给我们暗箱操作. 但是如果我们在c#中调用了一个非托管代码,比如vc的DLL,而且他有个回调函数,需要引用c#中的某个对象并操作,这时候你就得要小心了.要是非托管代码中用到得托管代码那个对象被GC给回收了,这时候就会报内存错误.所以我们就要把那个对象“钉”住(pin),让它的内存地址固定,而不被垃圾回收掉,然后最后我们自己管理,自己释放内存,这时候就需要GCHandle,来看个msdn上的例子: public de…
Kernel.cs using System; using System.Runtime.InteropServices; using System.Text; using HANDLE = System.IntPtr; using HWND = System.IntPtr; namespace Win32 { public struct OVERLAPPED { public int Internal; public int InternalHigh; public int offset; p…