Disable Close Button (X) in console program

Good afternoon!

How do I disable the min, max, and close buttons in a console program?  

Regards,
Tony
LVL 1
fattumsdadAsked:
Who is Participating?
 
jkrCommented:
Sorry, there's a semicolon missing, that should be

    HMENU hMenu = GetSystemMenu ( hwndConsole, FALSE); // <---

BTW, you need to link with user32.lib

PS: That test just ruined one of my consoles :o)
0
 
jkrCommented:
You first need to obtain a window handle for your console: http://support.microsoft.com/default.aspx?scid=kb;en-us;124103 ("How To Obtain a Console Window Handle (HWND)")

Then, you need to get the system menu handle:

HWND hwndConsole = ...;

HMENU hMenu = GetSystemMenu ( hwndConsole, FALSE);

After that, you need to delete the Close Menu Item from the Console Application System Menu:

DeleteMenu ( hMenu, 6, MF_BYPOSISTION); // 'Close'

Also, the others:

DeleteMenu ( hMenu, 5, MF_BYPOSISTION); // 'Minimize'
DeleteMenu ( hMenu, 4, MF_BYPOSISTION); // 'Maximize'

This will affect the buttons also.

(adapted from http://support.microsoft.com/default.aspx?scid=kb;en-us;818361 -- "HOW TO: Disable the Close Button on the Title Bar of a Console Application by Using Microsoft Visual Basic .NET")

0
 
jkrCommented:
Um, MF_BYPOSISTION should of course be MF_BYPOSITION :-(
0
Cloud Class® Course: Microsoft Windows 7 Basic

This introductory course to Windows 7 environment will teach you about working with the Windows operating system. You will learn about basic functions including start menu; the desktop; managing files, folders, and libraries.

 
fattumsdadAuthor Commented:
Jk,

This is what I have for code so far....

#include <windows.h>
#include <stdio.h>
#include <conio.h>

int main()
{
   TCHAR szOldTitle[MAX_PATH];
   TCHAR szNewTitle[MAX_PATH];

   if( GetConsoleTitle(szOldTitle, MAX_PATH) )
   {
      wsprintf(szNewTitle, TEXT("Testing"), szOldTitle);
        HMENU hMenu = GetSystemMenu ( hwndConsole, FALSE)
        DeleteMenu(hMenu, 6, MF_BYPOSITION);

      if( !SetConsoleTitle(szNewTitle) )
         printf("SetConsoleTitle failed (%d)\n", GetLastError());

      getch();
   }
}

The errors I get:
--------------------Configuration: Test - Debug--------------------
Compiling source file(s)...
Test.cpp
Test.cpp: In function `int main()':
Test.cpp:13: error: `hwndConsole' undeclared (first use this function)
Test.cpp:13: error: (Each undeclared identifier is reported only once for each
function it appears in.)
Test.cpp:14: error: syntax error before `(' token
Test.cpp:13: warning: unused variable `HMENU__*hMenu'

Test.exe - 3 error(s), 1 warning(s)
0
 
jkrCommented:
You need to use the code from the MSKB article above to retrieve the console's HWND, e.g.

#include <windows.h>
#include <stdio.h>
#include <conio.h>


HWND GetConsoleHwnd(void)
   {
       #define MY_BUFSIZE 1024 // Buffer size for console window titles.
       HWND hwndFound;         // This is what is returned to the caller.
       char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated
                                           // WindowTitle.
       char pszOldWindowTitle[MY_BUFSIZE]; // Contains original
                                           // WindowTitle.

       // Fetch current window title.

       GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);

       // Format a "unique" NewWindowTitle.

       wsprintf(pszNewWindowTitle,"%d/%d",
                   GetTickCount(),
                   GetCurrentProcessId());

       // Change current window title.

       SetConsoleTitle(pszNewWindowTitle);

       // Ensure window title has been updated.

       Sleep(40);

       // Look for NewWindowTitle.

       hwndFound=FindWindow(NULL, pszNewWindowTitle);

       // Restore original window title.

       SetConsoleTitle(pszOldWindowTitle);

       return(hwndFound);
   }

int main ()
{

    HWND hwndConsole = GetConsoleHwnd ();

      HMENU hMenu = GetSystemMenu ( hwndConsole, FALSE)
      DeleteMenu(hMenu, 6, MF_BYPOSITION);

    getch ();

    return 0;
}
0
 
fattumsdadAuthor Commented:
Ok, I put the code in exactly as stated above.  Down to one error, one warning:

Compiling source file(s)...
Test.cpp
Test.cpp: In function `int main()':
Test.cpp:50: error: syntax error before `(' token
Test.cpp:49: warning: unused variable `HMENU__*hMenu'

Test.exe - 1 error(s), 1 warning(s)

I appreciate your patience....  I think you've walked me through a good 50 things over the past 2 days :)
0
 
fattumsdadAuthor Commented:
Just added that semi, worked great.  How do I link with user32.lib?  Thanks again for all the help...  I really do appreciate it.  And sorry about the console LOL.
0
 
jkrCommented:
Well, if the linker does not complain about any missing symbols, you are already linking with that lib. I just compiled on the command line, so I had to add that manually...
0
 
fattumsdadAuthor Commented:
Just curious....  how long have you been doing this stuff?
0
 
jkrCommented:
Earning my living with coding in C/C++ for well over 10 years now :o)
0
 
fattumsdadAuthor Commented:
Well, that definitely shows.  I can't stress enough how much I appreciate the patience and help you've given!  Thanks again!  I'm sure I'll have another question in a couple hours or so LOL.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.