我正在尝试制作一个将在外部应用程序中编辑菜单项(带有子菜单项)的应用程序(我正在尝试将应用程序菜单翻译成另一种语言)。
我目前正在记事本上进行测试,这是我要实现的目标的直观预览:
我被困住了,如果有任何帮助/小费,我将不胜感激
下面是我写的代码,但它不起作用
[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",SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle,IntPtr childAfter,string classname,string windowTitle);
[DllImport("user32.dll")]
public static extern bool DrawMenuBar(IntPtr hWnd);
[DllImport("user32.dll",CharSet = CharSet.Auto,SetLastError = false)]
internal static extern IntPtr SendMessage(IntPtr hWnd,uint Msg,IntPtr wParam,string lParam);
private const int WM_GETTEXT = 0x000D;
private const int WM_SETTEXT = 0x000C;
private void Button1_Click(object sender,EventArgs e)
{
foreach (Process proc in Process.GetProcesses())
{
if (proc.Processname.ToLower() == "notepad")
{
var HMENU = GetMenu(proc.MainWindowHandle);
var count = GetMenuItemCount(HMENU);
//somehow change menu text
var menu = FindWindowEx(HMENU,IntPtr.Zero,"File",null);
SendMessage(menu,WM_SETTEXT,"New text1");
while (count > 0)
{
var HsubMENU = GetSubMenu(HMENU,count);
//somehow change submenu text
var submenu = FindWindowEx(HsubMENU,"Page Setup...",null);
SendMessage(submenu,"New text2");
count--;
}
DrawMenuBar(proc.MainWindowHandle);
break;
}
}
}