Feedback

C# - System-Menü des Formulars "manipulieren"/Einträge hinzufügen

Veröffentlicht von am 1/25/2013
(0 Bewertungen)
Mit den Folgenden Methoden aus der Unten stehenden Klasse kann man ziemlich Simpel Einträge in das System-Menü hinzufügen.

Das System-Menü ist das Menü, das sich öffnet, wenn man auf das Icon einer Anwendung klickt.
Bild: https://www.dropbox.com/s/0546l8rm3m9v0nb/SystemMenu.JPG

Demo: https://dl.dropbox.com/s/dp6psg00ot72yqn/SystemMenuTester.exe?dl=1

Als erstes:
int handle = this.Handle.ToInt32();


Seperator hinzufügen:
SystemMenu.AddSeperator(handle);


Eintrag hinzufügen:
SystemMenu.AddItem(hanlde, "Eintrag");


Mehrere Einträge aus StringListe hinzufügen:
List<string> itemsList = new List&lt;string&gt;();
// Einträge auf beliebige Weise hinzufügen
SystemMenu.AddItems(handle, itemsList);


Abfragen ob ein Element geklickt wurde (Der Index wird beginnend bei 0 hochgezählt. Der zweite manuell hinzugefügte Eintrag hat also Index 1.):

int index = 0;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);

if (m.Msg == 0x112)
{
if (m.WParam.ToInt32() == index)
{
MessageBox.Show("TestItem");
}
}
}

Es können/müssen selbstverständlich weitere Abfragen der Art

if (m.WParam.ToInt32() == index)
{
MessageBox.Show("TestItem");
}

für jeden Index/also jedes Item hinzugefügt werden...
PS: In diesem Fall reicht natürlich ein ELSE if(...):
Niemand kann zwei Sachen gleichzeitig anklicken :)

Feedback wäre nett.. :)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;

class SystemMenu
{
    [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);


    private static int CountItems = 0;

    public static void AddSeperator(int FormHandleAsInt)
    {
        int menu = GetSystemMenu(FormHandleAsInt, 0);
        AppendMenu(menu, 0xA00, 0, null);
    }

    public static void AddItem(int FormHandleAsInt, string name)
    {
        int menu = GetSystemMenu(FormHandleAsInt, 0);
        AppendMenu(menu, 0, CountItems, name);
        CountItems++;
    }

    public static void AddItems(int FormHandleAsInt, List<String> items)
    {
        int menu = GetSystemMenu(FormHandleAsInt, 0);
        for (int i = 0; i < items.Count; i++)
        {
            AppendMenu(menu, 0, CountItems, items[i]);
            CountItems++;
        }
    }
}
Abgelegt unter System, Menü, Einträgehinzufügen.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!