学过窗口程序的朋友都会知道消息的概念,也知道如何处理消息(系统消息或是自定义消息),但是其实我们的控制台程序也是有消息的,下面我们来看看控制台程序的消息的产生及处理 :
首先我向大家介绍两个函数 :
SetConsoleCtrlHandler:
BOOL WINAPI SetConsoleCtrlHandler(
__in PHANDLER_ROUTINE HandlerRoutine ,
__in BOOL Add
);
这个函数用来定义 ctrl 消息的处理函数 .
GenerateConsoleCtrlEvent:
BOOL WINAPI GenerateConsoleCtrlEvent( ...);
这个函数用来产生消息 .
关于这两个函数更多的信息请大家查阅 CSDN. 下面我们看一些这两个函数的简单运用 .
#include <stdio.h>
#include <windows.h>
BOOL WINAPI HandlerRoutine (DWORD dwCtrlType );
int main (int argc , char *argv [])
{
SetConsoleCtrlHandler (HandlerRoutine ,TRUE );
while (1);
return 0;
}
BOOL WINAPI HandlerRoutine (DWORD dwCtrlType )
{
switch (dwCtrlType )
{
case CTRL_C_EVENT :
printf (" 用户按下了Ctrl + C !/n" );
break ;
case CTRL_BREAK_EVENT :
printf (" 用户按下了Ctrl + Break !/n" );
break ;
case CTRL_CLOSE_EVENT :
printf (" 用户关闭了控制台( 关闭菜单或从任务管理器)!/n" );
break ;
case CTRL_LOGOFF_EVENT :
printf (" 一个用户退出了!/n" );
break ;
case CTRL_SHUTDOWN_EVENT :
printf (" 用户关闭了操作系统!/n" );
break ;
default :
return FALSE ;
break ;
}
return TRUE ;
}
这个程序用来捕获用户的消息并进行处理 . 这里可以捕获的消息只有 5 种 .
1 Ctrl + C 2 Ctrl + Break 3 用户关闭控制台 4 一个用户退出 5 用户关闭操作系统
下面我们来看一下如何产生控制台消息,即我们在程序中给控制台发送消息 .
GenerateConsoleCtrlEvent (CTRL_C_EVENT ,0);
在上面的程序代码中加上上面一句代码,然后运行程序,我们就可以看到运行结果了. 上面代码的作用就是向控制台程序发送了一个Ctrl + C 消息.