如何在外部应用程序中替换菜单/子菜单项

我正在尝试制作一个将在外部应用程序中编辑菜单项(带有子菜单项)的应用程序(我正在尝试将应用程序菜单翻译成另一种语言)。

我目前正在记事本上进行测试,这是我要实现的目标的直观预览:

如何在外部应用程序中替换菜单/子菜单项

我被困住了,如果有任何帮助/小费,我将不胜感激

下面是我写的代码,但它不起作用

[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;
        }
    }
}
aijiangshanmk 回答:如何在外部应用程序中替换菜单/子菜单项

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3028334.html

大家都在问