C#を使用して、キーボード入力、マウスの動きとクリックをシミュレートし、カーソル位置を設定し、アプリケーションの表示を制御します。



Use C Simulate Keyboard Input



1.アナログキーボード入力(SendKeys)


機能:キーボードで入力しているかのように、1つ以上のボタンメッセージをアクティブウィンドウに送信します。



構文:SendKeys.Send(文字列キー)SendKeys.SendWait(文字列キー)

説明:



(1)各ボタンは1つ以上の文字で表されます。単一のキーボード文字を指定するには、文字自体のキーを押す必要があります。たとえば、文字Aを表すには、文字列として「A」を使用できます。複数の文字を表すには、文字の直後に別の文字を追加する必要があります。たとえば、A、B、およびCを表すには、文字列として「ABC」を使用します。

(2)SendKeysの場合、プラス記号(+)、キャレット(^)、パーセント記号(%)、オーバースコア(〜)、および括弧()はすべて特別な意味を持ちます。上記の文字のいずれかを指定するには、中かっこ({})で囲みます。たとえば、正の符号を指定するには、{+}で表すことができます。角かっこ([])は、SendKeysにとって特別な意味はありませんが、中かっこで囲む必要があります。他のアプリケーションでは、角括弧には特別な意味があり、動的データ交換(DDE)が存在する場合に重要になることがあります。中括弧を指定するには、{{}と{}}を使用します。

(3)ENTERやTABなど、ボタンを押しても表示されない文字や、文字の代わりにアクションを表す文字を指定するには、次のコードを使用します。



ボタン コード
バックスペース {BACKSPACE}、{BS}、または{BKSP}
ブレーク {ブレーク}
キャップスロック {キャップスロック}
DELまたはDELETE {DELETE}または{DEL}
下矢印 {ダウン}
終わり {終わり}
入る {ENTER}または〜
ESC {ESC}
助けて {助けて}
ホームホーム {ホーム}
INSまたはINSERT {INSERT}または{INS}
左矢印 {左}
NUM LOCK {NUMLOCK}
ページダウン {PGDN}
ページアップ {PGUP}
PRINT SCREEN {PRTSC}
右矢印 {正しい}
スクロールロック {スクロールロック}
タブ {タブ}
上矢印 {アップ}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F1}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}

(4)SHIFT、CTRL、ALTなどのキーと組み合わせてこれらのキーの組み合わせを指定するために、以下にリストされているこれらのキーコードの前に1つ以上のコードを配置できます。

ボタン コード
シフト +
Ctrl ^
すべて

他のボタンを押すときにSHIFT、CTRL、およびALTの任意の組み合わせを同時に押すことができることを示すには、これらのボタンのコードを括弧で囲みます。たとえば、EキーとCキーを押しながらShiftキーを押すと言うには、「+(EC)」を使用します。 Eを押しながらSHIFTボタンを押してから、SHIFTの代わりにCを押すと、「+ EC」が使用されることを説明します。

リピートキーを指定するには、{キー番号}の形式を使用します。キーと数字の間にスペースを入れる必要があります。たとえば、{LEFT 42}は、左矢印キーが42回押されたことを意味します{h 10}は、Hキーが10回押されたことを意味します。

注:SendKeysを使用して、MicrosoftWindowsで実行するように設計されていないアプリケーションにキーメッセージを送信することはできません。 Sendkeysは、PRINTSCREENボタン{PRTSC}をどのアプリケーションにも送信できません。

(5)SendKeys.Sendで漢字を入力します(「漢字」)

元のブログアドレス: http://www.cnblogs.com/sydeveloper/archive/2013/02/25/2932571.html

2.マウスの動きをシミュレートし、クリックします


