title: Get close window message in Hidden C# Console Application
body: <p>I have a Windows Form that starts some console application in background(CreateNoWindow = rue,WindowStyle = ProcessWindowStyle.Hidden). </p>
  
  <p>Windows form gives me opportunity to stop the console application at any time. But I'd like to handle somehow the close message inside the console application. I tried to use hooking like:</p>
  
  <pre><code>    [DllImport("Kernel32")]
      public static extern bool SetConsoleCtrlHandler(HandlerRoutine handler, bool add);
  
      // A delegate type to be used as the handler routine 
      // for SetConsoleCtrlHandler.
      public delegate bool HandlerRoutine(CtrlTypes ctrlType);
  
      // An enumerated type for the control messages
      // sent to the handler routine.
      public enum CtrlTypes
      {
          CTRL_C_EVENT = 0,
          CTRL_BREAK_EVENT,
          CTRL_CLOSE_EVENT,
          CTRL_LOGOFF_EVENT = 5,
          CTRL_SHUTDOWN_EVENT
      }
  
      private static bool ConsoleCtrlCheck(CtrlTypes ctrlType)
      {
          StaticLogger.Instance.DebugFormat("Main: ConsoleCtrlCheck: Got event {0}.", ctrlType);
          if (ctrlType == CtrlTypes.CTRL_CLOSE_EVENT)
          {
              // Handle close stuff
          }
          return true;
      }
  
      static int Main(string[] args)
      {
          // Subscribing
          HandlerRoutine hr = new HandlerRoutine(ConsoleCtrlCheck);
          SetConsoleCtrlHandler(hr, true);
          // Doing stuff
      }
  </code></pre>
  
  <p>but I get the message inside ConsoleCtrlCheck only if the console window is created. But if window is hidden - I don't get any message.</p>
  
  <p>In my windows Form to close console application process I use 
         proc.CloseMainWindow(); 
  to send message to the console window. </p>
  
  <p>P.S. AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit; - also does not help</p>
  
  <p>Do you now other way to handle this situation? 
  Thanks.</p>