日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

键盘鼠标模拟全知道

發布時間:2025/4/14 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 键盘鼠标模拟全知道 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鍵盤鼠標模擬全知道

http://www.cnblogs.com/bjxsky/p/3656076.html

本文目錄如下

一、基于windows 消息機制的鼠標鍵盤模擬

?(一)、應用程序級模擬

?(二)、系統級模擬

????????1、?用API函數keybd_event?模擬鍵盤事件

????????2、 SendInput函數模擬全局鍵盤鼠標事件

??????? 3、用全局鉤子模擬鍵盤消息

二、驅動級模擬

*******************************************************************************************

一、基于windows 消息機制的鼠標鍵盤模擬

我們怎樣才能用Delphi來寫一個程序,用來代替人們按鍵的方法呢?那就讓我們來先了解一下windows中響應鍵盤事件的機制。

?? ??當用戶按下鍵盤上的一個鍵時,鍵盤內的芯片會檢測到這個動作,并把這個信號傳送到計算機。如何區別是哪一個鍵被按下了呢?鍵盤上的所有按鍵都有一個編碼,稱作鍵盤掃描碼。當你按下一個鍵時,這個鍵的掃描碼就被傳給系統。掃描碼是跟具體的硬件相關的,同一個鍵,在不同鍵盤上的掃描碼有可能不同。鍵盤控制器就是將這個掃描碼傳給計算機,然后交給鍵盤驅動程序。鍵盤驅動程序會完成相關的工作,并把這個掃描碼轉換為鍵盤虛擬碼。什么是虛擬碼呢?因為掃描碼與硬件相關,不具有通用性,為了統一鍵盤上所有鍵的編碼,于是就提出了虛擬碼概念。無論什么鍵盤,同一個按鍵的虛擬碼總是相同的,這樣程序就可以識別了。簡單點說,虛擬碼就是我們經常可以看到的像VK_A,VK_B這樣的常數,比如鍵A的虛擬碼是65,寫成16進制就是&H41,注意,人們經常用16進制來表示虛擬碼。當鍵盤驅動程序把掃描碼轉換為虛擬碼后,會把這個鍵盤操作的掃描碼和虛擬碼還有其它信息一起傳遞給操作系統。然后操作系統則會把這些信息封裝在一個消息中,并把這個鍵盤消息插入到消息列隊。最后,要是不出意外的話,這個鍵盤消息最終會被送到當前的活動窗口那里,活動窗口所在的應用程序接收到這個消息后,就知道鍵盤上哪個鍵被按下,也就可以決定該作出什么響應給用戶了。

這個過程可以簡單的如下表示:

?

用戶按下鍵盤上的一個鍵 >>>>>?鍵盤控制器就把這個鍵的掃描碼傳給計算機,然后交給鍵盤驅動程序? >>>>>?鍵盤驅動程序會把這個掃描碼轉換為鍵盤虛擬碼(VK_A,VK_B這樣的常數,比如鍵A的虛擬碼是65,寫成16進制就是&H41)傳給操作系統? >>>>>??操操作系統則會把這些信息封裝在一個消息中,并把這個鍵盤消息插入到消息列隊? >>>>>?鍵盤消息被發送到當前活動窗口

?

明白了這個過程,我們就可以編程實現在其中的某個環節來模擬鍵盤操作了。在Delphi中,有多種方法可以實現鍵盤模擬,我們就介紹幾種比較典型的。

?(一)、應用程序級模擬(只針對某個程序,我稱之為局部模擬)

windows提供了幾個這樣的API函數可以實現直接向目標程序發送消息的功能,常用的有SendMessage和PostMessage,它們的區別是PostMessage函數直接把消息仍給目標程序就不管了,而SendMessage把消息發出去后,還要等待目標程序返回些什么東西才好。這里要注意的是,模擬鍵盤消息一定要用PostMessage函數才好,用SendMessage是不正確的(因為模擬鍵盤消息是不需要返回值的,不然目標程序會沒反應),切記切記!

PostMessage函數的delphi聲明如下:

PostMessage(

hWnd: HWND;????????????????????? {目標程序上某個控件的句柄}

Msg: UINT;???????????????????????? {消息的類型}

wParam: WPARAM;???????? ?????????{32位指定附加的消息特定的信息}

lParam: LPARAM??????????????????? {32位指定附加的消息特定的信息}

): BOOL;

參數hwnd 是你要發送消息的目標程序上某個控件的句柄,參數Msg 是消息的類型,表示你要發送什么樣的消息,最后wParam 和lParam這兩個參數是隨消息附加的數據,具體內容要由消息決定。

?

?

再來看看Msg 這個參數,要模擬按鍵就靠這個了。

鍵盤消息常用的有如下幾個:

WM_KEYDOWN????? 表示一個普通鍵被按下

WM_KEYUP??????? ??表示一個普通鍵被釋放

?

WM_SYSKEYDOWN?? 表示一個系統鍵被按下,比如Alt鍵

WM_SYSKEYUP???? ??表示一個系統鍵被釋放,比如Alt鍵

?

如果你確定要發送以上幾個鍵盤消息,那么再來看看如何確定鍵盤消息中的wParam 和lParam 這兩個參數。在一個鍵盤消息中,wParam 參數的含義較簡單,它表示你要發送的鍵盤事件的按鍵虛擬碼,比如你要對目標程序模擬按下A鍵,那么wParam 參數的值就設為VK_A ,至于lParam 這個參數就比較復雜了,因為它包含了多個信息,一般可以把它設為0。即

?

PostMessage (MyHwnd, WM_KEYDOWN, key, 0);

?

但是如果你想要你的模擬更真實一些,那么建議你還是設置一下這個參數。那么我們就詳細了解一下lParam 吧。

lParam 是一個32 bit的參數,它在內存中占4個字節,寫成二進制就是

00000000 00000000 00000000 00000000

一共是32位,我們從右向左數,假設最右邊那位為第0位(注意是從0而不是從1開始計數),最左邊的就是第31位。那么該參數的

?

0-15位表示鍵的發送次數等擴展信息,

16-23位為按鍵的掃描碼,

24-31位表示是按下鍵還是釋放鍵。

?

大家一般習慣寫成16進制的,那么就應該是

&H00 00 00 00 ,

第0-15位一般為&H0001,如果是按下鍵,那么24-31位為&H00,釋放鍵則為&HC0,

那么16-23位的掃描碼怎么會得呢?這需要用到一個API函數MapVirtualKey,這個函數可以將虛擬碼轉換為掃描碼,或將掃描碼轉換為虛擬碼,還可以把虛擬碼轉換為對應字符的ASCII碼。它的delphi 聲明如下:

?

MapVirtualKey(

uCode: UINT;??????????????????????? {key code, scan code or virtual key}

uMapType: UINT?????????????? ??????{flags for translation mode}

): UINT;??????????????????????????? ?{returns translated key code}

?

參數uCode 表示待轉換的碼,參數uMapType 表示從什么轉換為什么,如果是虛擬碼轉掃描碼,則uMapType 設置為0,如果是虛擬掃描碼轉虛擬碼,則wMapType 設置為1,如果是虛擬碼轉ASCII碼,則uMapType 設置為2.相信有了這些,我們就可以構造鍵盤事件的lParam參數了。

?

下面給出一個構造lParam參數的函數:

?

function VKB_param(VirtualKey:Integer;flag:Integer):Integer; //函數名

var

s,Firstbyte,Secondbyte:String;

S_code:Integer;

Begin

if flag=1 then? //按下鍵

? begin

? Firstbyte :='00'

? end

else???????? //彈起鍵

? begin?

? Firstbyte :='C0'

? end;

S_code:= MapVirtualKey(VirtualKey, 0);

Secondbyte:='00'+inttostr(s_code);

Secondbyte:=copy(Secondbyte,Length(Secondbyte)-1,2);

s:='$'+Firstbyte + Secondbyte + '0001';?

Result:=strtoint(s);

End;

?

使用按鍵的方法:

?說明:key為鍵值,如1鍵[不是數字鍵的1]的值是$31,flag傳遞的是按鍵狀態,1是按下,0是彈起。

?

lparam := VKB_param(key, 1);????? {按下鍵}??

PostMessage (MyHwnd, WM_KEYDOWN, key, lParam);

