Я использую этот код, чтобы перебрать собственное меню Windows Explorer из C #.
это импорт функции GetMenuItemInfo:
[DllImport("user32.dll",SetLastError = true)]
public static extern bool GetMenuItemInfo(IntPtr hMenu, int uItem,
bool fByPosition, ref MENUITEMINFO lpmii);
с этим кодом, я перебираю меню:
int count = User32.GetMenuItemCount(menu);
var itemInfo = new MENUITEMINFO();
itemInfo.cbSize = Marshal.SizeOf(itemInfo);
itemInfo.fMask = MIIM.MIIM_ID | MIIM.MIIM_STRING;
bool previousDeleted = false;
for (int n = 0; n < count; n++)
{
itemInfo.dwTypeData = new string(' ', 100);
itemInfo.cch = 100;
if(!User32.GetMenuItemInfo(menu, n, true, ref itemInfo))
{
Debug.Print("Error={0}",Marshal.GetLastWin32Error());
}
...
Когда я вызываю этот код из приложения x86 - он работает отлично, но когда я вызываю этот код из приложения «Любой процессор», он не работает и возвращает код ошибки 87 (ERROR_INVALID_PARAMETER).
Есть идеи?
Спасибо.