C# InsertMenuItem将字符串截断为第一个字符
我试图使用InsertMenuItem(而不是InsertMenuItem)修改窗口的系统菜单,原因是我希望最终插入子菜单。语言是C# 尝试插入一个新项目,尝试获取现有项目并重新插入,它将插入,但项目字符串仅作为第一个字符显示在菜单中。有人知道我遗漏了什么吗C# InsertMenuItem将字符串截断为第一个字符,c#,menu,C#,Menu,我试图使用InsertMenuItem(而不是InsertMenuItem)修改窗口的系统菜单,原因是我希望最终插入子菜单。语言是C# 尝试插入一个新项目,尝试获取现有项目并重新插入,它将插入,但项目字符串仅作为第一个字符显示在菜单中。有人知道我遗漏了什么吗 // try creating one from scratch MENUITEMINFO it = new MENUITEMINFO(); it.cbSize = (uint)Marshal
// 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);
以上代码的结果
好的,我终于明白了。我会把这个放在这里,这样当其他人对此感到困惑时,他们可能会发现它 原因是InsertMenuItem p/invoke是用 [DllImport(“user32.dll”)]位于pinvoke.net网站中-请参阅 而且它必须是 [DllImport(“user32.dll”,CharSet=CharSet.Auto)] 我更改了pinvoke.net页面以反映它