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<string>();
// 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++;
}
}
}