C#.NETでsendkeysを使用しています。私は文字と矢印キーを持っており、作業を開始します。コンテキストメニューを右クリックする方法がわかりません。キーボードのキーを押してそれを行うことができることは知っていますが、メッセージを送信する方法がわかりません。どうすればいいですか?私はググって見ました
new MenuItem().PerformClick();
解決策として、しかし私は何の影響も見ませんでした。キーは別のアプリケーションに送信されています。
C#.NETでsendkeysを使用しています。私は文字と矢印キーを持っており、作業を開始します。コンテキストメニューを右クリックする方法がわかりません。キーボードのキーを押してそれを行うことができることは知っていますが、メッセージを送信する方法がわかりません。どうすればいいですか?私はググって見ました
new MenuItem().PerformClick();
解決策として、しかし私は何の影響も見ませんでした。キーは別のアプリケーションに送信されています。
あなたは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());
}
}
}
スペースバーの数か所右に配置されたキーを参照していると仮定すると、状況によってはマウスの右ボタンと同じ操作が実行され、{MENU}が送信する特別なキーになる場合があります。一部のSendKeysバリエーションには実装されておらず、C#.NETの最新バージョンがわかりません。
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)));
@Sparrが示すように、{MENU}キーは常に使用できるとは限りません。ただし、shift-F10を押すと、ほとんどのWindowsアプリケーションでコンテキストメニューが表示されます。だからSendKeys.SendWait("+{F10}");
うまくいくはずです。