Create ContextMenu's MenuItem and put that to Form's SystemMenu by API Functions (GetSystemMenu, GetMenuItemID, InsertMenu)
Introduction
Why do we need to use MenuItem
for adding to SystemMenu
?
A MenuItem
has own Event
and is easy to use for invoking our Command statements.
Background
Using API Functions for Add MenuItem to SystemMenu: GetSystemMenu API Function to take Handle of Form's SystemMenu - GetMenuItemID API Function to take ContextMenu's MenuItem ID and InsertMenu API Function to Insert MenuItem at SystemMenu.
![Image 1](/KB/Articles/5349422/a913c3b8-3057-4ede-8d54-d355d4ad1aaa-r-700.Png)
Using the Code
Use API Functions at General Declarations of Form
GetSystemMenu API Function
Declare Function GetSystemMenu Lib "user32" Alias "GetSystemMenu" (
ByVal hwnd As Long,
ByVal bRevert As Boolean) As Long
GetMenuItemID API Function
Declare Function GetMenuItemID Lib "user32" (
hMenu As Long,
nPos As Integer) As Integer
InsertMenu API Function
Declare Function InsertMenu Lib "user32" Alias "InsertMenuA" (
ByVal hMenu As Long,
ByVal nPosition As Long,
ByVal wFlags As Long,
ByVal wIDNewItem As Long,
ByVal lpNewItem As String) As Long
You need to add a ContextMenu component to your Form
at first:
![Image 2](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
Make a new MenuItem (e.g., About MenuItem
):
![Image 3](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
Then, add an 'About Box' to the project:
![Image 4](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
To take SystemMenu's Handle
of the Form
:
Dim SysMenu As Long = GetSystemMenu(Me.Handle.ToInt64, False)
Take MenuItem ID:
Dim hMenuItem As Long = GetMenuItemID(MenuItem1.Parent.Handle.ToInt64, MenuItem1.Index)
Insert MenuItem to Form
's SystemMenu:
InsertMenu(SysMenu, 0, &H0&, hMenuItem, MenuItem1.Text)
Add the above statements to the Form
's Load Event:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim SysMenu As Long = GetSystemMenu(Me.Handle.ToInt64, False)
Dim hMenuItem As Long = _
GetMenuItemID(MenuItem1.Parent.Handle.ToInt64, MenuItem1.Index)
InsertMenu(SysMenu, 0, &H0&, hMenuItem, MenuItem1.Text)
End Sub
Double click on ContextMenu
's MenuItem
to write Command
statements as below:
Private Sub MenuItem1_Click(sender As Object, e As EventArgs) Handles MenuItem1.Click
Dim AboutBox As New AboutBox1
AboutBox.Show(Me)
End Sub
History
- 13th December, 2022: Initial version
I learned VB from VB 6.0, And Now Use Visual Studio 2015.
I have made 'Group Policy Admin Template Maker' App to making GP Administrative Template for WinXP.