lParam := VKB_param(key, 0);? ????{松開鍵}

PostMessage (MyHwnd, WM_KEYUP, key, lParam);

?

var

?? hwnd, lparam:Cardinal;

begin

?hwnd:=FindWindowEx(FindWindow(nil,'無標題 - 記事本'),0,'edit',nil);?

lparam := VKB_param(97, 1);????? {按下鍵}

PostMessage (hwnd,WM_KEYDOWN,vk_F3,lparam) ; //按下F3鍵

//PostMessage (hwnd,WM_CHAR,97,lparam);??????? //輸入字符A (edit控件接收字符)

lParam := VKB_param(key, 0);????? {松開鍵}

PostMessage (hwnd,WM_KEYUP,vk_F3,lparam);?? //釋放F3鍵

end;

?

模擬鼠標點擊

Var

P1:Tpoint;

Lparam:integer;

begin

GetCursorPos(P1); //?獲取屏幕坐標

?? P1.X:= P1.X+100;

?? P1.Y:=P1.Y+100;

lparam:=p1.X+ p1.Y shl 16;

sendmessage(h,messages.WM_LBUTTONDOWN ,0,lparam);//?按下鼠標左鍵

sendmessage(h,messages.WM_LBUTTONUP? ,0, lparam); //抬起鼠標左鍵

End;

?

(二)、系統級模擬(針對所有程序的窗口,我稱之為全局模擬)

?

模擬全局鍵盤消息常見的可以有以下一些方法:

?

1、?用API函數keybd_event,這個函數可以用來模擬一個鍵盤事件

?

keybd_event(

bVk: Byte;????????????????????? ?{virtual-key code}

bScan: Byte;????????????????????? {scan-code}

dwFlags: DWORD;??????????????? {option flags}

dwExtraInfo: DWORD???????????? {additional information about the key}

);?????????????????????????????? {this procedure does not return a value}

?

keybd_event(VK_A, 0, 0, 0)?? '按下A鍵

keybd_event (VK_A, 0, KEYEVENTF_KEYUP, 0)??? '釋放A鍵

?

注意有時候按鍵的速度不要太快,否則會出問題,可以用API函數Sleep來進行延時,delphi聲明如下:

Sleep(

dwMilliseconds: DWORD???????? ???????{specifies the number of milliseconds to pause}

);??????

?

參數dwMilliseconds表示延時的時間,以毫秒為單位。

那么如果要模擬按下功能鍵怎么做呢?比如要按下Ctrl+C實現拷貝這個功能,可以這樣:

keybd_event (VK_Ctrl, 0, 0, 0 );?? //按下Ctrl鍵

keybd_event (VK_C, 0, 0, 0);?????? //按下C鍵

Sleep(500 );????????? //延時500毫秒

keybd_event (VK_C, 0, KEYEVENTF_KEYUP, 0 );?? //釋放C鍵

keybd_event (VK_Ctrl, 0, KEYEVENTF_KEYUP, 0 );?? //釋放Ctrl鍵

?

好了,現在你可以試試是不是可以騙過目標程序了,這個函數對大部分的窗口程序都有效,可是仍然有一部分游戲對它產生的鍵盤事件熟視無睹,這時候,你就要用上bScan這個參數了。一般的,bScan都傳0,但是如果目標程序是一些DirectX游戲,那么你就需要正確使用這個參數傳入掃描碼,用了它可以產生正確的硬件事件消息,以被游戲識別。這樣的話,就可以寫成這樣:

keybd_event (VK_A, MapVirtualKey(VK_A, 0), 0, 0);?? //按下A鍵

keybd_event (VK_A, MapVirtualKey(VK_A, 0), KEYEVENTF_KEYUP, 0 );?? //釋放A鍵

以上就是用keybd_event函數來模擬鍵盤事件。

模擬按下鼠標左鍵

mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//鼠標左鍵按下mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//鼠標左鍵彈起

?

2、 SendInput函數也可以模擬全局鍵盤鼠標事件

?

SendInput可以直接把一條消息插入到消息隊列中,算是比較底層的了。??

SendInput的參數其實很簡單,在Windows.pas就有函數的聲明如下:

function SendInput (

cInputs: UINT; ??????????????????pInputs中記錄數組的元素數目

var pInputs: TInput; ??????????????TInput類型記錄數組的第1個元素

cbSize: Integer?????????????????? 定義TInput的大小,一般為SizeOf(TInput)

): UINT; stdcall;

?

  cInputs:定義pInputs中記錄數組的元素數目。pInputs:TInput類型記錄數組的第1個元素。每個元素代表插人到系統消息隊列的鍵盤或鼠標事件。cbSize:定義TInput的大小,一般為SizeOf(TInput)。函數返回成功插入系統消息隊列中事件的數目,失敗返回0。調用SendInput關鍵的就是要搞清楚它的幾個記錄結構的意思,在Windows.pas中對TInput的聲明如下:

?

? tagINPUT = packed record

??? Itype: DWORD;

??? case Integer of

????? 0: (mi: TMouseInput);

????? 1: (ki: TKeybdInput);

????? 2: (hi: THardwareInput);

? end;

? TInput = tagINPUT;

?

  其中mi、ki、hi是3個共用型的記錄結構,Itype指出記錄結構中所使用的類型,它有3個值。INPUT_MOUSE:表示使用mi記錄結構,忽略ki和hi;INPUT_KEYBOARD:表示使用ki記錄結構,忽略mi和hi。

?

(1)、鍵盤模擬

  TKeybdInput記錄結構的聲明如下:

?

? tagKEYBDINPUT = packed record

??? wVk: WORD;?????????????????? 是將要操作的按鍵的虛鍵碼

??? wScan: WORD;????????????????? 是安全碼,一般不用

??? dwFlags: DWORD;????????????? 指定鍵盤所進行的操作,為0時表示按下某鍵,KEYEVENTF_KEYUP表示放開某鍵

??? time: DWORD;

??? dwExtraInfo: DWORD;? 是擴展信息,可以使用API函數GetMessageExtraInfo的返回值

? end;

? TKeybdInput = tagKEYBDINPUT;

?

  其中wVk是將要操作的按鍵的虛鍵碼。wScan是安全碼,一般不用。dwFlags指定鍵盤所進行的操作,為0時表示按下某鍵,KEYEVENTF_KEYUP表示放開某鍵。time是時間戳,可以使用API函數GetTickCount的返回值。dwExtraInfo是擴展信息,可以使用API函數GetMessageExtraInfo的返回值。例如擊鍵“A”的程序如下:

?

procedure KeyPressA;

var

??? Inputs : array [0..1] of TInput;

begin

??? Inputs[0].Itype:=INPUT_KEYBOARD;

??? with Inputs[0].ki do

??? begin

??????? wVk:=VK_A;

??????? wScan:=0;

??????? dwFlags:=0;

??????? time:=GetTickCount;

??????? dwExtraInfo:=GetMessageExtraInfo;

??? end;

??? Inputs[1].Itype:=INPUT_KEYBOARD;

??? with Inputs[1].ki do

??? begin

??????? wVk:=VK_A;

??????? wScan:=0;

??????? dwFlags:=KEYEVENTF_KEYUP;

??????? time:=GetTickCount;

??????? dwExtraInfo:=GetMessageExtraInfo;

??? end;

??? SendInput(2,Inputs[0],SizeOf(TInput));

end;

?

  注意:在Windows.pas單元中并沒有字母和數字的虛鍵碼的聲明,在我寫的SIMouseKeyboard.pas單元文件中對所有的虛鍵碼進行了重新聲明,包含了字母、數字和標點符號。

?

(2)、鼠標模擬

?

  TMouseInput記錄結構的聲明如下:

?

? tagMOUSEINPUT = packed record

??? dx: Longint;

??? dy: Longint;

??? mouseData: DWORD;

??? dwFlags: DWORD;

??? time: DWORD;

??? dwExtraInfo: DWORD;

? end;

? TMouseInput = tagMOUSEINPUT;