使用する必要のあるmouse_event関数はuser32.dllライブラリファイルにあるため、最初に参照を宣言する必要があります。

 1 [DllImport('user32',CharSet=CharSet.Unicode)]  2 private static extern int mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo)  3 //Moving the mouse   4 const int MOUSEEVENTF_MOVE = 0x0001  5 //Simulate left mouse button press   6 const int MOUSEEVENTF_LEFTDOWN = 0x0002  7 //Simulate left mouse button up   8 const int MOUSEEVENTF_LEFTUP = 0x0004  9 //Simulate mouse right click  10 const int MOUSEEVENTF_RIGHTDOWN = 0x0008 11 //Simulate the right mouse button up  12 const int MOUSEEVENTF_RIGHTUP = 0x0010 13 //Analog mouse button press  14 const int MOUSEEVENTF_MIDDLEDOWN = 0x0020 15 //Analog mouse middle button lift  16 const int MOUSEEVENTF_MIDDLEUP = 0x0040 17 //Indicate whether absolute coordinates are used  18 const int MOUSEEVENTF_ABSOLUTE = 0x8000

dwFlags: ボタンをクリックしてマウスを操作するためのさまざまな状況を指定するフラグビットのセット。このパラメーターの各パラメーターは、次の値の任意の適切な組み合わせにすることができます。

  • MOUSEEVENTF_ABSOLUTE:パラメーターdX、dyに正規化された絶対座標が含まれていることを示します。このビットが設定されていない場合、パラメーターには相対データ(最後の位置に対する変更の場所)が含まれます。このフラグは、マウスのタイプまたはシステムに接続されているマウスのようなデバイスのタイプに関係なく、設定することも設定しないこともできます。相対的なマウスアクションについては、以下の「備考」セクションを参照してください。
  • MOUSEEVENTF_MOVE:移動が発生したことを示します。
  • MOUSEEVENTF_LEFTDOWN:マウスの左ボタンが押されたことを示します。
  • MOUSEEVENTF_LEFTUP:マウスの左ボタンが離されたことを示します。
  • MOUSEEVENTF_RIGHTDOWN:マウスの右ボタンが押されたことを示します。
  • MOUSEEVENTF_RIGHTUP:マウスの右ボタンが離されたことを示します。
  • MOUSEEVENTF_MIDDLEDOWN:マウスの中ボタンが押されたことを示します。
  • MOUSEEVENTF_MIDDLEUP:マウスの中ボタンが離されたことを示します。
  • MOUSEEVENTF_WHEEL:Windows NTでマウスに丸みがある場合、マウスホイールが移動します。移動の数はdwDataによって与えられます。

dx: x軸に沿ったマウスの絶対位置、または最後のマウスイベントが生成されてからの移動数の指定は、MOUSEEVENTF_ABSOLUTEの設定によって異なります。与えられた絶対データは、マウスの実際のX座標として取得され、与えられた相対データは、移動するミッキーの数として与えられます。ミッキーはマウスの動きの数を示し、マウスが動いたことを示します。

dy: y軸に沿ったマウスの絶対位置、または最後のマウスイベントが生成されてからの移動回数の指定は、MOUSEEVENTF_ABSOLUTEの設定によって異なります。与えられた絶対データはマウスの実際のy座標として取られ、与えられた相対データは動くミッキーの数として与えられます。

dwData: dwFlagsがMOUSEEVENTF_WHEELの場合、dwDataはマウスホイールの動きの数を指定します。正の値は、マウスホイールが前方に回転していること、つまりユーザーから離れていることを示し、負の値はマウスホイールが後方に回転していること、つまりユーザーに向かって回転していることを示します。ホイールは、120であるWHEEL_DELTAとして定義されます。

dwFlagsがMOUSEEVENTF_WHEELでない場合、dWDataはゼロである必要があります。

dwExtralnfo: マウスイベントに関連付けられた追加の32ビット値を指定します。アプリケーションは関数GetMessageExtraInfoを呼び出して、この追加情報を取得します。

戻り値: しない。

プログラムでは、mouse_event関数を直接呼び出すことができます。 mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE、500、500、0、0)

