我正在尝试使用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);
答案 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页面以反映它。