C# Win32控制台应用程序忽略Ctrl + C阻止程序退出的代码示例(图)


当前第2页 返回上一页

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

using System;

using System.Collections.Generic;

using System.Text;

using System.Diagnostics;

using System.Runtime.InteropServices;

using System.Threading;

 

/************************************************************************/

/* CSharp_Win32控制台应用程序忽略 Ctrl + C

 * Powered by:testcs_dn

 * Blog:http://www.php.cn/

 */

/************************************************************************/

namespace CSharp_Win32控制台应用程序忽略CtrlC

{

    //定义处理程序委托

    public delegate bool ConsoleCtrlDelegate(int ctrlType);

 

    class Program

    {

        //导入SetCtrlHandlerHandler API

        [DllImport("kernel32.dll")]

        private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add);

        //当用户关闭Console时,系统会发送次消息

        private const int CTRL_CLOSE_EVENT = 2;

        //Ctrl+C,系统会发送次消息

        private const int CTRL_C_EVENT = 0;

        //Ctrl+break,系统会发送次消息

        private const int CTRL_BREAK_EVENT = 1;

        //用户退出(注销),系统会发送次消息

        private const int CTRL_LOGOFF_EVENT = 5;

        //系统关闭,系统会发送次消息

        private const int CTRL_SHUTDOWN_EVENT = 6;

 

        static void Main(string[] args)

        {

            Program cls = new Program();

            //Console.ReadKey();

        }

        public Program()

        {

            ConsoleCtrlDelegate consoleDelegete = new ConsoleCtrlDelegate(HandlerRoutine);

 

            bool bRet = SetConsoleCtrlHandler(consoleDelegete, true);

            if (bRet == false) //安装事件处理失败

            {

                Console.WriteLine("error");

                while (true)

                {

                    Console.WriteLine("...");

                    Thread.Sleep(1000);

                }

            }

            else

            {

                Console.WriteLine("ok");

                while (true)

                {

                    Console.WriteLine("...");

                    Thread.Sleep(1000);

                }

            }

 

        }

 

        /// <summary>

        /// 处理程序例程,在这里编写对指定事件的处理程序代码

        /// 注意:在VS中调试执行时,在这里设置断点,但不会中断;会提示:无可用源;

        /// </summary>

        /// <param name="CtrlType"></param>

        /// <returns></returns>

        private static bool HandlerRoutine(int ctrlType)

        {

            switch(ctrlType)

            {

                case CTRL_C_EVENT:

                    Console.WriteLine("C");

                    return true; //这里返回true,表示阻止响应系统对该程序的操作

                    //break;

                case CTRL_BREAK_EVENT:

                    Console.WriteLine("BREAK");

                    break;

                case CTRL_CLOSE_EVENT:

                    Console.WriteLine("CLOSE");

                    break;

                case CTRL_LOGOFF_EVENT:

                    Console.WriteLine("LOGOFF");

                    break;

                case CTRL_SHUTDOWN_EVENT:

                    Console.WriteLine("SHUTDOWN");

                    break;

            }

            //return true;//表示阻止响应系统对该程序的操作

            return false;//忽略处理,让系统进行默认操作

        }

    }

}

以上就是C# Win32控制台应用程序忽略Ctrl + C阻止程序退出的代码示例(图)的详细内容!

返回前面的内容

相关阅读 >>

C#描述数据结构1:统计代码执行时间对象的代码详解

c#中的console.read()方法详解

C#图片按比例缩放的示例代码分享

C#用什么软件编程?

C#与.net框架之间的关系是什么?C#程序的开发工具

详解C#winform循环播放多个视频的代码示例

asp.net core应用程序运行vue并且部署在iis上的详解

C#如何计算2个字符串相似度的示例代码分享

C# 使用npoi生成word文档(按照模板)

详解C#把unicode编码转换为gb编码的示例代码

更多相关阅读请进入《C#》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    暂无评论...