1.これは、マウスの左ボタンを押して2つのイベントを解放する組み合わせです。1回のマウスクリック:mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP、0、0、0、0)

2.マウスの右クリックイベントをシミュレートします:mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP、0、0、0、0)

3. 2つの連続する左マウスクリックイベントは、マウスダブルクリックイベントを構成します。mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP、0、0、0、0)mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP、0、0、0、0)

4.絶対座標を使用します(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE、500、500、0、0)

MOUSEEVENTF_ABSOLUTEが使用されていない場合、関数はデフォルトでマウスの現在の位置を基準にしたポイントに設定されることに注意してください。 dxおよびdyの場合、0、0で表されます。この関数は、現在のマウスが配置されているポイントと見なされます。

5.絶対座標を直接設定し、mouse_event(MOUSEEVENTF_LEFTDOWN、X * 65536/1024、Y * 65536 / 768、0、0)mouse_event(MOUSEEVENTF_LEFTUP、X * 65536/1024、Y * 65536 / 768、0、0)をクリックします。 X、Yは、それぞれクリックするポイントの横座標と縦座標です。

6、Keybd_event()を使用したキーボードシミュレーション

Keybd_eventは、ボタンイベントをトリガーできます。これは、WM_KEYDOWNまたはWM_KEYUPメッセージが生成されることを意味します。もちろん、これら2つのメッセージを使用してボタンをシミュレートすることもできますが、この機能を直接使用するのは便利ではありません。 Keybd_eventには4つのパラメーターがあります。 1つ目は、ボタンの仮想キー値です。たとえば、Enterキーはvk_returnで、Tabキーはvk_tabです。 2番目のパラメータはスキャンコードです。通常、設定する必要はありません。 3番目のパラメーターはオプションフラグです。キーダウンの場合は0に設定できます。キーアップの場合は「KEYEVENTF_KEYUP」に設定されます。 4番目のパラメーターも0に設定されます。

ブログに転載(若干改訂): http://www.cnblogs.com/blackice/p/3418414.html

DllImportの他のプロパティについては、MSDN(フィールド)を参照してください。 https://msdn.microsoft.com/zh-cn/library/system.runtime.interopservices.dllimportattribute.aspx

3.カーソル位置を設定します


参照を宣言し、メソッドをインポートします

1 [DllImport('User32.dll')] 2 public extern static bool GetCursorPos(ref Point pot) 3 4 [DllImport('User32.dll')] 5 public extern static void SetCursorPos(int x, int y)

メソッドを呼び出してカーソル位置を設定します

1 SetCursorPos(int.Parse(pointX), (int.Parse(pointY)) 

4.アプリケーションの表示を制御します


参照を宣言し、メソッドをインポートします

1 [DllImport('User32.dll')] 2 public static extern bool SetForegroundWindow(IntPtr hWnd) 3 4 [DllImport('User32.dll')] 5 public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow)

メソッドを呼び出して、開いているWebページ(IE)ウィンドウをアクティブにしてデスクトップに表示します

 1 static void Main(string[] args)  2 {  3 Process[] localByName = Process.GetProcessesByName('iexplore')  4 foreach (Process proc in localByName)  5  {  6 //internet explorer uses a hosting model - one iexplore.exe instance hosts the internet explorer frame,  7 //The other iexplore.exe instances just display the contents of tabs (the page title - MainWindowTitle is not an empty string)  8 if (proc.MainWindowTitle != string.Empty)  9  { 10 IntPtr handle = proc.MainWindowHandle 11  SetForegroundWindow(handle) 12 ShowWindow(handle, 3) 13  } 14  } 15 }

このメソッドの効果は次と同等です。

関連資料: ウィンドウとメッセージウィンドウ関数プロセスクラス 、WindowsAPI関数リファレンスマニュアル(書籍資料、オンラインはPDF版で見つけることができます)

転載:https://www.cnblogs.com/makesense/p/6215732.html