You are currently offline, waiting for your internet to reconnect

How to Programmatically Disable Microsoft Excel Control Menu Commands

This article was previously published under Q107689
Retired KB Content Disclaimer
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
SUMMARY
You can use the Microsoft Windows Dynamic Link Libraries (DLLs) todisable the commands in the Microsoft Excel Control menu. For example,you can use these tools to delete the Minimize and Maximize buttons.
MORE INFORMATION
Microsoft provides programming examples for illustration only, without warranty either expressed or implied. This includes, but is not limited to, the implied warranties of merchantability or fitness for a particular purpose. This article assumes that you are familiar with the programming language that is being demonstrated and with the tools that are used to create and to debug procedures. Microsoft support engineers can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific requirements. Microsoft Excel does not have the built-in functionality to modify theControl menu commands. However, you can use the Declare statement in aVisual Basic procedure to call Microsoft Windows functions to disable andrestore Control menu items.

The following sample Visual Basic procedure, Disable_Control, disablesthe entire Control menu in Microsoft Excel. The macro disables theControl menu for the current session of Microsoft Excel (when you restartMicrosoft Excel the Control menu will be reset). The procedureRestoreSystemMenu restores the Control menu.

Microsoft Excel Version 97 and 7.0

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _      (ByVal lpClassName As String, ByVal lpWindowName As String) As LongDeclare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, _      ByVal bRevert As Integer) As IntegerDeclare Function DeleteMenu Lib "user32" (ByVal hMenu As Integer, _      ByVal nPosition As Integer, ByVal wFlags As Integer) As Integer'The following procedure disables the Control menu.Sub Disable_Control()   Dim X As Integer, hwnd As Long   hwnd = FindWindow("XLMain", Application.Caption)   For X = 1 To 9      'Delete the first menu command and loop until      'all commands are deleted      Call DeleteMenu(GetSystemMenu(hwnd, False), 0, 1024)   Next XEnd Sub'The following procedure restores the Control menu.'Note that to run this procedure, the Declare statements above'must be in the module.Sub RestoreSystemMenu()   Dim hwnd As Long   'Get the window handle of the Excel application.   hwnd = FindWindow("xlMain", Application.Caption)   'Restore system menu to original state.   hMenu% = GetSystemMenu(hwnd, 1)End Sub				

Microsoft Excel version 5.x

'The following procedure disables the Control menuDeclare Function GetActiveWindow Lib "User" () As IntegerDeclare Function GetSystemMenu Lib "User" (ByVal hWnd As Integer, _   ByVal bRevert As Integer) As IntegerDeclare Function DeleteMenu Lib "User" (ByVal hMenu As Integer, _   ByVal nPosition As Integer, ByVal wFlags As Integer) As IntegerSub Disable_Control()   Dim X as Integer   For X = 1 to 9      'Delete the first menu command and loop until      'all commands are deleted      Call DeleteMenu(GetSystemMenu(GetActiveWindow, False),0,1024)   Next XEnd Sub'The following procedure restores the Control menu'Note that to run this procedure, the Declare statements above'must be in the moduleSub RestoreSystemMenu()   'get the window handle of the Excel application   hWnd = GetActiveWindow()   'restore system menu to original state   hMenu% = GetSystemMenu(hWnd, 1)End Sub

Notes

The commands on the control menu are numbered starting at zero. Thedefault control menu items are as follows: Control Menu Restore is item0, Move is item 1, Size is item 2, and so on. Even if items are deleted,the first item always starts at zero.

To delete individual items from the control menu without deleting theentire menu, you can specify the menu command to delete. For example thefollowing two lines of code when used in place of the For Next loop inthe procedure Disable_Control above, will delete the Maximize (item 4)and Minimize (item 3) commands and disable the Maximize and Minimizebuttons.
   Call DeleteMenu(GetSystemMenu(GetActiveWindow, False),4,1024)   Call DeleteMenu(GetSystemMenu(GetActiveWindow, False),3,1024)				
5.00c 8.00 XL97 97 call register remove api XL
Properties

Article ID: 107689 - Last Review: 06/11/2007 06:58:44 - Revision: 2.3

  • Microsoft Excel 97 Standard Edition
  • kbprogramming KB107689
Feedback