1

別のアプリケーションを右クリックし、コンテキスト メニュー (右クリック後に開いたもの) を取得し、そこから項目を選択する必要があります。

他のアプリケーション ハンドルで postMessage を使用できます。その結果、要求されたコンテキスト メニューが表示されましたが、そこから選択する方法がわかりません。

    public  const int WM_RBUTTONDOWN = 0x0204;

    public  const int WM_RBUTTONUP = 0x0205;


    [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SendMessage", CharSet = System.Runtime.InteropServices.CharSet.Auto)]

    public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);



    [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "PostMessage", CharSet = System.Runtime.InteropServices.CharSet.Auto)]

    public static extern void PostMessage(IntPtr hWnd, int msg, int wParam, int lParam);



    Point p = Cursor.Position;

    PostMessage((IntPtr)123456, WM_RBUTTONDOWN, 0, 0);

    PostMessage((IntPtr)123456, WM_RBUTTONUP, 0, 0);

次に何をすればよいですか (コンテキスト メニューが開いています)。

ありがとう、トーマー。

4

1 に答える 1

0

特定のアクションをトリガーしたいと思います。コンテキスト メニューをポップアップする必要はありません。選択するコンテキスト メニュー項目に一致するWM_COMMANDメッセージを投稿するだけです。Spy++ やWinspectorなどのツールを使用して、目的のメニュー項目に関連付けられた WM_COMMAND 項目 ID を見つけることができます。

PostMessage((IntPtr)hWnd, WM_COMMAND, 0, ID_MENU_ITEM);

編集:あなたのコメントへの回答の明確化:

メニューではなく、メイン ウィンドウに WM_COMMAND メッセージを直接送信またはポストします。実際には、メニューをポップアップする必要はまったくありません。コンテキスト メニューは、ユーザーがアクションを選択できる単なる GUI 要素です。アプリケーションは、アクションを伝えるためにメニューを表示する必要はありません。

于 2009-05-25T14:15:43.050 に答える