Hi mateusz_lozo,
Your question is nearly two months old. I don't know if you are still interested in this, but I know how to do it.
You Need to use ModifyMenu and GetMenuItemID Windows-API Functions and call them per Interop.
Here you have an example that shows how to change notpads file menu:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace ConsoleApp6
{
class Program
{
[DllImport("user32.dll")]
public static extern IntPtr GetMenu(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern IntPtr GetSubMenu(IntPtr hMenu, int nPos);
[DllImport("user32.dll")]
public static extern int GetMenuItemCount(IntPtr hMenu);
[DllImport("user32.dll")]
static extern bool ModifyMenu(IntPtr hMnu, uint uPosition, uint uFlags, IntPtr uIDNewItem, string lpNewItem);
[DllImport("user32.dll")]
static extern uint GetMenuItemID(IntPtr hMenu, int nPos);
const uint MF_BYPOSITION = 0x00000400;
static void ChangeText()
{
foreach (Process proc in Process.GetProcesses())
{
if (proc.ProcessName.ToLower() == "notepad")
{
var hwndMenuMain = GetMenu(proc.MainWindowHandle);
var hwndMenuFile = GetSubMenu(hwndMenuMain, 0);
uint menuItemIDFile = GetMenuItemID(hwndMenuFile, 0);
ModifyMenu(hwndMenuMain, 0, MF_BYPOSITION, (IntPtr)menuItemIDFile, "Test");
var count = GetMenuItemCount(hwndMenuFile);
for (int i = 0; i < count; i++)
{
uint menuItemIDSub = GetMenuItemID(hwndMenuFile, i);
ModifyMenu(hwndMenuFile, (uint) i, MF_BYPOSITION, (IntPtr)menuItemIDSub, "SubMenu" + i);
}
break;
}
}
}
static void Main(string[] args)
{
ChangeText();
Console.ReadKey();
}
}
}
Enjoy!
Johannes