?

  其中dx、dy是鼠標移動時的坐標差(不是象素單位),在鼠標移動時有效。mouseData是鼠標滾輪滾動值,在滾動鼠標滾輪時有效。當mouseData小于0時向下滾動,當mouseData大于0時向上滾動,mouseData的絕對值一般設為120。dwFlags指定鼠標所進行的操作,例如,MOUSEEVENTF_MOVE表示移動鼠標,MOUSEEVENTF_LEFTDOWN表示按下鼠標左鍵,MOUSEEVENTF_LEFTUP表示放開鼠標左鍵。time是時間戳,可以使用API函數GetTickCount的返回值。dwExtraInfo是擴展信息,可以使用API函數GetMessageExtraInfo的返回值。例如單擊鼠標左鍵的程序如下:

?

procedure MouseClick;

var

??? Inputs : array [0..1] of TInput;

begin

??? Inputs[0].Itype:=INPUT_MOUSE;

??? with Inputs[0].mi do

??? begin

??????? dx:=0;

??????? dy:=0;

??????? mouseData:=0;

??????? dwFlags:=MOUSEEVENTF_LEFTDOWN;

??????? time:=GetTickCount;

??????? dwExtraInfo:=GetMessageExtraInfo;

??? end;

??? Inputs[1].Itype:=INPUT_MOUSE;

??? with Inputs[1].mi do

??? begin

?? ?????dx:=0;

??????? dy:=0;

??????? mouseData:=0;

??????? dwFlags:=MOUSEEVENTF_LEFTUP;

??????? time:=GetTickCount;

??????? dwExtraInfo:=GetMessageExtraInfo;

??? end;

??? SendInput(2,Inputs[0],SizeOf(TInput));

end;

?

  鼠標的移動總是很麻煩,上面的dx、dy不是以象素為單位的,而是以鼠標設備移動量為單位的,它們之間的比值受鼠標移動速度設置的影響。具體的解決方法我已經在《Delphi下利用WinIo模擬鼠標鍵盤詳解》一文中進行了討論,這里不再重復。dwFlags可以設置一個MOUSEEVENTF_ABSOLUTE標志,這使得可以用另外一種方法移動鼠標。當dwFlags設置了MOUSEEVENTF_ABSOLUTE標志,dx、dy為屏幕坐標值,表示將鼠標移動到dx,dy的位置。但是這個坐標值也不是以象素為單位的。這個值的范圍是0到65535($FFFF),當dx等于0、dy等于0時表示屏幕的最左上角,當dx等于65535、dy等于65535時表示屏幕的最右下角,相當于將屏幕的寬和高分別65536等分。API函數GetSystemMetrics(SM_CXSCREEN)可以返回屏幕的寬度,函數GetSystemMetrics(SM_CYSCREEN)可以返回屏幕的高度,利用屏幕的寬度和高度就可以將象素坐標換算成相應的dx、dy。注意:這種換算最多會出現1象素的誤差。例如:將鼠標指針移動到屏幕150,120坐標處的程序如下:

?

procedure MouseMove;

var

??? Input : TInput;

begin

??? Input.Itype:=INPUT_MOUSE;

??? with Input.mi do

??? begin

??????? dx:=($FFFF div (GetSystemMetrics(SM_CXSCREEN)-1)) * 150;

??????? dy:=($FFFF div (GetSystemMetrics(SM_CYSCREEN)-1)) * 120;

??????? mouseData:=0;

??????? dwFlags:=MOUSEEVENTF_MOVE or MOUSEEVENTF_ABSOLUTE;

??????? time:=GetTickCount;

??????? dwExtraInfo:=GetMessageExtraInfo;

??? end;

??? SendInput(1,Input,SizeOf(TInput));

end;

?

(3)、SendInput與WInIo的對比

?

  在《Delphi下利用WinIo模擬鼠標鍵盤詳解》一文中我已經說了WinIo的很多缺點,SendInput幾乎沒有這些缺點。SendInput的模擬要比WinIo簡單的多。事件是被直接插入到系統消息隊列的,所以它的速度比WinIo要快。系統也會保證數據的完整性,不會出現數據包混亂的情況。利用“絕對移動”可以將鼠標指針移動到準確的位置,同鼠標的配置隔離不會出現兼容性的問題。SendInput的缺點也是最要命的,它會被一些程序屏蔽。所以說在SendInput與WInIo都可以使用的情況下優先考慮SendInput。另外SendInput與WInIo可以接合使用,一些程序對鼠標左鍵單擊敏感,可以使用WinIo模擬鼠標左鍵單擊,其它操作由SendInput模擬。

?

3、用全局鉤子也可以模擬鍵盤消息。如果你對windows中消息鉤子的用法已經有所了解,那么你可以通過設置一個全局HOOK來模擬鍵盤消息,比如,你可以用WH_JOURNALPLAYBACK這個鉤子來模擬按鍵。WH_JOURNALPLAYBACK是一個系統級的全局鉤子,它和WH_JOURNALRECORD的功能是相對的,常用它們來記錄并回放鍵盤鼠標操作。WH_JOURNALRECORD鉤子用來將鍵盤鼠標的操作忠實地記錄下來,記錄下來的信息可以保存到文件中,而WH_JOURNALPLAYBACK則可以重現這些操作。當然亦可以單獨使用WH_JOURNALPLAYBACK來模擬鍵盤操作。

?

SetWindowsHookEx函數,它可以用來安裝消息鉤子:

SetWindowsHookEx(

idHook: Integer;??????????????????????????????? {hook type flag}

lpfn: TFNHookProc;??????????????????????? {a pointer to the hook function}

hmod: HINST;??????????????????????????????? {a handle to the module containing the hook function}

dwThreadId: DWORD??????????????????????? {the identifier of the associated thread}

): HHOOK;???

先安裝WH_JOURNALPLAYBACK這個鉤子,然后你需要自己寫一個鉤子函數,在系統調用它時,把你要模擬的事件傳遞給鉤子參數lParam所指向的EVENTMSG區域,就可以達到模擬按鍵的效果。不過用這個鉤子模擬鍵盤事件有一個副作用,就是它會鎖定真實的鼠標鍵盤,不過如果你就是想在模擬的時候不會受真實鍵盤操作的干擾,那么用用它倒是個不錯的主意。

在不需要監視系統消息時需要調用提供UnHookWindowsHookEx來解除對消息的監視。?????? 下面來建立程序,在Delphi中建立一個工程,在Form1上添加3個按鈕用于程序操作。另外再添加一個按鈕控件和一個Edit控件用于驗證操作。??????

下面是Form1的全部代碼

?

unit Unit1;

?

interface

?

uses?

? Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

? StdCtrls;

?

type?

? TForm1 = class(TForm)

??? Button1: TButton;

??? Button2: TButton;?

??? Button3: TButton;

??? Edit1: TEdit;

?? ?Button4: TButton;

??? procedure FormCreate(Sender: TObject);

??? procedure Button1Click(Sender: TObject);

??? procedure Button2Click(Sender: TObject);

??? procedure Button3Click(Sender: TObject);

? private?

??? { Private declarations }

? public?

?? ?{ Public declarations }

? end;

?

var?

? Form1: TForm1;

?

? EventArr:array[0..1000]of EVENTMSG;

? EventLog:Integer;

? PlayLog:Integer;

? hHook,hPlay:Integer;

? recOK:Integer;

? canPlay:Integer;

? bDelay:Bool;

implementation

?

{$R *.DFM}?

Function PlayProc(iCode:Integer;wParam:wParam;lParam:lParam):LRESULT;stdcall;

begin?

? canPlay:=1;

? Result:=0;

?

? if iCode < 0 then???? // 必須將消息傳遞到消息鏈的下一個接受單元

?

??? Result := CallNextHookEx(hPlay,iCode,wParam,lParam)

? else if iCode = HC_SYSMODALON then

??? canPlay:=0?

? else if iCode = HC_SYSMODALOFF then

??? canPlay:=1?

? else if ((canPlay =1 )and(iCode=HC_GETNEXT)) then begin

??? if bDelay then begin

????? bDelay:=False;

????? Result:=50;

??? end;?

??? pEventMSG(lParam)^:=EventArr[PlayLog];

? end?

? else if ((canPlay = 1)and(iCode = HC_SKIP))then begin

??? bDelay := True;

??? PlayLog:=PlayLog+1;

? end;?

? if PlayLog>=EventLog then begin

??? UNHookWindowsHookEx(hPlay);

? end;

end;

?

function HookProc(iCode:Integer;wParam:wParam;lParam:lParam):LRESULT;stdcall;

begin?

