Impressum  |   RSS  |  Forum

tsql

C# – Ändern des Systemmenüs einer Form.

csharp_systemmenue_erweitern
Manchmal ist es sinnvoll Menüpunkte im Systemmenü unterzubringen. Ein About Button oder ein Hilfe Menü ist dafür besonders geeignet.

Natürlich geht das auch in C#. Alles was dafür nötig ist, sind die Funktionen GetSystemMenu und AppendMenu aus der user32.dll.

Dieses Beispiel fügt einen Separator und ein “Test Menue” ein. Das Beispiel zeigt den Inhalt meiner Form1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
 
namespace SystemMenu
{
    public partial class Form1 : Form
    {
        [DllImport("user32.dll")]
        private static extern int GetSystemMenu(int hwnd, int bRevert);
 
        [DllImport("user32.dll")]
        private static extern int AppendMenu(
          int hMenu, int Flagsw, int IDNewItem, string lpNewItem);
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            SetupSystemMenu();
        }
 
        private void SetupSystemMenu()
        {
            // Handle des Menue's
            int menu = GetSystemMenu(this.Handle.ToInt32(), 0);
            // Separator einfügen
            AppendMenu(menu, 0xA00, 0,null);
            // Eindeutige ID (IDNewItem) als Beispiel 111
            AppendMenu(menu, 0, 111, "Test Menue");
        }
 
        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
 
            if (m.Msg == 0x112)
            {
                // Wurde die ID 111 (unsere Testeintrag) angeklickt?
                if (m.WParam.ToInt32() == 111)
                {
                    MessageBox.Show("Test Menue");
                }
            }
        }
 
    }
}

Tags: , , ,