このコードを使用して、C#のネイティブWindowsエクスプローラメニューを反復処理します。x64プラットフォームのC#からネイティブAPIを呼び出す際の問題
これは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アプリケーションからこのコードを呼び出すとき - それは、完璧に動作 しかし、ときに私このコードを「Any CPU」アプリケーションから呼び出すと、動作していません。エラーコード87(ERROR_INVALID_PARAMETER)が返されます。
アイデア?
ありがとうございました。
GetMenuItemCount呼び出しは成功していますか?カウントが-1かどうかを確認する必要があります。 –
また、2行目に作成しているMENUITEMINFOタイプは何ですか?それはあなた自身のタイプですか、フレームワークによって提供されていますか?私は名前空間プレフィックスを持たないので、それはあなた自身のものだと仮定していますが、おそらくあなたは私たちが見ることができない "using"ステートメントを持っていますか? –