? recOK:=1;

? Result:=0;

?

? if iCode < 0 then?

??? Result := CallNextHookEx(hHook,iCode,wParam,lParam)

? else if iCode = HC_SYSMODALON then

??? recOK:=0?

? else if iCode = HC_SYSMODALOFF then

??? recOK:=1?

? else if ((recOK>0) and (iCode = HC_ACTION)) then begin

??? EventArr[EventLog]:=pEventMSG(lParam)^;

??? EventLog:=EventLog+1;

?

??? if EventLog>=1000 then begin

????? UnHookWindowsHookEx(hHook);

??? end;

? end;

end;

?

procedure TForm1.FormCreate(Sender: TObject);

begin

? Button1.Caption:= '紀錄';

? Button2.Caption:=? '停止';

? Button3.Caption:= '回放';

? Button4.Caption:=? '范例';

? Button2.Enabled:=False;

? Button3.Enabled:=False;

end;

?

procedure TForm1.Button1Click(Sender: TObject);

begin?

? EventLog:=0;??? //?? 建立鍵盤鼠標操作消息紀錄鏈

?

? hHook:=SetwindowsHookEx(WH_JOURNALRECORD,HookProc,HInstance,0);

? Button2.Enabled:=True;

? Button1.Enabled:=False;

end;

?

procedure TForm1.Button2Click(Sender: TObject);

begin?

? UnHookWindowsHookEx(hHook);

? hHook:=0;

?

? Button1.Enabled:=True;

? Button2.Enabled:=False;

? Button3.Enabled:=True;

end;

?

procedure TForm1.Button3Click(Sender: TObject);

begin

? PlayLog:=0;? //建立鍵盤鼠標操作消息紀錄回放鏈

?

? hPlay:=SetwindowsHookEx(WH_JOURNALPLAYBACK,PlayProc,

??? HInstance,0);

?

? Button3.Enabled:=False;

end;

end.

??

二、驅動級模擬?(繞過了windows消息)

有一些使用DirectX接口的游戲程序,它們在讀取鍵盤操作時繞過了windows的消息機制,而使用DirectInput.這是因為有些游戲對實時性控制的要求比較高,比如賽車游戲,要求以最快速度響應鍵盤輸入。而windows消息由于是隊列形式的,消息在傳遞時會有不少延遲,有時1秒鐘也就傳遞十幾條消息,這個速度達不到游戲的要求。而DirectInput則繞過了windows消息,直接與鍵盤驅動程序打交道,效率當然提高了不少。因此也就造成,對這樣的程序無論用PostMessage或者是keybd_event都不會有反應,因為這些函數都在較高層。對于這樣的程序,只好用直接讀寫鍵盤端口的方法來模擬硬件事件了。要用這個方法來模擬鍵盤,需要先了解一下鍵盤編程的相關知識。

????

在DOS時代,當用戶按下或者放開一個鍵時,就會產生一個鍵盤中斷(如果鍵盤中斷是允許的),這樣程序會跳轉到BIOS中的鍵盤中斷處理程序去執行。打開windows的設備管理器,可以查看到鍵盤控制器由兩個端口控制。其中&H60是數據端口,可以讀出鍵盤數據,而&H64是控制端口,用來發出控制信號。也就是,從&H60號端口可以讀此鍵盤的按鍵信息,當從這個端口讀取一個字節,該字節的低7位就是按鍵的掃描碼,而高1位則表示是按下鍵還是釋放鍵。當按下鍵時,最高位為0,稱為通碼,當釋放鍵時,最高位為1,稱為斷碼。既然從這個端口讀數據可以獲得按鍵信息,那么向這個端口寫入數據就可以模擬按鍵了!用過QbASIC4.5的朋友可能知道,QB中有個OUT命令可以向指定端口寫入數據,而INP函數可以讀取指定端口的數據。那我們先看看如果用QB該怎么寫代碼:

假如你想模擬按下一個鍵,這個鍵的掃描碼為&H50,那就這樣

OUT &H64,&HD2??? '把數據&HD2發送到&H64端口。這是一個KBC指令,表示將要向鍵盤寫入數據

OUT &H60,&H50??? '把掃描碼&H50發送到&H60端口,表示模擬按下掃描碼為&H50的這個鍵

那么要釋放這個鍵呢?像這樣,發送該鍵的斷碼:

OUT &H64,&HD2??? '把數據&HD2發送到&H64端口。這是一個KBC指令,表示將要向鍵盤寫入數據

OUT &H60,(&H50 or &H80)??? '把掃描碼&H50與數據&H80進行或運算,可以把它的高位置1,得到斷碼,表示釋放這個鍵

????

好了,現在的問題就是在delphi中如何向端口寫入數據了。因為在windows中,普通應用程序是無權操作端口的,于是我們就需要一個驅動程序來幫助我們實現。在這里我們可以使用一個組件WINIO來完成讀寫端口操作。什么是WINIO?WINIO是一個全免費的、無需注冊的、含源程序的WINDOWS2000端口操作驅動程序組件(可以到http://www.internals.com/上去下載)。它不僅可以操作端口,還可以操作內存;不僅能在VB下用,還可以在DELPHI、VC等其它環境下使用,性能特別優異。下載該組件,解壓縮后可以看到幾個文件夾,其中Release文件夾下的3個文件就是我們需要的,這3個文件是WinIo.sys(用于win xp下的驅動程序),WINIO.VXD(用于win 98下的驅動程序),WinIo.dll(封裝函數的動態鏈接庫),我們只需要調用WinIo.dll中的函數,然后WinIo.dll就會安裝并調用驅動程序來完成相應的功能。值得一提的是這個組件完全是綠色的,無需安裝,你只需要把這3個文件復制到與你的程序相同的文件夾下就可以使用了。用法很簡單,先用里面的InitializeWinIo函數安裝驅動程序,然后就可以用GetPortVal來讀取端口或者用SetPortVal來寫入端口了。好,讓我們來做一個驅動級的鍵盤模擬吧。先把winio的3個文件拷貝到你的程序的文件夾下。

下面給出使用WINIO模擬按鍵的單元和使用方法:

{****************************************************************************}

unit MNwinio;

?

interface

?

?const

? KBC_KEY_CMD = $64; //鍵盤命令端口

? KBC_KEY_DATA = $60; //鍵盤數據端口

?

implementation

?

function InitializeWinIo: Boolean; stdcall; external 'WinIo.dll' name 'InitializeWinIo';

?? {

??? 本函數初始化WioIO函數庫。

  必須在調用所有其它功能函數之前調用本函數。

  如果函數調用成功,返回值為非零值。

  如果調用失敗,則返回值為0。

?

?? procedure TForm1.FormActivate(Sender: TObject); //通常在程序啟動時調用

?? begin

???? if InitializeWinIo = False then

?????? begin

???????? Messagebox(handle, '初始化失敗!', '提示', MB_OK + MB_IconError)

?????? end;

? end;

? }

?

function InstallWinIoDriver(pszWinIoDriverPath: PString; IsDemandLoaded: boolean

? = false): Boolean; stdcall; external 'WinIo.dll' name 'InstallWinIoDriver';

?

function RemoveWinIoDriver: Boolean; stdcall; external 'WinIo.dll' name

? 'RemoveWinIoDriver';

?

function GetPortVal(PortAddr: Word; PortVal: PDWord; bSize: Byte): Boolean;

? stdcall; external 'WinIo.dll' name 'GetPortVal';

?

function SetPortVal(PortAddr: Word; PortVal: DWord; bSize: Byte): Boolean;

? stdcall; external 'WinIo.dll' name 'SetPortVal';

?

function GetPhysLong(PhysAddr: PByte; PhysVal: PDWord): Boolean; stdcall;

? external 'WinIo.dll' name 'GetPhysLong';

?

function SetPhysLong(PhysAddr: PByte; PhysVal: DWord): Boolean; stdcall; external

? 'WinIo.dll' name 'SetPhysLong';

?

function MapPhysToLin(PhysAddr: PByte; PhysSize: DWord; PhysMemHandle: PHandle):

? PByte; stdcall; external 'WinIo.dll' name 'MapPhysToLin';

?

function UnMapPhysicalMemory(PhysMemHandle: THandle; LinAddr: PByte): Boolean;

? stdcall; external 'WinIo.dll' name 'UnmapPhysicalMemory';

?

procedure ShutdownWinIo; stdcall; external 'WinIo.dll' name 'ShutdownWinIo';

?{ 本函數在內存中清除WinIO庫

 本函數必須在中止應用函數之前或者不再需要WinIO庫時調用

? procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); //通常在程序關閉時調用

begin

? ShutdownWinIo;

end;

?? }

