InsertMenuItem切断字符串到第一个字符

时间:2018-09-01 17:02:52

标签: c# menu

我正在尝试使用InsertMenuItem修改窗口的系统菜单(而不是InsertMenu-原因是我想最终插入子菜单)。语言是C#。

尝试插入新项目,尝试获取现有项目并重新插入,然后插入,但是项目字符串仅在菜单中显示为第一个字符。有人对我的失踪有任何线索吗?

        // try creating one from scratch
        MENUITEMINFO it = new MENUITEMINFO();
        it.cbSize = (uint)Marshal.SizeOf(it);
        it.fMask = 64;// MIIM_STRING
        it.wID = 12345;
        it.dwTypeData = "Now is the time";
        it.fType = 0;
        it.cch = 0;
        InsertMenuItem(hSysMenu, 7, true, ref it);

        //try copying one
        GetMenuItemInfo(hSysMenu, (uint)0, true, ref it);
        it.cch += 10;
        it.dwTypeData = new string(' ', (int)(menuItemInfo.cch+10));
        GetMenuItemInfo(hSysMenu, (uint)0, true, ref it);
        it.wID = 123456;
        var err = InsertMenuItem(hSysMenu, 1, true, ref it);

以上代码的结果 enter image description here

1 个答案:

答案 0 :(得分:0)

好吧,我终于明白了。我将其留在此处,以便稍后其他人可能对此感到困惑时找到它。

原因是使用以下方法定义了InsertMenuItem p / invoke

pinvoke.net网站中的[DllImport(“ user32.dll”)]-请参见https://www.pinvoke.net/default.aspx/user32/insertmenu.html?diff=y

它必须是

[DllImport(“ user32.dll”,CharSet = CharSet.Auto)]

我更改了pinvoke.net页面以反映它。