接收關閉消息,並以log形式輸出至文件。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleTest
{
class Program
{
/// <summary>
/// console控制檯,關閉消息接收示例;
/// 點擊console窗體上的關閉按鈕,或 Ctrl + C
/// </summary>
static void Main(string[] args)
{
bool result = ConsoleMsg.SetHandler(HandleF, true);
//Console.WriteLine("設置系統消息接收函數結果 -> " + result);
Console.ReadLine();
}
/// <summary>
/// 用於處理系統消息的函數
/// </summary>
/// <param name="msg">系統消息</param>
/// <returns>對系統消息的處理結果</returns>
private static bool HandleF(int msg)
{
String str = "接收到console控制檯消息-> " + msg;
WriteLog(str);
return false;
}
private static Object writeLock = new object();
/// <summary>
/// 輸出運行log信息
/// </summary>
/// <param name="text"></param>
private static void WriteLog(string text)
{
lock (writeLock)
{
System.IO.File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "log.txt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + text + "\r\n");
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace ConsoleTest
{
/// <summary>
/// console控制檯消息接收。
/// 添加消息處理:SetHandler(F,true)
/// 移除消息處理:SetHandler(F,false)
/// </summary>
public class ConsoleMsg
{
[DllImport("kernel32.dll")]
private static extern bool SetConsoleCtrlHandler(Handler handFunc, bool Add);
/// <summary>
/// 委託方法申明,用於處理系統消息處。
/// </summary>
/// <param name="sysMSG">接收到的系統消息</param>
/// <returns>對系統消息的處理結果</returns>
public delegate bool Handler(int sysMSG);
/// <summary>
/// 設置console控制檯消息接收處理函數。
/// 當發生系統事件時,會調用handFunc函數。
/// </summary>
/// <param name="handFunc">用於處理系統消息的函數</param>
/// <param name="add">添加 或 刪除,消息處理函數</param>
/// <returns>設置是否成功</returns>
public static bool SetHandler(Handler handFunc, bool add)
{
bool result = SetConsoleCtrlHandler(handFunc, add);
Console.Read();
return result;
}
}
}