Feedback

System-Menü des Formulars „manipulieren“/Einträge hinzufügen

Sprache: C#

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: [code]int handle = this.Handle.ToInt32();[/code] Seperator hinzufügen: [code]SystemMenu.AddSeperator(handle);[/code] Eintrag hinzufügen: [code]SystemMenu.AddItem(hanlde, "Eintrag");[/code] Mehrere Einträge aus StringListe hinzufügen: [code]List<string> itemsList = new List&lt;string&gt;(); // Einträge auf beliebige Weise hinzufügen SystemMenu.AddItems(handle, itemsList);[/code] Abfragen ob ein Element geklickt wurde (Der Index wird beginnend bei 0 hochgezählt. Der zweite manuell hinzugefügte Eintrag hat also Index 1.): [code] 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"); } } } [/code] Es können/müssen selbstverständlich weitere Abfragen der Art [code] if (m.WParam.ToInt32() == index) { MessageBox.Show("TestItem"); } [/code] 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++;
        }
    }
}
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++;
        }
    }
}