{**********以上為WINIO.dll中API函數的調用***************}

?

procedure KBCWait4IBE; //等待鍵盤緩沖區為空

var

? dwVal: DWord;

begin

? repeat

??? GetPortVal($64, @dwVal, 1);

????? {這句表示從&H64端口讀取一個字節并把讀出的數據放到變量dwVal中. GetPortVal函數的用法是 GetPortVal (端口號,存放讀出數據的變量地址,讀入的長度}

? until (dwVal and $2) = 0;

?

? {上面的是一個根據KBC規范寫的過程,它的作用是在向鍵盤端口寫入數據前等待一段時間,后面將會用到。}

end;

?

procedure MyKeyDown(vKeyCoad: Integer);??? // 這個用來模擬按下鍵,參數vKeyCoad傳入按鍵的虛擬碼

var

? btScancode: DWord;

begin

? btScancode := MapVirtualKey(vKeyCoad, 0);

? KBCWait4IBE;?????????????????????????? // 發送數據前應該先等待鍵盤緩沖區為空

? SetPortVal($64, $D2, 1);?????????????? // 發送鍵盤寫入命令

? {SetPortVal函數用于向端口寫入數據,它的用法是:SetPortVal(端口號,欲寫入的數據,寫入數據的長度)}

? KBCWait4IBE;

? SetPortVal($60, btScancode, 1);?? //寫入按鍵信息,按下鍵

end;?

procedure MyKeyUp(vKeyCoad: Integer);???? //這個用來模擬釋放鍵,參數vKeyCoad傳入按鍵的虛擬碼

var

? btScancode: DWord;

begin

? btScancode := MapVirtualKey(vKeyCoad, 0);

? KBCWait4IBE;

? SetPortVal($64, $D2, 1);

? KBCWait4IBE;

? SetPortVal($64, (btScancode or $80), 1);

?end;

end.

?

?{

??? 使用方法:

? 如模擬按鍵 1

? MyKeyDown($31);

? Sleep(50);

? MyKeyUp($31);

?}

轉載于:https://www.cnblogs.com/delphi-xe5/p/5440954.html

總結

以上是生活随笔為你收集整理的键盘鼠标模拟全知道的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

亚洲国产精品女人久久久 | 久久不射电影网 | 国产精品va在线播放 | 国产精品久久99综合免费观看尤物 | 欧美大片aaa | 欧美亚洲免费在线一区 | 精品国模一区二区三区 | 91在线视频免费播放 | 在线v | 久久这里只有精品久久 | 一区二区 不卡 | 天天操天天舔天天干 | 69精品视频在线观看 | 日韩精品视频久久 | 日韩免费一区二区在线观看 | 一区二区精品在线 | 欧美日韩69 | 国产成人精品一区二区三区网站观看 | 国产69久久精品成人看 | 国产精品网红直播 | 亚洲激情在线 | 久草国产精品 | 天天射天天射天天射 | 97色噜噜 | 亚洲专区在线播放 | 国产97在线观看 | 夜夜视频资源 | 制服丝袜天堂 | 欧美一区二区三区在线看 | 激情欧美一区二区免费视频 | 欧美日韩色婷婷 | 欧美日韩性视频在线 | 麻豆一精品传二传媒短视频 | 国内视频在线 | 久久亚洲综合国产精品99麻豆的功能介绍 | 国产一区二区在线观看免费 | 国产原厂视频在线观看 | 丰满少妇对白在线偷拍 | 久久综合之合合综合久久 | 国产精品久久久久久久久毛片 | 九九免费视频 | 91久久久久久久 | 国产一级免费片 | 久久成人精品视频 | 91免费网址 | 亚洲人成在线观看 | 日韩免费在线视频观看 | 天天久久综合 | 亚洲成人免费在线 | 毛片激情永久免费 | 国产精品理论片在线观看 | 日韩二区三区在线观看 | 欧美精品一区在线 | 国产 日韩 在线 亚洲 字幕 中文 | 狠狠的干狠狠的操 | 日本在线h | 在线观看黄色免费视频 | av成年人电影 | 1000部18岁以下禁看视频 | 日日日操 | 国产一级二级在线 | 国内精品美女在线观看 | 久久草草热国产精品直播 | 亚洲桃花综合 | 免费a一级| 在线免费中文字幕 | 久久综合成人 | 亚洲精品国产精品国自产 | 中文字幕国产一区二区 | 在线观看mv的中文字幕网站 | 免费在线精品视频 | 日韩精品1区2区 | 视频在线播放国产 | 亚洲乱亚洲乱亚洲 | 久久综合狠狠综合久久激情 | 一区二区三区精品在线 | 视频在线观看亚洲 | 欧美一级性生活视频 | 午夜久久精品 | 黄网站污| 91久久精品日日躁夜夜躁国产 | 久久精品首页 | av电影免费看 | 色婷婷免费| 日韩精品第1页 | 国产在线超碰 | 人人爽人人澡人人添人人人人 | 丁五月婷婷| 国产国产人免费人成免费视频 | 成人黄色在线 | 日韩精品免费一区二区在线观看 | 九九在线精品视频 | 免费日韩高清 | 日韩黄色软件 | 久久久综合九色合综国产精品 | 97干com| 国产精品精品 | 亚洲在线成人精品 | 99在线观看视频网站 | 特及黄色片 | 国产精品久久久久久久免费观看 | 最新精品国产 | 97人人射 | 久久免费视频在线观看6 | 午夜久操 | 91亚洲国产成人久久精品网站 | 91在线在线观看 | 亚洲mv大片欧洲mv大片免费 | 黄色com | 亚洲成人高清在线 | 亚洲国产综合在线 | 一区二区精品在线 | 在线免费观看黄色大片 | 亚洲国产午夜视频 | 公与妇乱理三级xxx 在线观看视频在线观看 | 一区二区三区四区五区在线 | 久久精品8| 成年免费在线视频 | 亚洲 精品在线视频 | 欧美精品国产综合久久 | 国产在线一线 | 69国产盗摄一区二区三区五区 | 中文字幕国内精品 | 五月婷婷综合在线观看 | 黄色av一级 | 久久久久久久久艹 | 日韩小视频 | 日韩免费二区 | 在线视频亚洲 | 国产拍揄自揄精品视频麻豆 | 99re久久精品国产 | 久草影视在线观看 | 天天躁天天狠天天透 | 视频成人| 亚洲,国产成人av | 精品国产乱码久久久久久浪潮 | 99久久精品费精品 | av丝袜在线| 在线视频电影 | 91试看| 91pony九色丨交换 | 欧美一级电影片 | 欧美久久九九 | 黄色一级大片在线免费看国产一 | 成人亚洲免费 | 亚洲国产视频在线 | 91激情视频在线 | 国产成人在线观看 | 欧美精品久久久久久久久久 | 亚洲人在线视频 | 欧美日本不卡 | 黄色高清视频在线观看 | 美女黄久久 | www久久九| 久久久穴| 91久久国产综合精品女同国语 | 日韩欧美大片免费观看 | 亚洲精品视频网 | 精品国产乱子伦一区二区 | 中文字幕频道 | 久久精品久久久精品美女 | 91精品国 | 国产精品黄| 国产成人久久av977小说 | 成人一级 | 亚洲天天摸日日摸天天欢 | 男女啪啪免费网站 | 国产一级精品视频 | 久久久www成人免费毛片 | 奇米影视8888在线观看大全免费 | 一本大道久久精品懂色aⅴ 五月婷社区 | 久久精品老司机 | 亚洲精品免费观看视频 | 97精品国产一二三产区 | 亚洲精品在线免费观看视频 | 亚洲精品在线观看视频 | 97视频在线观看成人 | 久久av网址 | 欧美性大战 | 天堂视频中文在线 | 欧美巨大| 国产精品福利av | 三级视频日韩 | 欧美-第1页-屁屁影院 | 97伊人网| 国产麻豆视频在线观看 | 日韩欧美视频在线观看免费 | 天天干天天干天天干天天干天天干天天干 | 国产特黄色片 | 日b黄色片 | 日韩免费看视频 | 91精品蜜桃 | 久久99久久99精品免观看粉嫩 | 久操操 | 欧洲av不卡 | 亚洲三级av| 97超碰人人澡| 欧美a在线看 | 黄色片视频在线观看 | 伊人五月天婷婷 | 国产麻豆视频在线观看 | 久操综合| 亚洲成人影音 | 激情久久久久久久久久久久久久久久 | 久久精选视频 | 国产午夜精品福利视频 | 综合久久五月天 | 西西444www大胆无视频 | 欧美日韩国产精品爽爽 | 日狠狠 | 中文在线天堂资源 | 麻豆一精品传二传媒短视频 | 国产高清福利在线 | 九九热视频在线 | 欧美a在线免费观看 | 日韩av网页| www.香蕉视频在线观看 | 在线免费精品视频 | 久久国产免费视频 | 国内精品久久久久影院优 | 欧美日本一区 | 欧美精品国产综合久久 | 久久伊人免费视频 | 婷婷电影网| 国产亚洲精品久久久网站好莱 | 久久精品99国产精品日本 | 天天操天天操天天操天天操天天操天天操 | 超碰97免费| 日韩激情av在线 | 国产va精品免费观看 | 色偷偷888欧美精品久久久 | 99免费看片 | 国产精彩视频一区 | 激情综合五月天 | 精品一区精品二区 | 91在线精品一区二区 | 久久久久网址 | 欧美国产日韩在线视频 | 亚洲精品国偷拍自产在线观看 | 亚洲少妇xxxx | 欧美亚洲精品一区 | 午夜色大片在线观看 | 国产精品乱码久久久久久1区2区 | 欧美成天堂网地址 | 永久免费的啪啪网站免费观看浪潮 | 日韩在线激情 | 天天天干天天天操 | 成人app在线播放 | 亚洲一级国产 | 亚洲 综合 精品 | 97视频免费 | 美女网站视频免费黄 | 欧美激情奇米色 | 玖玖视频国产 | 在线只有精品 | 国产精品综合av一区二区国产馆 | 91久久爱热色涩涩 | 综合色综合色 | 六月婷婷色| 色橹橹欧美在线观看视频高清 | 欧美日韩国内在线 | 欧美做受高潮1 | 91高清免费 | 黄色精品视频 | 色婷婷久久久综合中文字幕 | 亚洲国产影院 | 九九视频在线播放 | 日韩在线视频观看免费 | 黄色片亚洲 | 午夜视频亚洲 | 午夜三级福利 | 免费色网站| 久久爽久久爽久久av东京爽 | av丝袜天堂 | 久久精品视频网址 | jizzjizzjizz亚洲| 国产99久久久国产精品免费看 | 欧美看片| 日韩欧美在线播放 | 欧美国产91 | 精品视频123区在线观看 | 999久久国产 | 欧美日韩视频在线 | 国产美女网站视频 | 操久在线 | 色在线高清| 日韩在线观看一区二区三区 | 日韩激情三级 | 中文字幕日本在线观看 | 日本黄色免费观看 | 伊人亚洲精品 | 国产精品麻豆欧美日韩ww | 久久免费高清视频 | 国内精品久久久久久久久久久久 | 日韩国产欧美视频 | 中文字幕 成人 | 五月天综合色激情 | 黄色毛片视频免费 | 九月婷婷人人澡人人添人人爽 | 亚州人成在线播放 | 国产一区二区播放 | 在线直播av| 在线导航av| 久久久精选 | 欧美日韩精品影院 | 综合激情网... | 国产在线观看你懂得 | 日韩在线免费观看视频 | 狠狠色狠狠色综合日日92 | 91尤物在线播放 | 黄色网址a | 欧美日韩网站 | 97电影网站 | 亚洲天堂视频在线 | 超碰av在线免费观看 | 亚洲欧美日本一区二区三区 | 久久久久久久网站 | 99在线观看 | 久久一区二区三区国产精品 | 一级片免费在线 | 色多多在线观看 | 日韩专区在线观看 | 九九热在线精品视频 | 97免费公开视频 | 欧美一区在线看 | 国产 视频 久久 | 天天综合网在线观看 | 亚洲视频 中文字幕 | 丁香六月天婷婷 | av电影在线观看 | 五月开心激情 | 国产手机av在线 | 国产日女人| 精品美女久久久久久免费 | 中文字幕久久精品 | 亚洲a免费 | 丝袜av一区 | 久久久999精品视频 国产美女免费观看 | 中文字幕国产视频 | 天天拍天天爽 | 91传媒免费观看 | 久草免费看| 国产精品一区二区久久久久 | 日韩理论片中文字幕 | 国语精品免费视频 | 国产九九精品视频 | 久久综合一本 | 一区二区三区精品在线视频 | 亚洲黄色小说网址 | 中文字幕久久久精品 | 久久国产精品99国产 | 天天综合网 天天 | 亚洲精品男人的天堂 | 亚洲女人av | 精品视频网站 | 免费69视频 | 青青河边草免费观看完整版高清 | 国产精品久久久久久影院 | 精品免费国产一区二区三区四区 | 色999在线| 在线国产视频 | 成人黄色在线看 | 91av视频免费观看 | 天天操狠狠干 | 成人免费在线电影 | 成人在线观看免费 | 免费在线观看污 | 性色av免费在线观看 | 毛片无卡免费无播放器 | 精品国产视频在线 | 五月天婷婷在线观看视频 | 一区二区三区在线观看免费视频 | 一级黄网 | 亚洲视频播放 | 国产裸体永久免费视频网站 | 狠狠色丁香久久婷婷综合五月 | 精品国自产在线观看 | 亚洲高清网站 | 中文字幕第一页在线播放 | 在线国产一区 | 国产成人av在线影院 | 国产不卡一区二区视频 | 日韩精品视频免费专区在线播放 | 欧美性视频网站 | 激情欧美一区二区三区 | 五月婷婷视频在线 | 香蕉视频网站在线观看 | 国产精品成人在线 | 99热精品国产一区二区在线观看 | 精品免费久久 | 国产第一页在线播放 | 精品国产免费一区二区三区五区 | 中文字幕电影在线 | 国产九色在线播放九色 | 久久夜夜夜 | 国产高清视频网 | 久久精品久久99精品久久 | 麻豆果冻剧传媒在线播放 | 免费一级特黄毛大片 | 久久天堂亚洲 | 国产精品18久久久久vr手机版特色 | 天天躁天天狠天天透 | 顶级bbw搡bbbb搡bbbb | 免费观看国产精品视频 | 黄色一级免费网站 | 亚洲精品一区二区三区四区高清 | 国产一级特黄毛片在线毛片 | 日日夜夜精品 | 国产在线观看你懂的 | 亚洲综合色丁香婷婷六月图片 | 国产精品美女久久久久久久久久久 | 国色天香第二季 | 天天操天天干天天爽 | 国产打女人屁股调教97 | 蜜桃av观看| 亚洲精品国产麻豆 | 三级av在线 | 在线日韩 | 天海冀一区二区三区 | 国产偷国产偷亚洲清高 | 99欧美精品 | 欧洲精品在线视频 | 中文字幕在线精品 | 开心激情网五月天 | 2021av在线| 久久久五月天 | 99爱国产精品 | 中文字幕免费 | 精品99在线观看 | 日本久久免费视频 | 在线观看日韩精品视频 | 国产女人18毛片水真多18精品 | 在线观看视频亚洲 | 视频国产精品 | 免费日韩视 | 免费在线激情视频 | 久草电影免费在线观看 | 天天色天天综合 | 免费看成人av | 久久综合久久综合这里只有精品 | 玖玖视频免费在线 | 天天干天天弄 | 99久久免费看| 免费在线观看成人 | 中文字幕国产 | 伊甸园永久入口www 99热 精品在线 | 奇米影视777影音先锋 | 国产成人精品亚洲日本在线观看 | 免费成人看片 | 一级免费片 | 成人影视片 | 国产区av在线 | 欧美精品一区二区三区四区在线 | 在线亚洲欧美视频 | 亚洲va欧美va | 亚洲国产小视频在线观看 | 欧美激情精品久久久久久免费 | 日本在线观看中文字幕 | 免费涩涩网站 | 国产精品毛片一区二区 | 成年人黄色免费看 | 亚洲精品大片www | 久久综合色一综合色88 | 国产亚洲片 | 中文字幕一区二区三区乱码在线 | 免费在线激情电影 | 欧美精品乱码久久久久久按摩 | 狠狠色2019综合网 | 99激情网 | 成人久久国产 | 99爱在线观看 | 在线免费观看黄 | 91热精品 | 亚洲传媒在线 | 久久免费视频4 | 青青草国产精品 | 成年人免费看的视频 | 97色涩| 久久精品国产v日韩v亚洲 | 一级片视频在线 | 91尤物在线播放 | 国产最新视频在线观看 | 精品一区二区在线免费观看 | 色鬼综合网| 亚洲国产精品成人精品 | 久久夜色精品国产欧美乱极品 | 激情五月开心 | 日本午夜在线亚洲.国产 | 天天性天天草 | 日本中文字幕久久 | 精品久久久久久亚洲综合网站 | 97视频久久久 | 久久精品国产亚洲aⅴ | 在线亚州 | 国产视频在线观看一区 | 国产一级精品绿帽视频 | 国产99久久精品一区二区300 | 免费看黄色小说的网站 | 91久久国产自产拍夜夜嗨 | 中文字幕av一区二区三区四区 | 天天干天天干天天操 | 又污又黄网站 | 手机av网站 | 丁香婷婷基地 | 精品欧美一区二区在线观看 | 国产男男gay做爰 | 色视频在线观看 | 夜夜躁日日躁狠狠久久av | 久久天天操 | 99久久精品国产一区 | 日日日日 | 亚洲香蕉视频 | 亚洲精品视频久久 | 亚洲国产精品推荐 | 亚洲精品综合一二三区在线观看 | 精品国产乱码久久久久久1区2匹 | 久久成人亚洲欧美电影 | 精品久久久久久久久久岛国gif | 91av视频免费在线观看 | 人人玩人人添人人澡超碰 | 在线观看av中文字幕 | 久久精品免费观看 | 美女久久久久久久 | 欧美日韩在线播放一区 | 国产精品手机在线 | 超碰人人在 | 91视频麻豆 | 91麻豆视频网站 | 999精品| 亚洲在线不卡 | 成年人视频在线免费播放 | 97超碰在线资源 | 国产精品精品久久久久久 | 九九免费视频 | 最新高清无码专区 | 日韩专区在线观看 | 国产精品18久久久久久久网站 | 欧洲一区二区三区精品 | 中文字幕传媒 | 亚洲精品在线观看免费 | 天天躁日日躁狠狠躁av麻豆 | 亚洲国产精品999 | 91免费视频网站在线观看 | 亚洲天堂va | 日批视频在线播放 | 在线观看mv的中文字幕网站 | sesese图片| 久久精品在线免费观看 | 六月丁香综合 | 久久中文网 | 国产一级淫片免费看 | 亚洲 欧美 综合 在线 精品 | 日韩av专区| 中文字幕乱码电影 | 国产精品久久久久久久久久久免费 | 久久久免费观看完整版 | 亚洲 欧美日韩 国产 中文 | 天天躁日日躁狠狠躁av中文 | 成人黄色大片在线免费观看 | 人人艹人人 | 国产超碰在线观看 | 五月开心色 | 国产成人精品综合久久久久99 | 日韩在线观看免费 | 国产最新91 | 一区二区精品视频 | 欧美日韩亚洲国产一区 | 日日操日日插 | av官网| 波多野结衣网址 | 国语麻豆| 亚洲成av人片 | 国内精品免费 | 国产99视频在线观看 | 麻豆视频免费入口 | 成人91在线| 99久久影视| 色网址99 | 午夜私人影院久久久久 | 国产精品96久久久久久吹潮 | 国产精品九九九九九九 | 在线国产视频 | 婷婷六月天天 | 九九九九免费视频 | 97日日碰人人模人人澡分享吧 | 色偷偷av男人天堂 | 高清av免费看 | 97偷拍在线视频 | 在线成人性视频 | 国产视频欧美视频 | 特级黄色视频毛片 | 免费视频一区二区 | 国产在线播放观看 | 97综合视频| 欧美成年人在线视频 | 婷婷九月激情 | 色噜噜在线观看视频 | 久久久色 | 欧美激情第十页 | 亚洲精品456在线播放 | 99国产精品免费网站 | 欧美一进一出抽搐大尺度视频 | 91成人短视频在线观看 | 免费色网站 | 国产成人精品午夜在线播放 | 最新国产在线视频 | 国产精品一区二区三区免费看 | 色姑娘综合天天 | 狠狠狠狠狠狠狠 | 青青草国产免费 | 亚州精品视频 | 久久色网站 | 久久久精华网 | 成人av免费在线看 | 久久人91精品久久久久久不卡 | 激情久久小说 | 欧美伦理一区二区三区 | 四虎在线免费视频 | 在线观看午夜av | 久久综合婷婷 | 六月丁香激情综合 | 色久天 | 久久午夜网 | 国产亚洲婷婷免费 | 97理论片| 中国精品一区二区 | 热久久这里只有精品 | 91男人影院 | 免费观看国产成人 | 亚洲视频aaa | 日韩美在线 | 天天色综合1 | 精品 一区 在线 | 天天综合久久 | 久久香蕉国产 | 国产成人一区二区三区电影 | 亚洲精品av在线 | 一区免费视频 | 婷婷亚洲最大 | 国产专区一 | 一级性视频 | 成年人在线看片 | 在线观看免费黄视频 | 国产精品久久久久久久久久妇女 | 免费午夜视频在线观看 | 亚洲精品在线观看的 | 国产网站av | 日本韩国欧美在线观看 | 免费黄av| 射九九| 人人爽夜夜爽 | 久久久久久视频 | 亚洲高清精品在线 | 亚洲最大av在线播放 | 97免费中文视频在线观看 | 国产精品热视频 | 国产日韩在线视频 | 久久一级电影 | 草久草久 | 超碰成人免费电影 | 麻豆国产在线播放 | 久久伊人热 | 国产视频日韩视频欧美视频 | 色婷婷狠狠干 | 久草在线视频网站 | 日日爽天天| 久久久男人的天堂 | 免费欧美| a在线免费观看视频 | 国内精品在线观看视频 | 黄色网址a| av福利在线播放 | av天天干 | 超碰在线91| 在线免费av观看 | 黄色软件在线观看 | 丁香九月婷婷 | 丁香 久久 综合 | 久草在线资源视频 | 日韩精品中文字幕一区二区 | 五月婷婷色综合 | 国产日女人 | 亚洲激情一区二区三区 | 欧美色就是色 | 国产性xxxx | 日韩在线观看精品 | 激情伊人五月天久久综合 | 亚洲欧美视频网站 | 日韩高清无线码2023 | 亚洲精品视频在线观看视频 | 久久99国产综合精品免费 | 中文字幕在线观看免费高清电影 | 国产日产高清dvd碟片 | 国产黄色精品在线 | 中文字幕在线播放第一页 | 国产精品麻豆91 | 久久婷婷一区二区三区 | 三级av在线 | 日韩在线中文字幕视频 | 99精品亚洲 | 日韩区视频 | 久久精品网站免费观看 | 国产精品久久一区二区三区不卡 | 97精品免费视频 | 激情视频综合网 | 成年人免费在线观看网站 | 亚洲天堂首页 | 国产精品99久久99久久久二8 | www.天天干.com| 亚洲高清不卡av | av在线看网站 | 黄色在线观看www | 久久婷婷网| 一区 二区电影免费在线观看 | 日日婷婷夜日日天干 | 亚洲精品综合久久 | 亚洲伦理一区 | 欧美一区三区四区 | 在线视频观看91 | 亚洲激情在线播放 | 97成人免费 | 日韩视频一二三区 | 色狠狠综合天天综合综合 | 最新成人av| 成人中文字幕av | 69国产盗摄一区二区三区五区 | 一级片色播影院 | 欧美国产日韩一区二区 | 久久久久www | 国语自产偷拍精品视频偷 | 夜夜高潮夜夜爽国产伦精品 | 人人澡人人爽 | 免费高清在线观看电视网站 | 欧美日韩中文视频 | 久久综合久久综合久久综合 | 五月婷激情 | 少妇高潮流白浆在线观看 | 狠狠狠狠狠狠狠狠 | 97久久久免费福利网址 | 国产高清永久免费 | 午夜精品久久久久久久久久久久久久 | 成人一级电影在线观看 | 成人小视频免费在线观看 | 欧美xxxxx在线视频 | 精品国产精品久久一区免费式 | www.久久免费视频 | 午夜在线免费视频 | 婷婷丁香激情 | 成人黄色在线观看视频 | 日韩精品一区二区三区免费观看视频 | 亚洲婷婷网 | 激情五月婷婷综合 | 97色婷婷成人综合在线观看 | 午夜电影久久 | 在线视频18在线视频4k | 色婷婷福利 | 日韩在线视频不卡 | 色播99 | 国内精品免费久久影院 | 欧美日韩高清免费 | 欧美一区二区三区四区夜夜大片 | 在线国产99 | 国产精品每日更新 | 在线成人看片 | 五月婷在线 | 日本黄色免费电影网站 | 99 久久久久 | 国产精品一区一区三区 | 日韩精品国产一区 | 亚洲一级国产 | 色偷偷88888欧美精品久久 | 国产xxxx | 国产亚洲免费的视频看 | 久久久国产一区二区三区 | 国产欧美最新羞羞视频在线观看 | 国模精品在线 | 国产精彩在线视频 | 黄色大片视频网站 | 2021国产精品| 欧美极度另类 | 成人午夜精品福利免费 | 四虎在线免费观看视频 | 色av色av色av| 亚洲日本在线视频观看 | 成人午夜电影久久影院 | 久久精品电影网 | 欧美日韩国产在线观看 | 2021国产精品 | 久久久久久久久久久成人 | 精品中文字幕视频 | 成人国产精品一区 | 欧美性春潮 | 国产激情免费 | 久久黄色影视 | 成人网444ppp | 亚洲涩涩色 | 午夜色大片在线观看 | 色是在线视频 | 欧美ⅹxxxxxx | 久久国产精品一二三区 | 国产伦理久久 | 91探花在线 | 国产精品久久一区二区无卡 | 亚洲综合精品在线 | 一区二区不卡视频在线观看 | 欧美日韩视频在线播放 | 国产视频精品免费播放 | 超级碰碰视频 | 久久神马影院 | 日本天天色 | www.亚洲黄| 中文字幕资源网 国产 | 国产精品成人久久久久久久 | 国产免费黄色 | 久久久久久久免费看 | 久久激情久久 | 亚洲一区二区91 | 国产色拍拍拍拍在线精品 | 国产伦精品一区二区三区高清 | 国产综合婷婷 | 狠狠色狠狠综合久久 | 久久伊人91 | 69xx视频 | 成年人免费观看在线视频 | 国产一二三区在线观看 | 日韩在线电影一区二区 | 国产99区| 成人久久视频 | 中文字幕免费高清在线 | 亚洲精品国产精品乱码在线观看 | 国产美女主播精品一区二区三区 | 亚洲高清在线观看视频 | 亚洲欧洲精品视频 | 成人四虎 | 在线国产视频观看 | 在线成人一区二区 | 久久69精品 | 久久久久久久久久久福利 | 91在线播| 欧美 激情 国产 91 在线 | 91视视频在线直接观看在线看网页在线看 | 久久久久国产免费免费 | 国产精品视频区 | 欧美aⅴ在线观看 | 精品视频中文字幕 | 国产在线观看污片 | 久久综合狠狠狠色97 | 久久久国产99久久国产一 | 亚洲成人精品久久久 | 在线观看黄色 | 久热免费在线 | 91成年人视频 | 日韩精品中文字幕av | 成人av电影免费观看 | 手机看片久久 | 久久综合成人 | 国产精品孕妇 | 精品欧美小视频在线观看 | 久久久久久久久久电影 | 香蕉视频国产在线 | 天天爽天天做 | 国产高清免费在线观看 | 99精品偷拍视频一区二区三区 | 日本在线观看一区 | 开心综合网 | 六月丁香激情网 | 精品特级毛片 | 在线观看视频一区二区三区 | 中文字幕欧美日韩va免费视频 | 亚洲精品高清视频在线观看 | 久久精彩免费视频 | 欧美精品中文在线免费观看 | 久久理论电影 | 国产精品嫩草69影院 | 蜜臀av免费一区二区三区 | 国产在线 一区二区三区 | 天天干天天玩天天操 | 亚洲午夜久久久久久久久电影网 | 亚洲久在线 | 国外av在线 | 亚洲美女免费精品视频在线观看 | 91超级碰| 中文字幕在线观看一区 | 一本到在线 | 久久久www| 久草热久草视频 | 色网站黄| 97成人在线免费视频 | 免费激情网 | 一级α片免费看 | 二区精品视频 | 欧美日韩激情视频8区 | 456成人精品影院 | 国产亚洲精品bv在线观看 | 成人动漫视频在线 | 国产黄色一级片在线 | 中文字幕在线看片 | 日韩成人精品一区二区 | 亚洲精区二区三区四区麻豆 | 国产一级在线免费观看 | 免费视频在线观看网站 | 免费看久久 | 日韩专区在线观看 | 操操日| 伊人色综合久久天天 | 免费在线观看不卡av | 久久精品99精品国产香蕉 | 天天操天天射天天操 | 久久亚洲私人国产精品 | 黄色av在 | 97免费在线观看视频 | 97人人精品| 国产精品不卡在线播放 | 99久免费精品视频在线观看 | 国产 视频 高清 免费 | 久久伊人八月婷婷综合激情 | 国产成人在线网站 | 国产一级黄 | 少妇精品久久久一区二区免费 | 99re视频在线观看 | 一级特黄aaa大片在线观看 | 国产一级在线免费观看 | 一区二区国产精品 | 国产精品自拍在线 | 天天干天天拍天天操天天拍 | 亚洲精品乱码久久久久久蜜桃动漫 | 黄色一区二区在线观看 | 国产在线自 | 午夜在线观看影院 | 激情五月开心 | 日韩三级av | 少妇性bbb搡bbb爽爽爽欧美 | 色综合久久久久久久 | 人成在线免费视频 | 在线看v片| av电影在线免费观看 | 亚洲伦理一区二区 | 美女又爽又黄 | 亚洲成年人在线播放 | 国产精品嫩草影院123 | 日韩高清一 | 久久精品综合视频 | 国产精品99蜜臀久久不卡二区 | 亚洲一级片免费观看 | 久久久久久久国产精品影院 | 久久精品免费看 | 韩国一区二区av | 国产91精品欧美 | 国产一区二区播放 | 日韩精品一区在线观看 | 视频一区在线免费观看 | 欧美日韩国产一二 | 亚洲国产福利视频 | 高清在线观看av | 免费视频一级片 | 欧美日韩免费观看一区=区三区 | 国产免费黄视频在线观看 | 99热这里精品| 久久视频这里有久久精品视频11 | 国产青草视频在线观看 | 丁香婷婷久久 | 一区二区三区在线免费 | 五月激情丁香图片 | 国产破处在线播放 | 福利视频一区二区 | 久久精品免视看 | 特级大胆西西4444www | 97av视频在线| 日韩午夜电影网 | 又黄又刺激又爽的视频 | 亚洲一区免费在线 | 在线观看 亚洲 | 国产91精品一区二区麻豆亚洲 | 日韩1级片 | 97超碰资源站 | 欧美孕妇视频 | 欧美另类xxx | 欧美日韩国产在线一区 | 91麻豆精品国产91 | 五月婷婷视频在线 | 国产99re| 激情欧美一区二区免费视频 | 在线观看黄网 | 久久99精品久久久久久清纯直播 | 天天插夜夜操 | 久久99国产精品免费网站 | 国内免费的中文字幕 | 免费视频91| 婷婷国产一区二区三区 | 一区二区精品视频 | 波多野结衣电影一区二区三区 | 久久久久久影视 | 亚洲九九爱 | 日韩大片免费在线观看 | 久久91网| 国产一区二区精品久久 | 91精品国产91久久久久福利 | 91久久电影 |