1

C#.NETでsendkeysを使用しています。私は文字と矢印キーを持っており、作業を開始します。コンテキストメニューを右クリックする方法がわかりません。キーボードのキーを押してそれを行うことができることは知っていますが、メッセージを送信する方法がわかりません。どうすればいいですか?私はググって見ました

new MenuItem().PerformClick();

解決策として、しかし私は何の影響も見ませんでした。キーは別のアプリケーションに送信されています。

4

4 に答える 4

3

あなたはuser32.dllをラップすることができます、私はここから一般的な考えを得ました

編集: マウスの座標となるposXとposYを追加しました。

using System;
using System.Runtime.InteropServices;

namespace WinApi
{  
    public class Mouse
    { 
            [DllImport("user32.dll")]
            private static extern void mouse_event(UInt32 dwFlags,UInt32 dx,UInt32 dy,UInt32 dwData,IntPtr dwExtraInfo);

            private const UInt32 MouseEventRightDown = 0x0008;
            private const UInt32 MouseEventRightUp = 0x0010;

            public static void SendRightClick(UInt32 posX, UInt32 posY)
            {
                mouse_event(MouseEventRightDown, posX, posY, 0, new System.IntPtr());
                mouse_event(MouseEventRightUp, posX, posY, 0, new System.IntPtr());
            }    
    }
}
于 2010-01-07T22:32:47.880 に答える
2

スペースバーの数か所右に配置されたキーを参照していると仮定すると、状況によってはマウスの右ボタンと同じ操作が実行され、{MENU}が送信する特別なキーになる場合があります。一部のSendKeysバリエーションには実装されておらず、C#.NETの最新バージョンがわかりません。

于 2010-01-07T23:12:54.287 に答える
1

SendKeys.NETクラスを使用してマウス入力を送信することはできません。少なくとも、私が知っていることでも、文書化されていることでもありません。これを行う最良の方法は、WinAPIに切り替えてSendInputメソッドを使用することです。DllImportこれは、関数( "user32.dll"内)およびStructLayout構造体を使用して.NETで使用できます。

次に、次のように呼び出します。

INPUT pressRight;
pressRight.type = MOUSE; // = 0
pressRight.mi.dx = 0;
pressRight.mi.dy = 0;
pressRight.mi.mouseData = 0;
pressRight.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN; // = 8
pressRight.mi.time = 0;
pressRight.mi.dwExtraInfo = IntPtr.Zero;

INPUT releaseRight = pressRight;
releaseRight.mi.dwFlags = MOUSEEVENTF_RIGHTUP; // = 10

INPUT[] inputs = new INPUT[2];
inputs[0] = pressRight;
inputs[1] = releaseRight;

SendInput(2, inputs, Marshal.SizeOf(typeof(INPUT)));
于 2010-01-07T22:28:26.163 に答える
0

@Sparrが示すように、{MENU}キーは常に使用できるとは限りません。ただし、shift-F10を押すと、ほとんどのWindowsアプリケーションでコンテキストメニューが表示されます。だからSendKeys.SendWait("+{F10}");うまくいくはずです。

于 2014-05-14T05:11:37.143 に答える