• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉,開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            DirectX Input 鍵盤實現 收藏

            Posted on 2010-03-12 15:01 S.l.e!ep.¢% 閱讀(1384) 評論(0)  編輯 收藏 引用 所屬分類: RootKit

            ?DirectX Input 鍵盤實現 收藏
            view plaincopy to clipboardprint?
            // DInputKeyboard.h: interface for the CDInputKeyboard class.??
            //??
            //////////////////////////////////////////////////////////////////////??
            ?
            #pragma once??
            ?
            #define DIRECTINPUT_VERSION 0x800??
            #include <afxtempl.h>??
            #include <dinput.h>??
            #pragma comment(lib, "dinput8.lib")??
            #pragma comment(lib, "DXguid.Lib")??
            ?
            class CDInputKeyboard????
            {??
            ??? #define BUFFERCOUNT 256??
            ??? LPDIRECTINPUT???????? lpDirectInput;??????????????
            ??? LPDIRECTINPUTDEVICE?? lpdiKeyboard;???????
            ??? BOOL????????????????? KeyboardAcquired;??
            ??? BOOL????????????????? KeyboardFound;??
            ??? CTypedPtrArray <CPtrArray, LPDIDEVICEINSTANCE> m_KeyboInstance_Array;??
            ?
            protected:??
            ??? virtual BOOL ProcessInputKey(TCHAR tChar)??
            ??? {??
            ??????? return false;??
            ??? }??
            ?
            ? static BOOL CALLBACK DIEnumDevicesProc(LPCDIDEVICEINSTANCE lpddi,???
            ????????????????????????????????? LPVOID pvRef)??
            ? {????
            ??? if (GET_DIDEVICE_TYPE(lpddi->dwDevType) == DI8DEVTYPE_KEYBOARD??
            ??????????? || ((lpddi->dwDevType & DIDEVTYPE_HID) && GET_DIDEVICE_TYPE(lpddi->dwDevType) == DI8DEVTYPE_DEVICE ) )??
            ??? {???
            ????? LPDIDEVICEINSTANCE pNewdid = (LPDIDEVICEINSTANCE) new DIDEVICEINSTANCE;??
            ????? memcpy(pNewdid, lpddi, sizeof(DIDEVICEINSTANCE));??
            ????? ((CDInputKeyboard *)pvRef)->m_KeyboInstance_Array.Add(pNewdid);??
            ??? }??
            ??? return DIENUM_CONTINUE;????
            ? } // DIEnumDevicesProc??
            ?
            ? void RemoveGUID()??
            ? {??
            ??? KeyboardFound = 0;??
            ??? while(m_KeyboInstance_Array.GetSize() > 0)??
            ??? {??
            ????? delete m_KeyboInstance_Array.GetAt(0);??
            ????? m_KeyboInstance_Array.RemoveAt(0);??
            ??? }??
            ? }??
            ?
            public:????
            ? HWND??????????????? hMainWindow;???????? // app window handle??
            ????
            ? virtual BOOL InitInput(HWND hWnd)??
            ? {??
            ??? ASSERT(lpDirectInput == NULL);??
            ??? ASSERT(hWnd);??
            ?
            ??? hMainWindow = hWnd;??
            ?
            ??? HINSTANCE hInstance = (HINSTANCE) GetWindowLong(hMainWindow, GWL_HINSTANCE); // program instance??
            ??? // try to create DirectInput object??
            ??? if(DirectInput8Create(hInstance, DIRECTINPUT_VERSION,? IID_IDirectInput8, (LPVOID*)&lpDirectInput, NULL) != DI_OK)??
            ??? {??
            ????? lpDirectInput = NULL;??
            ????? OutputDebugString( _T("Failed to create DirectInput object.\n") );??
            ????? return FALSE;??
            ??? }??
            ??? return TRUE;??
            ? }??
            ?
            ? INT_PTR EnumKeyboard()??
            ? {??
            ??? RemoveGUID();??
            ??? if(lpDirectInput)??
            ??? {??
            ????? // enumerate devices so we can get the GUIDs??
            ????? if (lpDirectInput->EnumDevices(0,???
            ??????????????????????????? DIEnumDevicesProc,??
            ??????????????????????????? this,???
            ??????????????????????????? DIEDFL_ALLDEVICES) != DI_OK)??
            ????? {??
            ??????? OutputDebugString( _T("Could not enumerate devices.\n") );??
            ????? }??
            ??? }??
            ??? return m_KeyboInstance_Array.GetSize();??
            ? }??
            ?
            ? BOOL Unacquire()??
            ? {??
            ??? if(lpdiKeyboard)??
            ??? {??
            ????? lpdiKeyboard->Unacquire();??
            ????? lpdiKeyboard->Release();??
            ????? lpdiKeyboard = NULL;??
            ??? }??
            ??? KeyboardAcquired = false;??
            ??? return TRUE;??
            ? }??
            ?
            ? BOOL Acquire(INT_PTR nPos = -1)??
            ? {??
            ??? Unacquire();??
            ?
            ??? if(lpDirectInput == NULL)??
            ??? {??
            ????? OutputDebugString( _T("lpDirectInput is NULL.\n") );??
            ????? return FALSE;??
            ??? }??
            ?
            ??? GUID KeyboardGUID =? GUID_SysKeyboard;??
            ??? if(nPos >=0 && nPos < m_KeyboInstance_Array.GetSize())??
            ??? {??
            ????? KeyboardGUID = m_KeyboInstance_Array.GetAt(nPos)->guidInstance;??
            ??? }??
            ??????
            ?? // try to create keyboard device??
            ??? if(lpDirectInput->CreateDevice(KeyboardGUID, &lpdiKeyboard, NULL) != DI_OK ) //GUID_SysKeyboard??
            ??? {??
            ????? OutputDebugString( _T("Failed to create keyboard device.\n") );??
            ??????????? Unacquire();??
            ????? return FALSE;??
            ??? }??
            ?
            ??? // set kbd cooperative level??
            ??? if (lpdiKeyboard->SetCooperativeLevel(hMainWindow, DISCL_BACKGROUND | DISCL_NONEXCLUSIVE) != DI_OK)??
            ??? {??
            ????? OutputDebugString( _T("Failed to set keyboard cooperative level.\n") );??
            ??????????? Unacquire();??
            ????? return FALSE;??
            ??? }??
            ?
            ??? // set kbd data format??
            ??? if (lpdiKeyboard->SetDataFormat(&c_dfDIKeyboard) != DI_OK)??
            ??? {??
            ????? OutputDebugString( _T("Failed to set keyboard data format.\n") );??
            ??????????? Unacquire();??
            ????? return FALSE;??
            ??? }??
            ?
            ?? // set kbd buffer size??
            ??? DIPROPDWORD dipdw = {0};??
            ??? dipdw.diph.dwSize = sizeof(DIPROPDWORD);??
            ??? dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER);??
            ??? dipdw.diph.dwObj = 0;??
            ??? dipdw.diph.dwHow = DIPH_DEVICE;??
            ??? dipdw.dwData = BUFFERCOUNT; // * sizeof(DIDEVICEOBJECTDATA);??
            ??? if (lpdiKeyboard->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph) != DI_OK)???
            ??? {??
            ????? OutputDebugString( _T("Failed to set keyboard buffer size.\n") );??
            ??????????? Unacquire();??
            ????? return FALSE;??
            ??? }??
            ?
            ??? // try to acquire the keyboard??
            ??? if (lpdiKeyboard->Acquire() != DI_OK)??
            ??? {??
            ????? OutputDebugString( _T("Failed to acquire the keyboard.\n") );??
            ??????????? Unacquire();??
            ????? return FALSE;??
            ??? }??
            ?
            ??? KeyboardAcquired = TRUE;??
            ??? return TRUE;????????
            ? }??
            ?
            ? BOOL ReacquireInput(void)??
            ? {??
            ? //the keyboard??
            ??? if(lpdiKeyboard != NULL)??
            ??? {??
            ????? lpdiKeyboard->Acquire();??
            ??? }??
            ??? else?
            ??? {??
            ????? // keyboard device has not been created.??
            ????? return FALSE;??
            ??? }??
            ??? // if we get here, we are acquired again??
            ??? KeyboardAcquired = TRUE;??
            ?
            ??? return TRUE;??
            ? }? // ReacquireInputDevices()??
            ?
            ? BOOL PollKeyboard(void) //Reads the keyboard state??
            ? {??
            ??? if(lpdiKeyboard && KeyboardAcquired)??
            ??? {??
            ????? BYTE diKeys[257] = {0};??
            ????? if (lpdiKeyboard->GetDeviceState(256, &diKeys) == DI_OK)??
            ????? {??
            ??????? if(diKeys[DIK_LWIN] & 0x80) /* Left Windows key */?
            ??????? {??
            ??????? }??
            ??????? if(diKeys[DIK_RWIN] & 0x80) /* Right Windows key */?
            ??????? {??
            ??????? }??
            ????????
            ??????? return TRUE;? // success??
            ????? }??
            ??? }??
            ??? return FALSE;??
            ? } // PollKeyboard()??
            ?
            ? HRESULT ReadKeyboardInput(void)??
            ? {??
            ??????? HRESULT hRes = DI_OK;??
            ??????? if(KeyboardAcquired)??
            ??????? {??
            ??????????? DIDEVICEOBJECTDATA? KbdBuffer[BUFFERCOUNT] = {0};??
            ??????????? DWORD dwItems = BUFFERCOUNT;??
            ??????????? hRes = lpdiKeyboard->GetDeviceData(sizeof(DIDEVICEOBJECTDATA),??
            ??????????????????????????????????????????????????????????????????? KbdBuffer, &dwItems, 0);??
            ??????????? if(hRes == DI_OK || hRes == DI_BUFFEROVERFLOW)??
            ??????????? {??
            ?
            ??????????????? for (DWORD k = 0; k < dwItems; k++)??
            ??????????????? {??
            ??????????????????? LPDIDEVICEOBJECTDATA lpdidod = &KbdBuffer[k];??
            ?
            ??????????????????? TCHAR VKey = MapVirtualKey(lpdidod->dwOfs, 3); //映射到虛擬鍵??
            ??????????????????? ProcessInputKey(VKey); //處理輸入??
            ?
            ??????????????????? CString dbgStr, tmpStr;??
            ??????????????????? dbgStr.Format(_T("%d"), lpdidod->dwSequence);??
            ??????????????????? tmpStr.Format(_T(". Scan code 0x%04X"), lpdidod->dwOfs);??
            ??????????????????? dbgStr += tmpStr;??????????????
            ??????????????????? dbgStr += (lpdidod->dwData & 0x80)? _T(" pressed ") : _T(" released ");??????????
            ??????????????????? tmpStr.Format(_T(". Age: %d ms"), GetTickCount() - lpdidod->dwTimeStamp);??
            ??????????????????? dbgStr += tmpStr;??
            ??????????????????? dbgStr += _T("\n");??
            ??????????????????? OutputDebugString(dbgStr);??????????
            ??????????????? }??
            ??????????? }??
            ??????????? else if(hRes == DIERR_INPUTLOST)??
            ??????????? {??
            ??????????????? ReacquireInput();???
            ??????????????? hRes = S_FALSE;??
            ??????????? }???
            ??????? }??
            ??? return hRes;??
            ? }??
            ?
            ?
            ////////////////////////////////////////////////??
            ? CDInputKeyboard()??
            ? {??
            ??? hMainWindow = NULL;??
            ??? lpDirectInput = NULL;??
            ??? lpdiKeyboard = NULL;??
            ??? KeyboardAcquired = 0;??
            ??? KeyboardFound = 0;??
            ??? m_KeyboInstance_Array.RemoveAll();??
            ? }??
            ?
            ? virtual ~CDInputKeyboard()??
            ? {??
            ??? if(lpdiKeyboard)??
            ??? {??
            ????? lpdiKeyboard->Unacquire();??
            ????? lpdiKeyboard->Release();??
            ????? lpdiKeyboard = NULL;??
            ??? }??
            ?
            ??? if(lpDirectInput)??
            ??? {??
            ????? lpDirectInput->Release();??
            ????? lpDirectInput = NULL;??
            ??? }??
            ?
            ??? RemoveGUID();??
            ? }??
            ?
            ?
            };?
            // DInputKeyboard.h: interface for the CDInputKeyboard class.
            //
            //////////////////////////////////////////////////////////////////////

            #pragma once

            #define DIRECTINPUT_VERSION 0x800
            #include <afxtempl.h>
            #include <dinput.h>
            #pragma comment(lib, "dinput8.lib")
            #pragma comment(lib, "DXguid.Lib")

            class CDInputKeyboard?
            {
            ?#define BUFFERCOUNT 256
            ?LPDIRECTINPUT???????? lpDirectInput;???????????
            ?LPDIRECTINPUTDEVICE?? lpdiKeyboard; ?
            ?BOOL????????????????? KeyboardAcquired;
            ?BOOL????????????????? KeyboardFound;
            ?CTypedPtrArray <CPtrArray, LPDIDEVICEINSTANCE> m_KeyboInstance_Array;

            protected:
            ?virtual BOOL ProcessInputKey(TCHAR tChar)
            ?{
            ??return false;
            ?}

            ? static BOOL CALLBACK DIEnumDevicesProc(LPCDIDEVICEINSTANCE lpddi,
            ????????????????????????????????? LPVOID pvRef)
            ? {?
            ??? if (GET_DIDEVICE_TYPE(lpddi->dwDevType) == DI8DEVTYPE_KEYBOARD
            ???|| ((lpddi->dwDevType & DIDEVTYPE_HID) && GET_DIDEVICE_TYPE(lpddi->dwDevType) == DI8DEVTYPE_DEVICE ) )
            ??? {
            ????? LPDIDEVICEINSTANCE pNewdid = (LPDIDEVICEINSTANCE) new DIDEVICEINSTANCE;
            ????? memcpy(pNewdid, lpddi, sizeof(DIDEVICEINSTANCE));
            ????? ((CDInputKeyboard *)pvRef)->m_KeyboInstance_Array.Add(pNewdid);
            ??? }
            ??? return DIENUM_CONTINUE;?
            ? } // DIEnumDevicesProc

            ? void RemoveGUID()
            ? {
            ??? KeyboardFound = 0;
            ??? while(m_KeyboInstance_Array.GetSize() > 0)
            ??? {
            ????? delete m_KeyboInstance_Array.GetAt(0);
            ????? m_KeyboInstance_Array.RemoveAt(0);
            ??? }
            ? }

            public:?
            ? HWND??????????????? hMainWindow;???????? // app window handle
            ?
            ? virtual BOOL InitInput(HWND hWnd)
            ? {
            ??? ASSERT(lpDirectInput == NULL);
            ??? ASSERT(hWnd);

            ??? hMainWindow = hWnd;

            ??? HINSTANCE hInstance = (HINSTANCE) GetWindowLong(hMainWindow, GWL_HINSTANCE); // program instance
            ??? // try to create DirectInput object
            ??? if(DirectInput8Create(hInstance, DIRECTINPUT_VERSION,? IID_IDirectInput8, (LPVOID*)&lpDirectInput, NULL) != DI_OK)
            ??? {
            ????? lpDirectInput = NULL;
            ????? OutputDebugString( _T("Failed to create DirectInput object.\n") );
            ????? return FALSE;
            ??? }
            ??? return TRUE;
            ? }

            ? INT_PTR EnumKeyboard()
            ? {
            ??? RemoveGUID();
            ??? if(lpDirectInput)
            ??? {
            ????? // enumerate devices so we can get the GUIDs
            ????? if (lpDirectInput->EnumDevices(0,
            ??????????????????????????? DIEnumDevicesProc,
            ??????????????????????????? this,
            ??????????????????????????? DIEDFL_ALLDEVICES) != DI_OK)
            ????? {
            ??????? OutputDebugString( _T("Could not enumerate devices.\n") );
            ????? }
            ??? }
            ??? return m_KeyboInstance_Array.GetSize();
            ? }

            ? BOOL Unacquire()
            ? {
            ??? if(lpdiKeyboard)
            ??? {
            ????? lpdiKeyboard->Unacquire();
            ????? lpdiKeyboard->Release();
            ????? lpdiKeyboard = NULL;
            ??? }
            ??? KeyboardAcquired = false;
            ??? return TRUE;
            ? }

            ? BOOL Acquire(INT_PTR nPos = -1)
            ? {
            ??? Unacquire();

            ??? if(lpDirectInput == NULL)
            ??? {
            ????? OutputDebugString( _T("lpDirectInput is NULL.\n") );
            ????? return FALSE;
            ??? }

            ??? GUID KeyboardGUID =? GUID_SysKeyboard;
            ??? if(nPos >=0 && nPos < m_KeyboInstance_Array.GetSize())
            ??? {
            ????? KeyboardGUID = m_KeyboInstance_Array.GetAt(nPos)->guidInstance;
            ??? }
            ???
            ?? // try to create keyboard device
            ??? if(lpDirectInput->CreateDevice(KeyboardGUID, &lpdiKeyboard, NULL) != DI_OK ) //GUID_SysKeyboard
            ??? {
            ????? OutputDebugString( _T("Failed to create keyboard device.\n") );
            ???Unacquire();
            ????? return FALSE;
            ??? }

            ??? // set kbd cooperative level
            ??? if (lpdiKeyboard->SetCooperativeLevel(hMainWindow, DISCL_BACKGROUND | DISCL_NONEXCLUSIVE) != DI_OK)
            ??? {
            ????? OutputDebugString( _T("Failed to set keyboard cooperative level.\n") );
            ???Unacquire();
            ????? return FALSE;
            ??? }

            ??? // set kbd data format
            ??? if (lpdiKeyboard->SetDataFormat(&c_dfDIKeyboard) != DI_OK)
            ??? {
            ????? OutputDebugString( _T("Failed to set keyboard data format.\n") );
            ???Unacquire();
            ????? return FALSE;
            ??? }

            ?? // set kbd buffer size
            ??? DIPROPDWORD dipdw = {0};
            ??? dipdw.diph.dwSize = sizeof(DIPROPDWORD);
            ??? dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER);
            ??? dipdw.diph.dwObj = 0;
            ??? dipdw.diph.dwHow = DIPH_DEVICE;
            ??? dipdw.dwData = BUFFERCOUNT; // * sizeof(DIDEVICEOBJECTDATA);
            ??? if (lpdiKeyboard->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph) != DI_OK)
            ??? {
            ????? OutputDebugString( _T("Failed to set keyboard buffer size.\n") );
            ???Unacquire();
            ????? return FALSE;
            ??? }

            ??? // try to acquire the keyboard
            ??? if (lpdiKeyboard->Acquire() != DI_OK)
            ??? {
            ????? OutputDebugString( _T("Failed to acquire the keyboard.\n") );
            ???Unacquire();
            ????? return FALSE;
            ??? }

            ??? KeyboardAcquired = TRUE;
            ??? return TRUE;?????
            ? }

            ? BOOL ReacquireInput(void)
            ? {
            ? //the keyboard
            ??? if(lpdiKeyboard != NULL)
            ??? {
            ????? lpdiKeyboard->Acquire();
            ??? }
            ??? else
            ??? {
            ????? // keyboard device has not been created.
            ????? return FALSE;
            ??? }
            ??? // if we get here, we are acquired again
            ??? KeyboardAcquired = TRUE;

            ??? return TRUE;
            ? }? // ReacquireInputDevices()

            ? BOOL PollKeyboard(void) //Reads the keyboard state
            ? {
            ??? if(lpdiKeyboard && KeyboardAcquired)
            ??? {
            ????? BYTE diKeys[257] = {0};
            ????? if (lpdiKeyboard->GetDeviceState(256, &diKeys) == DI_OK)
            ????? {
            ??????? if(diKeys[DIK_LWIN] & 0x80) /* Left Windows key */
            ??????? {
            ??????? }
            ??????? if(diKeys[DIK_RWIN] & 0x80) /* Right Windows key */
            ??????? {
            ??????? }
            ?????
            ??????? return TRUE;? // success
            ????? }
            ??? }
            ??? return FALSE;
            ? } // PollKeyboard()

            ? HRESULT ReadKeyboardInput(void)
            ? {
            ??HRESULT hRes = DI_OK;
            ??if(KeyboardAcquired)
            ??{
            ???DIDEVICEOBJECTDATA? KbdBuffer[BUFFERCOUNT] = {0};
            ???DWORD dwItems = BUFFERCOUNT;
            ???hRes = lpdiKeyboard->GetDeviceData(sizeof(DIDEVICEOBJECTDATA),
            ?????????????????KbdBuffer, &dwItems, 0);
            ???if(hRes == DI_OK || hRes == DI_BUFFEROVERFLOW)
            ???{

            ????for (DWORD k = 0; k < dwItems; k++)
            ????{
            ?????LPDIDEVICEOBJECTDATA lpdidod = &KbdBuffer[k];

            ?????TCHAR VKey = MapVirtualKey(lpdidod->dwOfs, 3); //映射到虛擬鍵
            ?????ProcessInputKey(VKey); //處理輸入

            ?????CString dbgStr, tmpStr;
            ?????dbgStr.Format(_T("%d"), lpdidod->dwSequence);
            ?????tmpStr.Format(_T(". Scan code 0x%04X"), lpdidod->dwOfs);
            ?????dbgStr += tmpStr;???????????
            ?????dbgStr += (lpdidod->dwData & 0x80)? _T(" pressed ") : _T(" released ");???????
            ?????tmpStr.Format(_T(". Age: %d ms"), GetTickCount() - lpdidod->dwTimeStamp);
            ?????dbgStr += tmpStr;
            ?????dbgStr += _T("\n");
            ?????OutputDebugString(dbgStr);???????
            ????}
            ???}
            ???else if(hRes == DIERR_INPUTLOST)
            ???{
            ????ReacquireInput();
            ????hRes = S_FALSE;
            ???}
            ??}
            ??? return hRes;
            ? }


            ////////////////////////////////////////////////
            ? CDInputKeyboard()
            ? {
            ??? hMainWindow = NULL;
            ??? lpDirectInput = NULL;
            ??? lpdiKeyboard = NULL;
            ??? KeyboardAcquired = 0;
            ??? KeyboardFound = 0;
            ??? m_KeyboInstance_Array.RemoveAll();
            ? }

            ? virtual ~CDInputKeyboard()
            ? {
            ??? if(lpdiKeyboard)
            ??? {
            ????? lpdiKeyboard->Unacquire();
            ????? lpdiKeyboard->Release();
            ????? lpdiKeyboard = NULL;
            ??? }

            ??? if(lpDirectInput)
            ??? {
            ????? lpDirectInput->Release();
            ????? lpDirectInput = NULL;
            ??? }

            ??? RemoveGUID();
            ? }


            };


            ?

            ?

            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zgl7903/archive/2010/02/01/5277822.aspx

            久久久久亚洲av毛片大| 一本色道久久99一综合| 狠狠精品干练久久久无码中文字幕| 国产精品久久久久jk制服| 91精品国产综合久久四虎久久无码一级 | 久久国产美女免费观看精品| 久久青青草原精品国产软件 | 久久综合狠狠综合久久| 精品久久一区二区| 亚洲精品国产第一综合99久久 | 日本精品久久久久久久久免费| 91麻豆国产精品91久久久| 久久精品国产影库免费看 | 国产综合免费精品久久久| 老男人久久青草av高清| 天天综合久久久网| 亚洲va中文字幕无码久久不卡 | 久久国产精品二国产精品| 婷婷综合久久中文字幕蜜桃三电影| 99久久久久| 国产Av激情久久无码天堂| 国产精品中文久久久久久久| 久久精品二区| 国产免费福利体检区久久| 久久被窝电影亚洲爽爽爽| 久久精品国产亚洲AV嫖农村妇女| 亚洲国产精品嫩草影院久久| 久久99精品国产99久久6男男| 亚洲中文字幕无码久久2017| 亚洲国产成人精品91久久久| 久久久精品久久久久久 | a级成人毛片久久| 成人妇女免费播放久久久| 久久夜色精品国产网站| 久久国产精品无| 中文字幕精品久久久久人妻| 久久久久国产视频电影| 欧美性猛交xxxx免费看久久久| 国产精品内射久久久久欢欢| 国内精品伊人久久久久网站| 国产精品va久久久久久久|