Solved

Detect X button click event on cmd window

Posted on 2010-09-03
3
426 Views
Last Modified: 2012-06-27
How do I detect from within a vb.net console application when the X button on its cmd window has been clicked?
0
Comment
Question by:gprodri
  • 2
3 Comments
 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 33601042
If you need that functionality then you should probably be using a WinForm instead...   =\

Can you give more details?
0
 
LVL 14

Expert Comment

by:Daniel Junges
ID: 33601049
SetConsoleCtrlHandler(new HandlerRoutine(ConsoleCloseEvent), true);

private static bool ConsoleCloseEvent(CtrlTypes ctrlType)
        {
            switch (ctrlType)
            {
                case CtrlTypes.CTRL_C_EVENT:
                    isclosing = true;
                    Console.WriteLine("CTRL+C received!");
                    break;

                case CtrlTypes.CTRL_BREAK_EVENT:
                    isclosing = true;
                    Console.WriteLine("CTRL+BREAK received!");
                    break;

                case CtrlTypes.CTRL_CLOSE_EVENT:
                    isclosing = true;
                    Console.WriteLine("Program being closed!");
                    break;

                case CtrlTypes.CTRL_LOGOFF_EVENT:
                case CtrlTypes.CTRL_SHUTDOWN_EVENT:
                    isclosing = true;
                    Console.WriteLine("User is logging off!");
                    break;
            }
            return true;
        }
        [DllImport("Kernel32")]

        public static extern bool SetConsoleCtrlHandler(HandlerRoutine Handler, bool Add);

 

        public delegate bool HandlerRoutine(CtrlTypes CtrlType);



        public enum CtrlTypes

        {

            CTRL_C_EVENT = 0,

            CTRL_BREAK_EVENT,

            CTRL_CLOSE_EVENT,

            CTRL_LOGOFF_EVENT = 5,

            CTRL_SHUTDOWN_EVENT

        }

Open in new window

0
 
LVL 85

Accepted Solution

by:
Mike Tomlinson earned 500 total points
ID: 33601104
*Not for points...here's a VB implementation of junges's approach:
Imports System.Runtime.InteropServices

Module Module1



    Public isclosing As Boolean = False



    <DllImport("Kernel32")> _

    Public Function SetConsoleCtrlHandler(ByVal Handler As HandlerRoutine, ByVal Add As Boolean) As Boolean

    End Function



    Public Delegate Function HandlerRoutine(ByVal CtrlType As CtrlTypes) As Boolean



    Public Enum CtrlTypes

        CTRL_C_EVENT = 0

        CTRL_BREAK_EVENT

        CTRL_CLOSE_EVENT

        CTRL_LOGOFF_EVENT = 5

        CTRL_SHUTDOWN_EVENT

    End Enum



    Sub Main()

        SetConsoleCtrlHandler(New HandlerRoutine(AddressOf ConsoleCloseEvent), True)

        While Not isclosing



            ' ...



            System.Threading.Thread.Sleep(100)

        End While

    End Sub



    Private Function ConsoleCloseEvent(ByVal ctrlType As CtrlTypes) As Boolean

        Select Case ctrlType

            Case CtrlTypes.CTRL_C_EVENT

                Console.WriteLine("CTRL+C received!")



            Case CtrlTypes.CTRL_BREAK_EVENT

                Console.WriteLine("CTRL+BREAK received!")



            Case CtrlTypes.CTRL_CLOSE_EVENT

                Console.WriteLine("")

                Console.WriteLine("Program being closed!")

                Console.WriteLine("")

                Console.WriteLine("Press Enter to continue...")

                Console.ReadLine()



            Case CtrlTypes.CTRL_LOGOFF_EVENT, CtrlTypes.CTRL_SHUTDOWN_EVENT

                Console.WriteLine("User is logging off!")



        End Select



        isclosing = True

        Return True

    End Function



End Module

Open in new window

0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
This video discusses moving either the default database or any database to a new volume.
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now