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。
コール の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で再現