指定されたウィンドウを送信するためにC#のWindows APIと呼ばれます

http://www.51testing.com/?uid-175761-action-viewspace-itemid-227073元から転載

コール のWindows API。
 次のようにC#のWindows API呼び出しがある下:
 1、名前空間の導入;使用System.Runtime.InteropServices
 2、参照方法は、フォーマットの使用が必要:[DLLIMPORT( "DLLファイル")]メソッドを宣言し;
 [DLLIMPORT(「USER32。 DLL ")]プライベート静的にextern BOOLのhWnd、nCmdShowのINT)のIntPtrのShowWindow(;
 [DLLIMPORT(" User32.dllの")]のhWndのIntPtrプライベート静的にextern BOOL SetForegroundWindow();
 [DLLIMPORT(" User32.dllの「)]プライベート静的にextern FindWindowのIntPtr(lpClassName文字、文字列lpWindowName);
 [DLLIMPORT( "User32.dllの")]のSendMessage INTプライベート静的にextern(のhWndのIntPtr、lParamにINTメッセージ、wParamにINTを、INT)。
 [DLLIMPORT( "user32.dllの")]プライベート静的にexternのブールSetCursorPos(INTのX、Y INT)。
 [DLLIMPORT( "user32.dllの")]プライベート静的にexternボイドMOUSE_EVENT(int型dwFlagsパラメータ、int型DX、int型DY、int型dwData、int型dwExtraInfo)。
 [DLLIMPORT( "user32.dllの")]プライベート静的にextern無効keybd_event(バイトBVK、バイトBSCAN、UINT dwFlagsパラメータ、UINT dwExtraInfo)。
  [DLLIMPORT( "user32.dllの")]プライベート静的にexternのブールSetWindowPos(のIntPtr hWndは、のIntPtr hWndlnsertAfter、int型のXは、Y、INT CX、CY INT、UINTフラグをINT)。
 //のShowWindow参数
 民間のconst int型SW_SHOWNORMAL = 1;
 民間のconst int型SW_RESTORE = 9;
 民間のconst int型SW_SHOWNOACTIVATE = 4;
 //のSendMessage参数
 民間のconst int型WM_KEYDOWN = 0X100。
 プライベートのconst int型WM_KEYUP = 0x101の、
 プライベートのconst int型WM_SYSCHAR = 0x106;
 プライベートのconst int型WM_SYSKEYUP = 0x105;
 プライベートのconst int型WM_SYSKEYDOWN = 0x104;
 int型プライベートconstのWM_CHAR = 0x102が、

第二に、ターゲットウィンドウ見つける
1)、ウィンドウのタイトルに応じてハンドルを与えるため
 のIntPtrをmyIntPtr = FindWindowを(NULL、 "ウィンドウ名"); // nullのクラス名、また空であって、++スパイすることによって得ることができる
 のShowWindow(myIntPtr、SW_RESTORE); //ウィンドウの復元
 SetForegroundWindow(myIntPtrを); //そうでない場合のShowWindowこの方法は、最小化したウィンドウを設定することはできません
2)、すべてのウィンドウを経て得られたハンドルを
委譲し、コールバック、ウィンドウの列挙API(EnumWindows)、ウィンドウクラス名とAPI(GetClassNameW)を得ウィンドウAPI(GetWindowTextW)の名前を与えるために、
 デリゲートパブリックBOOLをコールバック(int型HWND、int型のlParam) ;
 [DLLIMPORT( "USER32")]パブリック静的にextern INT EnumWindows(コールバックのx、int型のY)。
  [DLLIMPORT( "user32.dllの")]プライベート静的にextern int型GetWindowTextW(のIntPtr hWndは、[MarshalAs(UnmanagedType.LPWStr)]のStringBuilder lpString、INT nMaxCount)。
 [DLLIMPORT( "user32.dllの")]プライベート静的にextern int型GetClassNameW(のIntPtr hWndは、[MarshalAs(UnmanagedType.LPWStr)]のStringBuilder lpString、INT nMaxCount)。
2调用EnumWindows遍历窗口
 コールバックmyCallBack =新しいコールバック(リコール)。
 EnumWindows(myCallBack、0);
3リコール方法回调
 公共BOOLリコール(INT HWND、INTのlParam)
 {
  StringBuilderのSB =新規のStringBuilder(256)。
  IntPtr PW =新しいのIntPtr(HWND);

  GetWindowTextW(PW、SB、sb.Capacity) ; // STRNAMEウィンドウ名を取得し、に保存されている
  文字列sb.ToString STRNAME =();

  GetClassNameW(PW、SB、sb.Capacity); //ウィンドウクラス名を取得しに保存されていますstrClass
  ;文字列strClass sb.ToString =()

  IF(strName.IndexOf( "ウィンドウ名キーワード")> = 0 && strClass.IndexOf( " クラス名キーワード")> = 0)
  {
   falseに復帰; //戻ります懸濁偽EnumWindowsを横断
  }
  他
  {
   真への復帰を、trueを返す//はEnumWindowsを横断し続ける
  }
 }
3)、取得するためにウィンドウを開くためにハンドル
アクティブウィンドウの定義はAPI(SetActiveWindow)が設けられ、フォアグラウンドウィンドウは、API(SetForegroundWindow)が設けられている
 [DLLIMPORT(「User32.dllの「)]静的にexternのIntPtr SetActiveWindow( のIntPtrのhWnd)。
 [DLLIMPORT( "User32.dllの")] [リターン:MarshalAs(UnmanagedType.Bool)](のhWndのIntPtr)SetForegroundWindow BOOL静的にextern;
2ウィンドウが開き
 ( "ターゲットプログラムパス" @)プロセスPROC = Process.Startを、
 SetActiveWindow(PROC .MainWindowHandle)
 ; SetForegroundWindow(proc.MainWindowHandle)

指定されたウィンドウには3つの入力データ
API(のSendMessage)ウィンドウに送信メッセージを用いて送信データを
 inputstrに(myIntPtr、_GameID); //入力されたゲームID
 のSendMessage(myIntPtr、WM_SYSKEYDOWN、0x09の、0); // TAB(0x09の)入力
 のSendMessage(myIntPtr、WM_SYSKEYUP、0x09の、0);
 inputstrに(myIntPtr、_GamePass); //ゲームのパスワード入力
 のSendMessage(myIntPtr、WM_SYSKEYDOWN、0x0Dを、 0); // 入力を入力します( 0x0Dの)
 のSendMessage(myIntPtr、WM_SYSKEYUP、0x0Dを、0);

 /// <まとめ>
 文字列を送信///
 /// </要約>
 /// <PARAM NAME = "myIntPtr">ウィンドウハンドル</ param>の
 /// <PARAM NAME = "入力">文字列</ param>の
 公共のボイドinputstrに(のIntPtr myIntPtr、入力文字列)
 {
  バイト[] = CH(ASCIIEncoding.ASCII.GetBytes(入力));
  (; Iはch.Lengthを<I ++はI = 0の整数)のための
  {
   のSendMessage(PW、WM_CHAR、CH、0 );
  }
 }
2アナログ送信ウィンドウデータにマウスとキーボードを使用して、
 SetWindowPos(PW、(のIntPtr)( - 1)、0、0、0、0、の0x0040 |は0x0001); // 設定ウィンドウ位置
 SetCursorPos(476、177) ; //設定マウス位置
 MOUSE_EVENT(0×0002、0、0、 0、0); // マウス押圧操作シミュレート
 MOUSE_EVENT(0x0004は、0、0、 0、0); // シミュレーションマウス解除操作
 SendKeys.Send(_GameID); //シミュレートされたキーボード入力ゲームID
 SendKeys.Send( "TAB {}"); //シミュレートされたキーボード入力TAB
 SendKeys.Send(_GamePass); //シミュレートされたキーボード入力ゲームパスワード
 SendKeys.Send( " )」{ENTER}; //シミュレートされたキーボード入力入る

別の:また、上述の方法上記keybd_event、使用と同様とMOUSE_EVENT方法、機能と同じSendKeys.Send。

ます。https://www.cnblogs.com/kevinGao/archive/2011/10/30/2231523.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34060299/article/details/93054134