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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

进程间通信——剪切板

發(fā)布時間:2024/1/1 编程问答 75 豆豆
生活随笔 收集整理的這篇文章主要介紹了 进程间通信——剪切板 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

要點總結(jié):

1、剪切板是操作系統(tǒng)維護(hù)的一塊內(nèi)存區(qū)域,本機(jī)所有進(jìn)程都可以訪問。 2、剪切板內(nèi)存從哪里來?不是一開機(jī)就分配的,是程序要將數(shù)據(jù)放入剪切板時分配內(nèi)存的。 3、但:malloc和 new內(nèi)存是在當(dāng)前進(jìn)程的私有地址空間中分配內(nèi)存,并不能被所有進(jìn)程共享。 4、所有:用GlobalAlloc分配內(nèi)存,此內(nèi)存不為任一進(jìn)程私有,而是由操作系統(tǒng)管理。 5、特點:只能用于本地進(jìn)程間通信。

引子

由于在啟動一個進(jìn)程后,操作系統(tǒng)會給這個進(jìn)程分配 4GB 的私有地址空間,至于為何有 4GB 這么大,

那得考慮進(jìn)程的私有地址空間和實際物理內(nèi)存地址空間之間的映射以及頁交換等等細(xì)節(jié)問題了,這里不予討論,

從名字就可以知道,既然操作系統(tǒng)給每一個進(jìn)程分配的是私有地址空間,

自然,這段地址空間也只有這個進(jìn)程自己才能訪問了,不然還稱為私有干嗎呢?

既然這段私有地址空間只能由進(jìn)程本身訪問,那也就說明別的進(jìn)程是不能夠隨意的訪問這個進(jìn)程的地址空間的,

而本篇博文介紹的是進(jìn)程間的通信,而上面又說任意兩個進(jìn)程之間是并能夠互相訪問對方的私有地址空間的,

都不能訪問了,那還通信個屁啊 ?

自然上面的訪問對方進(jìn)程的私有地址空間是行不通了,那應(yīng)該還有其他辦法的 !!!

解決方法:

如果我在物理內(nèi)存中劃分出一塊內(nèi)存,這一塊內(nèi)存不為任何的進(jìn)程所私有,但是任何的進(jìn)程又都可以訪問這塊內(nèi)存,

那么?進(jìn)程 A?就可以往這塊內(nèi)存中存放數(shù)據(jù)?Data?,然后?進(jìn)程 B?也是可以訪問這塊內(nèi)存的,從而?進(jìn)程 B?就可以訪問到數(shù)據(jù)?Data?了,

這樣不就實現(xiàn)了?進(jìn)程 A?和?進(jìn)程 B?之間的通信了 !!!

而上面的這種思路就是剪貼板了。

當(dāng)然解決進(jìn)程間通信還有好幾種思路,這將會在后續(xù)博文中介紹,本篇博文暫只介紹利用剪貼板來實現(xiàn)進(jìn)程間的通信。

????????????

????????????

剪貼板定義

剪貼板是由操作系統(tǒng)維護(hù)的一塊內(nèi)存區(qū)域,這塊內(nèi)存區(qū)域不屬于任何單獨的進(jìn)程,但是每一個進(jìn)程又都可以訪問這塊內(nèi)存區(qū)域,

而實質(zhì)上當(dāng)在一個進(jìn)程中復(fù)制數(shù)據(jù)時,就是將數(shù)據(jù)放到該內(nèi)存區(qū)域中,

而當(dāng)在另一個進(jìn)程中粘貼數(shù)據(jù)時,則是從該塊內(nèi)存區(qū)域中取出數(shù)據(jù)。 ? ? ? ? ??? ? ? ? ? ?

剪貼板操作

其實在剪貼板中也就那么幾個 API 在使用,所以在這里的還是本著 API 介紹為主,

不管三七二十一,先列出常用的 API 再說(到后面結(jié)合 Demo 的使用即可)。? ? ? ? ? ? ? ??

剪貼板的打開 – OpenClipboard

要想把數(shù)據(jù)放置到剪貼板中,則必須先打開剪貼板,而這是通過?OpenClipboard?成員函數(shù)實現(xiàn):

BOOL? OpenClipboard(HWND??hWndNewOwner?);

第一個參數(shù)?hWndNewOwner?指向一個與之關(guān)聯(lián)的窗口句柄,即代表是這個窗口打開剪貼板,

如果這個參數(shù)設(shè)置為?NULL?的話,則以當(dāng)前的任務(wù)或者說是進(jìn)程來打開剪貼板。

如果打開剪貼板成功,則該函數(shù)返回非?0?值,如果其他程序已經(jīng)打開了剪貼板,

那么當(dāng)前這個程序就無法再打開剪貼板了,所以會致使打開剪貼板失敗,從而該函數(shù)返回?0?值。

其實這也好理解,你想啊,剪貼板總共才那么一塊內(nèi)存區(qū)域,你?進(jìn)程 A?要往里面寫數(shù)據(jù),你?進(jìn)程 B?又要往里面寫數(shù)據(jù),那不亂套去,

解決這個亂套的辦法就是,如果我?進(jìn)程 A?正在往剪貼板里面寫數(shù)據(jù)(可以理解為?進(jìn)程 A?打開剪貼板了),那么?進(jìn)程 B?就不能往剪貼板里頭寫數(shù)據(jù)了,

既然要讓?進(jìn)程 B?不能往剪貼板中寫數(shù)據(jù)了,那我就讓?進(jìn)程 B?打開剪貼板失敗不就得了。

所以如果某個程序已經(jīng)打開了剪貼板,那么其他應(yīng)用程序?qū)⒉荒苄薷募糍N板,

直到打開了剪貼板的這個程序調(diào)用了?CloseClipboard?函數(shù),

并且只有在調(diào)用了?EmptyClipboard?函數(shù)之后,打開剪貼板的當(dāng)前窗口才能擁有剪貼板,

注意是必須要在調(diào)用了?EmptyClipboard?函數(shù)之后才能擁有剪貼板。?? ? ? ? ? ? ? ? ??

剪貼板的清空 - EmptyClipboard

這個函數(shù)將清空剪貼板,并釋放剪貼板中數(shù)據(jù)的句柄,然后將剪貼板的所有權(quán)分配給當(dāng)前打開剪貼板的窗口,

因為剪貼板是所有進(jìn)程都可以訪問的,

所以應(yīng)用程序在使用這個剪貼板時,有可能已經(jīng)有其他的應(yīng)用程序把數(shù)據(jù)放置到了剪貼板上,

因此該進(jìn)程打開剪貼板之后,就需要調(diào)用?EmptyClipboard?函數(shù)來清空剪貼板,

釋放剪貼板中存放的數(shù)據(jù)的句柄,并將剪貼板的所有權(quán)分配給當(dāng)前的進(jìn)程,

這樣做之后當(dāng)前打開這個剪貼板的程序就擁有了剪貼板的所有權(quán),因此這個程序就可以往剪貼板上放置數(shù)據(jù)了。

BOOL?EmptyClipboard(void);

??????????????????????????????

剪貼板的關(guān)閉 - CloseClipboard

如果某個進(jìn)程打開了剪貼板,則在這個進(jìn)程沒有調(diào)用?CloseClipboard?函數(shù)關(guān)閉剪貼板句柄之前,

其他進(jìn)程都是無法打開剪貼板的,所以我們每次使用完剪貼板之后都應(yīng)該關(guān)閉剪貼板。

注意,這里的關(guān)閉剪貼板并不代表當(dāng)前打開剪貼板的這個程序失去了對剪貼板的所有權(quán),

只有在別的程序調(diào)用了?EmptyClipboard?函數(shù)之后,當(dāng)前的這個程序才會失去對剪貼板的所有權(quán),

而那個調(diào)用?EmptyClipboard?函數(shù)的程序才能擁有剪貼板。

BOOL?CloseClipboard(void);

???????????????????????????

數(shù)據(jù)發(fā)送到剪貼板 - SetClipboardData

可以通過?SetClipboardData?函數(shù)來實現(xiàn)往剪貼板中放置數(shù)據(jù),這個函數(shù)以指定的剪貼板格式向剪貼板中放置數(shù)據(jù)。

HANDLE? SetClipboardData(UINT uFormat,? HANDLE hMem );

第一個參數(shù)?uFormat?用來指定要放到剪貼板上的數(shù)據(jù)的格式,

比如常見的有?CF_BITMAP?CF_TEXT?,CF_DIB?等等(其他格式可以參考?MSDN)。

第二個參數(shù)?hMem?用來指定具有指定格式的數(shù)據(jù)的句柄,該參數(shù)可以是?NULL?

如果該參數(shù)為?NULL?則表明直到有程序?qū)糍N板中的數(shù)據(jù)進(jìn)行請求時,

該程序(也就是擁有剪貼板所有權(quán)的進(jìn)程)才會將數(shù)據(jù)復(fù)制到剪貼板中,也就是提供指定剪貼板格式的數(shù)據(jù),

上面提及的就是延遲提交技術(shù),這個延遲提交技術(shù)將會在后面做詳細(xì)的介紹。

??????????????

剪貼板中數(shù)據(jù)格式判斷 – IsClipboardFormatAvaliable

BOOL? IsClipboardFormatAvailable( UINT format );

該函數(shù)用來判斷剪貼板上的數(shù)據(jù)格式是否為?format?指定的格式。

?????????????

剪貼板中數(shù)據(jù)接收 - GetClipboardData

HANDLE? GetClipboardData( UINT uFormat );

該函數(shù)根據(jù)?uFormat?指定的格式,返回一個以指定格式存在于剪貼板中的剪貼板對象的句柄。

?????????????

?????????????

全局內(nèi)存分配 – HGLOBAL

剪貼板中的內(nèi)存從何而來

從上面的介紹中可以知道剪貼板其實就是一塊內(nèi)存,那么這塊內(nèi)存是什么時候分配的呢?

難不成說一開機(jī),操作系統(tǒng)就給剪貼板分配個幾?M?的內(nèi)存的吧?

這種方式也太遜色了,你想啊,我的程序要往剪貼板中放置的數(shù)據(jù),我事先又不曉得數(shù)據(jù)長度,

所以,一開機(jī)操作系統(tǒng)究竟要給剪貼板分配多少內(nèi)存呢?很明顯,太不動態(tài)了,不可取。

要想動態(tài)的話,那有一種方案,就是當(dāng)我的程序要往剪貼板中放置數(shù)據(jù)的時候來確定要分配給剪貼板的內(nèi)存的大小,

很明顯,既然我都知道要往剪貼板中放置那些數(shù)據(jù)了,自然我也就知道了這些數(shù)據(jù)的長度,

那么我就可以以這個數(shù)據(jù)長度來給剪貼板分配內(nèi)存了,這是很動態(tài)的了吧,所以這種方案是可取的,

但關(guān)鍵是,當(dāng)我們以前在程序中分配內(nèi)存的時候,都是使用的標(biāo)準(zhǔn)?C?運行庫中的?malloc?或者是?C++?中的?new?關(guān)鍵字,

(當(dāng)然分配內(nèi)存還有很多其他的函數(shù),比如就有內(nèi)核中的執(zhí)行體中就有很多分配內(nèi)存的函數(shù),這里不討論),

而使用?malloc?或者?new?有一個問題,那就是,用這個兩個東西來分配的內(nèi)存空間都是在當(dāng)前進(jìn)程的私有地址空間上分配內(nèi)存,

也就是它們兩個東東所分配的內(nèi)存空間為進(jìn)程私有地址空間所有,并不為所有進(jìn)程所共享,

上面提到了,任何進(jìn)程之間都是不能訪問對方的私有地址空間的,你把剪貼板中的內(nèi)存分配到了你當(dāng)前進(jìn)程的私有地址空間上,

而其他進(jìn)程又不能訪問你這個進(jìn)程的私有地址空間,那怎么能夠訪問剪貼板呢?

很明顯,不能使用?malloc?和?new?關(guān)鍵字來分配內(nèi)存給剪貼板。

我們應(yīng)該要使用另外一個特殊一點的函數(shù)來分配內(nèi)存給剪貼板,

這個特殊函數(shù)所分配的內(nèi)存不能夠是在進(jìn)程的私有地址空間上分配,而是要在全局地址空間上分配內(nèi)存,

這樣這個函數(shù)所分配的內(nèi)存才能夠被所有的進(jìn)程所共享,這樣,剪貼板中的數(shù)據(jù)就可以被其他的進(jìn)程所訪問了。

?????????????????????

GlobalAlloc 函數(shù)

GlobalAlloc?函數(shù)是從堆上分配指定數(shù)目的字節(jié),

與其他的內(nèi)存管理函數(shù)相比,全局內(nèi)存函數(shù)的運行速度會稍微慢一些(等下會解釋為什么會慢),

但是全局函數(shù)支持動態(tài)數(shù)據(jù)交換,同時,其分配的內(nèi)存也不為任何一個進(jìn)程所私有,而是由操作系統(tǒng)來管理這塊內(nèi)存,

所以用在給剪貼板分配內(nèi)存空間是很適合的。

這里有讀者可能會問:

為什么我們在自己的應(yīng)用程序中不使用?GlobalAlloc?函數(shù)來分配內(nèi)存,而是要使用?malloc?或者?new??來實現(xiàn)?

其實,這個也只用稍微想想就知道了,你想啊,使用?malloc?或者?new?分配的內(nèi)存是在進(jìn)程的私有地址空間上分配的,

這片私有地址空間都是歸這個進(jìn)程所擁有,所管理的,自然,在以后對這塊內(nèi)存的讀寫會快很多的,

而全局內(nèi)存不屬于這個進(jìn)程,你下次要去訪問全局內(nèi)存的時候,還得通過映射轉(zhuǎn)換,這樣肯定是運行效率低下一些了,

簡單點就可以這樣理解,你使用?malloc?或者?new?分配的內(nèi)存和你的進(jìn)程隔得很近,程序要過去拿數(shù)據(jù) - 得,很近吧,

而是用?GlobalAlloc?函數(shù)分配的內(nèi)存和你的進(jìn)程隔得很遠(yuǎn),程序要過去拿數(shù)據(jù) - 太遠(yuǎn)了,耗時。

應(yīng)用程序在調(diào)用了?SetClipboardData?函數(shù)之后,

系統(tǒng)就擁有了?hMem?參數(shù)所標(biāo)識的數(shù)據(jù)對象,該應(yīng)用程序可以讀取這個數(shù)據(jù)對象,

但是在應(yīng)用程序調(diào)用?CloseClipboard?函數(shù)之前,它都是不能釋放該對象的句柄的,或者鎖定這個句柄,

如果?hMem?標(biāo)識一個內(nèi)存對象,那么這個對象必須是利用?GMEM_MOVEABLE?標(biāo)識調(diào)用?GlobalAlloc?函數(shù)為其分配內(nèi)存的。

HGLOBAL? WINAPI? GlobalAlloc( UINT? uFlags,?? SIZE_T? dwBytes );

第一個參數(shù)?uFlags?用來指定分配內(nèi)存的方式。其取值如下列表所示

(但是在剪貼板的使用中,由于要實現(xiàn)動態(tài)數(shù)據(jù)交換,所以必須得使用?GHND?或者?GMEM_MOVEABLE):

描述

GHND

即?GMEM_MOVEABLE?和?GMEM_ZEROINIT?的組合。

GMEM_FIXED

分配一塊固定內(nèi)存,返回值是一個指針。

GMEM_MOVEABLE

分配一塊可移動內(nèi)存。

GMEM_ZEROINIT

初始化內(nèi)存的內(nèi)容為 0

GPTR

即?GMEM_FIXED?和?GMEM_ZEROINIT?的組合。

第二個參數(shù)?dwBytes?用來指定分配的字節(jié)數(shù)。

???????????????????

GlobalReAlloc 函數(shù)

HGLOBAL? WINAPI? GlobalReAlloc(HGLOBAL hMem,? SIZE_T dwBytes,? UINT uFlags);

該函數(shù)為再分配函數(shù),即在原有的數(shù)據(jù)對象?hMem?上,為其擴(kuò)大內(nèi)存空間。

第一個參數(shù)?hMem?代表由?GlobalAlloc?函數(shù)返回的數(shù)據(jù)對象句柄。

第二個參數(shù)?dwBytes?指定需要重新分配的內(nèi)存的大小。

第三個參數(shù)?uFlags?指定分配的方式(可以參考?GlobalAlloc?函數(shù))。

???????????????????

GlobalSize 函數(shù)

SIZE_T? WINAPI? GlobalSize( HGLOBAL? hMem );

該函數(shù)用來返回內(nèi)存塊的大小。

第一個參數(shù)?hMem?代表由?GlobalAlloc?函數(shù)返回的數(shù)據(jù)對象句柄。

???????????????

GlobalLock 函數(shù)

LPVOID? WINAPI? GlobalLock( HGLOBAL? hMem );

該函數(shù)的作用是對全局內(nèi)存對象加鎖,然后返回該對象內(nèi)存塊第一個字節(jié)的指針

第一個參數(shù)?hMem?代表由?GlobalAlloc?函數(shù)返回的數(shù)據(jù)對象句柄。

???????????

GlobalUnLock 函數(shù)

BOOL? WINAPI? GlobalUnlock( HGLOBAL? hMem );

你通過上面的?GlobalLock?函數(shù)可以獲得這塊全局內(nèi)存的訪問權(quán),

加鎖的意思就是你已經(jīng)在使用這塊全局內(nèi)存了,別的程序就不能再使用這塊全局內(nèi)存了,

而如果你一直不解鎖,那也不是個事啊,別的程序?qū)恢倍际褂貌涣诉@塊全局內(nèi)存,

那還叫全局內(nèi)存干嗎啊?所以這個函數(shù)就是用來對全局內(nèi)存對象解鎖。

第一個參數(shù)?hMem?代表由?GlobalAlloc?函數(shù)返回的數(shù)據(jù)對象句柄。

?????????????????

GlobalFree 函數(shù)

HGLOBAL? WINAPI? GlobalFree( HGLOBAL? hMem );

該函數(shù)釋放全局內(nèi)存塊。

第一個參數(shù)?hMem?代表由?GlobalAlloc?函數(shù)返回的數(shù)據(jù)對象句柄。

???????????????

?????????????

Demo1 – ConsoleClipboard(剪貼板常用手法)

整個項目結(jié)構(gòu)很簡單:

ConsoleClipboard.h

#ifndef CONSOLE_CLIP_BOARD_H #define CONSOLE_CLIP_BOARD_H ? #include <Windows.h> #include <iostream> ? using namespace std; ? const char * pStrData = "Zachary"; ? void SetClipBoardData(); ? void GetClipBoardData(); ? ? #endif ConsoleClipboard.cpp #include "ConsoleClipboard.h" ? int main(int argc, char * argv) { SetClipBoardData(); GetClipBoardData(); ? system("pause"); } ? void SetClipBoardData() { //將 OpenClipboard 函數(shù)的參數(shù)指定為 NULL,表明為當(dāng)前進(jìn)程打開剪貼板 if(OpenClipboard(NULL)) { char * pDataBuf; ? //全局內(nèi)存對象 HGLOBAL hGlobalClip; ? //給全局內(nèi)存對象分配全局內(nèi)存 hGlobalClip = GlobalAlloc(GHND, strlen(pStrData) + 1); //通過給全局內(nèi)存對象加鎖獲得對全局內(nèi)存塊的引用 pDataBuf = (char *)GlobalLock(hGlobalClip); strcpy(pDataBuf, pStrData); //使用完全局內(nèi)存塊后需要對全局內(nèi)存塊解鎖 GlobalUnlock(hGlobalClip); ? //清空剪貼板 EmptyClipboard(); //設(shè)置剪貼板數(shù)據(jù),這里直接將數(shù)據(jù)放到了剪貼板中,而沒有使用延遲提交技術(shù) SetClipboardData(CF_TEXT, hGlobalClip); //關(guān)閉剪貼板 CloseClipboard(); ? cout<<"設(shè)置剪貼板為: "<<pStrData<<endl<<endl; } } ? void GetClipBoardData() { if(OpenClipboard(NULL)) { //判斷剪貼板中的數(shù)據(jù)格式是否為 CF_TEXT if(IsClipboardFormatAvailable(CF_TEXT)) { char * pDataBuf; HGLOBAL hGlobalClip; ? //從剪貼板中獲取格式為 CF_TEXT 的數(shù)據(jù) hGlobalClip = GetClipboardData(CF_TEXT); pDataBuf = (char *)GlobalLock(hGlobalClip); GlobalUnlock(hGlobalClip); ? cout<<"從剪貼板中獲取到數(shù)據(jù): "<<pDataBuf<<endl<<endl; } CloseClipboard(); } }

效果展示:

程序運行效果:

打開記事本進(jìn)行粘貼操作:

???????????

????????????

延遲提交技術(shù)

什么是延遲提交技術(shù)?

當(dāng)把數(shù)據(jù)放入剪貼板中時,一般來說要制作一份數(shù)據(jù)的副本,

也就是要分配全局內(nèi)存,然后將數(shù)據(jù)再復(fù)制一份,然后再將包含這份副本的內(nèi)存塊句柄傳遞給剪貼板,

對于小數(shù)據(jù)量來說,這個沒什么,但是對于大數(shù)據(jù)量的話,就有問題了,

你一使用剪貼板,就往里面復(fù)制個什么幾百?MB?的數(shù)據(jù),

那這個數(shù)據(jù)在剪貼板中的數(shù)據(jù)被其他數(shù)據(jù)取代之前都是存放在內(nèi)存中的啊,

這個方法也太齷齪了,你想啊,要是我就復(fù)制了一個?500MB?的數(shù)據(jù),然后我一直不再復(fù)制其他的東西,

那么這個?500MB?的數(shù)據(jù)就會一直駐留在內(nèi)存中,咦 . . . 太可怕了 !!!太浪費內(nèi)存的使用效率了 !!!

為了解決上面這個問題,就需要通過使用延遲提交技術(shù)來避免內(nèi)存的浪費,

當(dāng)使用延遲提交技術(shù)時,實際上,直到另一個程序需要數(shù)據(jù)時,程序才會提供這份數(shù)據(jù),

也就是,其實我一開始?程序 A?并不往剪貼板中存放真實的數(shù)據(jù),

而只是告訴剪貼板,我往里面放了數(shù)據(jù)(其實數(shù)據(jù)還沒有放進(jìn)去),

而后,如果有其他的?程序 B?訪問了剪貼板中的數(shù)據(jù),也就是執(zhí)行了“粘貼”操作,

那么此時操作系統(tǒng)就會去檢查數(shù)據(jù)是不是真正的存放在了剪貼板中,

如果剪貼板中存放了數(shù)據(jù),那么直接把數(shù)據(jù)送出去就可以了(這就沒有使用延遲提交技術(shù)了),

而如果剪貼板中沒有數(shù)據(jù),那么?Windows?就會給上次往剪貼板中存放數(shù)據(jù)(盡管沒有存放實際的數(shù)據(jù))的程序,

也就是?程序 A發(fā)送消息,

而后,我們的?程序 A?就可以再次調(diào)用?SetClipboardData?來將真實的數(shù)據(jù)放入到剪貼板中了,這樣就是延遲提交技術(shù)了。

要實現(xiàn)延遲提交技術(shù),則在?程序?A?中不應(yīng)該將數(shù)據(jù)句柄傳送給?Windows?

而是在?SetClipboardData?調(diào)用中使用?NULL

然后當(dāng)另外一個?程序?B?調(diào)用?GetClipboardData?函數(shù)時,

Windows?就會檢查這種格式的數(shù)據(jù)在剪貼板中的句柄是否為?NULL?

如果為?NULL?,則?Windows?會給程序?A發(fā)送一個消息,從而請求到數(shù)據(jù)的實際句柄,

這個數(shù)據(jù)的實際句柄是?程序?A?在響應(yīng)消息的處理函數(shù)中重新調(diào)用?SetClipboardData?來提供的。

??????????????

延遲提交技術(shù)中涉及的三個消息:

下面提及的 程序 A 代表剪貼板當(dāng)前擁有者,也就是 程序 A 負(fù)責(zé)往剪貼板中寫入數(shù)據(jù),

而 程序 B 則代表從剪貼板中讀取出數(shù)據(jù),其沒有對剪貼板的所有權(quán)。

????????????

WM_RENDERFORMAT?:

當(dāng)?程序?B?調(diào)用?GetClipboardData?時,Windows?將會給?程序?A?的窗口過程發(fā)送這個消息,

其中?wParam?參數(shù)的值是所要求的格式。

在處理這個消息時,程序 A?就不再需要打開或者清空剪貼板了,

也就是不需要再次調(diào)用?OpenClipboard?和?EmptyClipboard?函數(shù)了,

為什么不需要再次調(diào)用這兩個函數(shù)?

這是因為,我們一開始的時候已經(jīng)調(diào)用了這兩個函數(shù)(如果一開始沒有調(diào)用的話,窗口根本就不會接受到這個消息),

而此舉已經(jīng)告訴操作系統(tǒng)剪貼板已經(jīng)歸我所有了,而且里面的數(shù)據(jù)已經(jīng)被清空了,

剪貼板所有權(quán)都?xì)w我了,那還去打開個鬼啊,不是浪費嘛?

在處理這個消息時,應(yīng)該為?wParam?所指定的格式創(chuàng)建一個全局內(nèi)存塊,

然后再把數(shù)據(jù)傳遞到這個全局內(nèi)存塊中,并要正確的格式和數(shù)據(jù)句柄再一次調(diào)用?SetClipboardData?函數(shù)。

也就是需要將數(shù)據(jù)真實的復(fù)制到剪貼板中了。

WM_RENDERALLFORAMTS?:

如果?程序?A?在它自己仍然是剪貼板所有者的時候就要終止運行,

并且剪貼板上仍然包含著該?程序?A?用?SetClipboardData?所設(shè)置的?NULL?數(shù)據(jù)句柄(延遲提交技術(shù)),

也就是?程序 A?當(dāng)前還是剪貼板的所有者,但是用戶又單擊了關(guān)閉窗口,

而剪貼板中還沒有真實的數(shù)據(jù)存在(因為使用了延遲提交技術(shù)),

即數(shù)據(jù)還沒有被提交給剪貼板,程序 A?就要死了,則此時?程 序?A?的窗口過程將接收到這個消息,

這個消息的一般處理為打開剪貼板,并且清空剪貼板,然后把數(shù)據(jù)加載到內(nèi)存中,

并為每種格式調(diào)用?SetClipboardData?,然后再關(guān)閉剪貼板即可。

WM_DESTROYCLIPBOARD?:

當(dāng)在?程序?B?中調(diào)用?EmptyClipboard?時,Windows?將會給?程序?A?的窗口過程發(fā)送這個消息。

即通知?程序?A?其已不再是剪貼板的擁有者了。

???????????????

?????????????

Demo2 – MFCClipboard(延遲提交技術(shù)的使用)

整個項目結(jié)構(gòu)很簡單:

主界面:

添加 3 個消息處理:

消息映射函數(shù)聲明: protected: HICON m_hIcon; ? // 生成的消息映射函數(shù) virtual BOOL OnInitDialog(); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: afx_msg void OnDestroyClipboard(); afx_msg void OnRenderAllFormats(); afx_msg void OnRenderFormat(UINT nFormat); afx_msg void OnBnClickedBtnWrite(); afx_msg void OnBnClickedBtnRead(); CString m_CStrWrite; CString m_CStrRead; };

消息映射實現(xiàn):

void CMFCClipboardDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT_WRITE, m_CStrWrite); DDX_Text(pDX, IDC_EDIT_READ, m_CStrRead); } ? BEGIN_MESSAGE_MAP(CMFCClipboardDlg, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_DESTROYCLIPBOARD() ON_WM_RENDERALLFORMATS() ON_WM_RENDERFORMAT() ON_BN_CLICKED(ID_BTN_WRITE, &CMFCClipboardDlg::OnBnClickedBtnWrite) ON_BN_CLICKED(ID_BTN_READ, &CMFCClipboardDlg::OnBnClickedBtnRead) END_MESSAGE_MAP()

消息映射函數(shù)實現(xiàn)

? //WM_DESTROYCLIPBOARD 消息處理函數(shù) void CMFCClipboardDlg::OnDestroyClipboard() { //當(dāng)有另外的程序調(diào)用 EmptyClipboard 時, //Windows 將向當(dāng)前窗口過程發(fā)送 WM_DESTROYCLIPBOARD 消息 MessageBox(TEXT("很抱歉 , 您已失去對剪貼板的擁有權(quán) ..."), TEXT("提示"), MB_ICONINFORMATION); ? CDialogEx::OnDestroyClipboard(); } ? ? //WM_RENDERALLFORMATS 消息處理函數(shù) void CMFCClipboardDlg::OnRenderAllFormats() { //當(dāng)剪貼板中的數(shù)據(jù)句柄為當(dāng)前程序所擁有,而當(dāng)前程序又將被退出時, //Windows 給該程序窗口發(fā)送 WM_RENDERALLFORMATS 消息 ? OpenClipboard(); EmptyClipboard(); CloseClipboard(); ? CDialogEx::OnRenderAllFormats(); } ? //WM_RENDERFORMAT 消息處理函數(shù) void CMFCClipboardDlg::OnRenderFormat(UINT nFormat) { //當(dāng)有另外的程序訪問剪貼板時 //Windows 給該程序窗口過程發(fā)送 WM_RENDERFORMAT 消息 int dataNum; int dataIndex; char * pDataBuf; HGLOBAL hGlobalClip; ? dataNum = this->m_CStrWrite.GetLength(); ? hGlobalClip = GlobalAlloc(GHND, dataNum + 1); pDataBuf = (char *)GlobalLock(hGlobalClip); for(dataIndex=0;dataIndex<dataNum;dataIndex++) { pDataBuf[dataIndex] = this->m_CStrWrite.GetAt(dataIndex); } GlobalUnlock(hGlobalClip); ? //此時需要將有效數(shù)據(jù)寫入到剪貼板中 SetClipboardData(CF_TEXT, hGlobalClip); ? CDialogEx::OnRenderFormat(nFormat); } ? ? void CMFCClipboardDlg::OnBnClickedBtnWrite() { UpdateData(); if(this->m_CStrWrite.GetLength() > 0) { if(OpenClipboard()) { EmptyClipboard(); SetClipboardData(CF_TEXT, NULL); CloseClipboard(); MessageBox(TEXT(" 恭喜您 , 設(shè)置剪貼板成功 ..."), TEXT("提示"), MB_ICONINFORMATION); } } } ? ? void CMFCClipboardDlg::OnBnClickedBtnRead() { if(OpenClipboard()) { //判斷剪貼板中的數(shù)據(jù)格式是否為 CF_TEXT if(IsClipboardFormatAvailable(CF_TEXT)) { char * pDataBuf; HGLOBAL hGlobalClip; ? //從剪貼板中獲取到指定格式的數(shù)據(jù) hGlobalClip = GetClipboardData(CF_TEXT); pDataBuf = (char *)GlobalLock(hGlobalClip); this->m_CStrRead = pDataBuf; GlobalUnlock(hGlobalClip); ? UpdateData(FALSE); } CloseClipboard(); } }

效果展示:

設(shè)置剪貼板中數(shù)據(jù):

當(dāng)前程序讀取剪貼板中數(shù)據(jù):

記事本程序讀取剪貼板中數(shù)據(jù):

測試當(dāng)前進(jìn)程失去剪貼板所有權(quán):

首先單擊當(dāng)前程序設(shè)置好剪貼板中的數(shù)據(jù),

然后打開一個記事本文件,在在其中輸入一些數(shù)據(jù),然后選擇這部分?jǐn)?shù)據(jù),按下復(fù)制:

????????????

?????????????

結(jié)束語

對于剪貼板的使用呢,也就是那么幾個?API?在使用而已,熟悉一下就可以了,

關(guān)鍵是延遲提交技術(shù)的使用,同時還有對于全局內(nèi)存對象的理解還是有點難度的,

不過,我相信我解釋的還是比較明白了,大家可以通過我的解釋再對照?Demo?來理解,

這樣理解起來容易快速一些。

上面介紹的是通過剪貼板來實現(xiàn)進(jìn)程之間的通信,其實這還是有問題的,

因為我們的剪貼板是位于本地機(jī)器上,所以,利用剪貼板還是無法實現(xiàn)本地進(jìn)程與遠(yuǎn)程進(jìn)程通信,

當(dāng)然要想實現(xiàn)本地進(jìn)程和遠(yuǎn)程進(jìn)程的通信,那也還是有辦法的,這會在后續(xù)博文中引出的。

然后的話,今天圣誕節(jié)嘛,祝諸位節(jié)日快樂,也不是我崇洋媚外,說個節(jié)日快樂還是可以的。

總結(jié)

以上是生活随笔為你收集整理的进程间通信——剪切板的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

japanesefreesexvideo高潮 | 久草视频在线新免费 | av激情五月 | 婷婷国产视频 | av在线进入 | 亚洲成人精品久久 | 一级一片免费看 | 精品亚洲二区 | 五月天天在线 | 日韩黄视频 | 欧美激情va永久在线播放 | 欧美精品久久久久久久免费 | 欧美va电影 | 国产午夜精品一区二区三区嫩草 | 久久影院精品 | 日本精品一区二区在线观看 | 国内精品久久久久久久 | 亚洲成av片人久久久 | 久久免费看a级毛毛片 | 久久精品99久久 | 精品免费观看 | 久久国产美女视频 | 久久人人97超碰国产公开结果 | 亚洲久草视频 | 国产精品国产三级国产不产一地 | 99热这里只有精品国产首页 | 亚洲毛片一区二区三区 | 国产精品99久久久久人中文网介绍 | 久久不卡日韩美女 | 在线观看黄色小视频 | 最近中文国产在线视频 | 久久国产美女视频 | 欧美亚洲国产精品久久高清浪潮 | 日本精品中文字幕在线观看 | 免费进去里的视频 | 久久精品三级 | 精品国产电影 | 国产精品区二区三区日本 | 在线观看中文字幕一区二区 | 久久久精品一区二区三区 | 一级黄视频 | 天天操天天摸天天射 | 免费一级片在线 | 97在线观看免费视频 | 午夜av色 | 色视频网站在线 | av东方在线 | 欧美福利在线播放 | 干天天| 欧美激情视频一区 | 亚洲国产综合在线 | 国产字幕在线看 | 不卡中文字幕在线 | 久久视频二区 | 99爱视频在线观看 | 亚洲人在线 | 日韩美av在线| 天天狠狠干 | 成人少妇影院yyyy | 中文字幕在线观看国产 | 色九九在线 | 激情丁香综合五月 | 国产精品a久久久久 | 欧美日韩一级久久久久久免费看 | 日韩欧美一区二区在线播放 | 国产精品一区二区av日韩在线 | 丁香婷婷成人 | 国产短视频在线播放 | 韩日电影在线 | 成人av在线影视 | 欧美一区影院 | 521色香蕉网站在线观看 | 亚洲色图激情文学 | 亚洲精品日韩一区二区电影 | 久久久麻豆视频 | 不卡的av在线播放 | 91麻豆精品国产91久久久使用方法 | 婷婷国产一区二区三区 | 免费久久网站 | 在线免费看片 | 亚欧日韩成人h片 | av丝袜美腿 | 天天操天天干天天操天天干 | 亚洲一级电影视频 | 日韩在线国产 | 一二区精品 | 99久久久久 | 国产一区二区在线观看免费 | 精品91久久久久 | 免费成人在线观看 | 欧美a√在线| 婷婷丁香狠狠爱 | 免费成人在线观看 | 人人添人人澡人人澡人人人爽 | 久久国精品 | 欧美va天堂va视频va在线 | 视频国产在线 | 911在线| 黄色精品网站 | 日日干天天射 | 久久精品久久99精品久久 | 欧美 日韩 国产 中文字幕 | 久久在线视频在线 | 亚洲精品国偷拍自产在线观看蜜桃 | 免费性网站| 一二区电影 | 激情av一区二区 | 国产中文在线字幕 | 国产黄色在线观看 | 亚洲欧美视频网站 | 伊人狠狠 | 国产乱码精品一区二区三区介绍 | 色停停五月天 | 精品一区二区三区在线播放 | 日韩在线免费小视频 | 97成人在线视频 | 亚洲国产经典视频 | 日韩av电影国产 | 丁香六月激情婷婷 | 亚洲永久精品在线 | 91九色丨porny丨丰满6 | 婷婷色九月| 黄色软件在线看 | 九九视频在线播放 | 96精品视频| 亚洲视频一区二区三区在线观看 | 91视频麻豆视频 | 国产亚洲免费观看 | 手机在线看a | 免费电影一区二区三区 | 99精品在线免费在线观看 | 色网站黄 | japanesefreesex中国少妇 | 免费精品国产 | 国产精品久久久久久一区二区三区 | 三级黄色欧美 | av免费网站 | 草 免费视频 | 成人黄色免费在线观看 | 成人黄色小说网 | 在线亚洲高清视频 | 国产午夜精品久久久久久久久久 | 国产最新精品视频 | 国产精品白丝jk白祙 | 成人久久久精品国产乱码一区二区 | 亚洲欧美乱综合图片区小说区 | 亚洲成人在线免费 | 日韩高清国产精品 | 午夜久久久久久久久久久 | 亚洲伊人av | 日本中文字幕视频 | 99免费在线播放99久久免费 | 国产明星视频三级a三级点| 国产亚洲午夜高清国产拍精品 | 午夜精品久久久久99热app | 欧美精品色 | 99成人精品 | 久久艹在线观看 | 日本精品久久久久影院 | 久久99精品久久久久久 | 天天射成人 | 久久久精品欧美一区二区免费 | 国产精品欧美激情在线观看 | 毛片网在线 | 日韩欧美在线中文字幕 | 狠狠黄| 欧美一级高清片 | 国内精品久久久久久久久久久久 | 看片一区二区三区 | 久久大视频 | 91视频免费网址 | 人人爱人人做人人爽 | 日韩大片在线观看 | 欧美综合色在线图区 | 最新日韩中文字幕 | 日日碰狠狠添天天爽超碰97久久 | 成人av一二三区 | 夜夜操天天干, | 成人午夜影视 | 伊人五月在线 | 久久精品视频网 | 亚洲欧洲一区二区在线观看 | 狂野欧美激情性xxxx欧美 | 成年人三级网站 | 天天夜夜亚洲 | 日韩va亚洲va欧美va久久 | 2017狠狠干 | 国产在线视频一区二区 | 国产91免费在线观看 | 一级a性色生活片久久毛片波多野 | 狠狠色丁香久久婷婷综合丁香 | 久操视频在线免费看 | 亚洲成人免费在线观看 | 亚洲视频在线观看 | 玖玖视频在线 | 亚洲精品色视频 | 99在线视频精品 | 干狠狠 | 亚洲不卡123 | 久久九九久久精品 | 日韩三区在线观看 | 日韩欧美一二三 | 日韩区欧美久久久无人区 | 成年人在线播放视频 | 成人在线视频在线观看 | 免费日韩电影 | 中文字幕精品三级久久久 | 日韩电影中文字幕在线观看 | 欧美成人在线网站 | 欧美a级片网站 | 天天躁日日躁狠狠躁av麻豆 | 日韩亚洲在线视频 | 婷婷久久五月 | www.91国产 | 国产一区二区在线播放视频 | 国产原创av在线 | 懂色av一区二区在线播放 | 一区二区电影在线观看 | 久久久久亚洲国产精品 | 最新国产精品拍自在线播放 | 久草免费看| 国产高清视频网 | 成人国产一区 | 在线亚洲精品 | 深爱激情开心 | 操久| 精品视频中文字幕 | 国产成人黄色av | 三级黄色理论片 | 色综合久久久网 | 欧美一二三区在线观看 | 2019天天干天天色 | 久久久久久久久久久综合 | 99免费在线 | 激情久久久久久久久久久久久久久久 | 日韩成人免费在线 | 亚洲日本中文字幕在线观看 | 免费在线观看毛片网站 | 久久五月精品 | 天堂在线一区二区三区 | 黄色精品网站 | 国产高清绿奴videos | 天天夜夜狠狠操 | 亚洲夜夜网 | 国产精品久久婷婷六月丁香 | 在线视频 一区二区 | 99欧美视频 | 亚洲国产福利视频 | 日日干夜夜爱 | 五月天最新网址 | 99久热在线精品视频 | 香蕉网在线观看 | 精品国产a | 九九久久精品 | 久久久人人爽 | 日日夜夜噜 | 亚洲激情网站免费观看 | 成人影音av | 亚洲天堂视频在线 | 欧美日韩高清一区二区 国产亚洲免费看 | 免费日韩一区二区 | sm免费xx网站| 探花国产在线 | 91精品国产综合久久婷婷香蕉 | 国产在线色 | 日韩天堂网 | 色网站在线观看 | 婷婷精品在线视频 | 西西4444www大胆无视频 | 亚洲免费av网站 | www.五月天| 九色琪琪久久综合网天天 | 91爱爱免费观看 | 国产精品美女www爽爽爽视频 | 国产精品久久久久久久久久久久午夜 | 亚洲第一香蕉视频 | 在线观看亚洲国产精品 | 亚洲天堂网视频在线观看 | 国产自在线 | 日本精品一区二区三区在线播放视频 | 久久久久久国产一区二区三区 | 免费www视频 | 国产福利资源 | 久久精久久精 | 精品久久久久亚洲 | 二区三区av| 最近日本中文字幕a | 久久高清免费观看 | 激情影院在线 | www.亚洲| 涩涩色亚洲一区 | 中文字幕在线一区二区三区 | 亚洲精品视频在线播放 | 国内精品在线看 | 免费黄a | 激情文学丁香 | 在线视频观看成人 | 色狠狠婷婷 | 午夜精品久久久久久 | 国产一区二区三区高清播放 | 日韩在线视频免费看 | 国产亚洲精品无 | 日韩在线免费视频 | 精品欧美一区二区精品久久 | 国产亚洲成人网 | 亚洲成人在线免费 | www色片| 热re99久久精品国产99热 | 国产美女在线精品免费观看 | 亚洲三级性片 | 91大片网站| 超碰免费在线公开 | 国产精品久久久久永久免费看 | 色久天| 欧洲亚洲国产视频 | 中文字幕成人在线 | 日韩欧美高清在线 | 久久视频免费看 | 免费一级片视频 | 国产亚洲一级高清 | 成人在线免费看 | 国产精品久久久久久久久久久久午夜片 | 99久久毛片 | 极品美女被弄高潮视频网站 | 人人射人人射 | 免费久久视频 | 91视频一8mav | 国产精品中文字幕在线观看 | 日日干天天干 | 91福利国产在线观看 | 国产99久久久精品 | 在线观看视频在线观看 | 日韩精品一区二区免费 | 丁香高清视频在线看看 | 狠狠色噜噜狠狠狠狠 | 五月婷婷深开心 | 人人爽人人爽人人爽 | 国产精品9区 | 在线观看日韩中文字幕 | 亚洲精品高清一区二区三区四区 | 亚洲精品视频免费在线 | 97天天综合网 | www.午夜视频 | 亚洲另类在线视频 | 成人午夜免费福利 | 97人人澡人人添人人爽超碰 | 日韩一级片观看 | 在线观看中文字幕一区 | 国产 亚洲 欧美 在线 | 最新中文字幕在线资源 | 久草在线视频网 | 精品影院一区二区久久久 | 国产精品国产三级国产专区53 | 国产成人99av超碰超爽 | 午夜成人免费电影 | 91视频免费看 | 国产福利一区二区在线 | 91刺激视频 | 成人免费视频观看 | 又黄又爽的免费高潮视频 | 天堂av在线免费 | 狠狠干激情 | 天天操天天操天天干 | 在线免费视频 你懂得 | 一区二区日韩av | 久久久久久久久久久久亚洲 | 综合色天天 | 久久精品久久久久 | 黄色一级影院 | 日韩美在线观看 | 国产偷国产偷亚洲清高 | 精品国产一区二区三区不卡 | 久久国产精品影片 | 97超视频免费观看 | 成年人在线免费看片 | 久草在线视频在线观看 | 日韩久久视频 | 91片黄在线观 | 91成人精品在线 | 国产精品麻豆果冻传媒在线播放 | 国产二区免费视频 | 日本黄色免费播放 | 精品国产不卡 | 亚洲国产成人精品电影在线观看 | 91视频亚洲 | 中文字幕国产一区 | 在线观看免费视频你懂的 | 久久手机免费视频 | 一级黄色片在线观看 | 婷婷中文字幕在线观看 | 亚洲视频大全 | 亚州中文av| 一区二区三区高清在线 | 国产网红在线 | av在线免费网站 | 丁香九月激情综合 | 国产成人精品一区二区在线观看 | 密桃av在线 | www色婷婷com | 99亚洲精品视频 | 国产一级在线观看 | 97色婷婷| 久久99久久99精品免观看粉嫩 | 韩国精品视频在线观看 | 亚洲精选99 | 国产一级片在线播放 | 99精品久久精品一区二区 | 日韩超碰 | 久久综合色影院 | 国产 日韩 欧美 中文 在线播放 | 男女全黄一级一级高潮免费看 | 欧美一二三区播放 | 日韩视频精品在线 | 激情久久久久 | 一区二精品| 日韩在线激情 | 久久国产福利 | 81精品国产乱码久久久久久 | 亚洲国产av精品毛片鲁大师 | 亚洲最大激情中文字幕 | 亚洲精品福利视频 | www.夜色321.com | 91天天操 | 999在线视频 | 97精品超碰一区二区三区 | 日韩肉感妇bbwbbwbbw | 这里只有精彩视频 | 人人澡超碰碰 | 91视频久久久 | 亚洲黄网址 | 久久精品—区二区三区 | 亚洲理论在线观看电影 | 国产视频中文字幕在线观看 | 三级av小说| 99资源网 | 久久久久麻豆v国产 | 亚洲日本va午夜在线电影 | 久久国产成人午夜av影院潦草 | 亚一亚二国产专区 | www在线观看视频 | 免费观看黄色av | 国产91精品久久久久 | 天天操天天草 | av在线com| 亚洲五月婷婷 | 国产破处视频在线播放 | 亚洲欧美怡红院 | 久久久久草 | 成人av网站在线播放 | 色偷偷88888欧美精品久久久 | 中文字幕永久免费 | 夜夜高潮夜夜爽国产伦精品 | 国产香蕉久久精品综合网 | 日韩中文字幕国产精品 | 一本大道久久精品懂色aⅴ 五月婷社区 | 国产精品综合久久久久 | 国产午夜精品理论片在线 | 免费看v片 | 国产成人精品亚洲日本在线观看 | 欧美日韩伦理一区 | 97av视频在线 | 91视频久久| 在线播放视频一区 | 婷婷亚洲激情 | 在线免费观看视频你懂的 | 色婷婷亚洲 | 麻豆视频免费网站 | 久久午夜免费观看 | 国产91成人在在线播放 | 91综合久久一区二区 | 亚洲91av| 中文字幕在线观看你懂的 | 国产精品自产拍 | 欧美日韩中文在线观看 | 91精品老司机久久一区啪 | 午夜视频在线观看一区二区三区 | a在线观看国产 | 久久久久国产成人免费精品免费 | 免费网站在线 | 日韩精品中文字幕久久臀 | 中文字幕成人av | 久久系列 | av直接看 | 97国产在线| 日本三级全黄少妇三2023 | 高清不卡一区二区在线 | 日韩黄色免费在线观看 | 亚洲国产精品va在线看黑人 | 天天要夜夜操 | 九九九九九国产 | 欧美黄色特级片 | 一区久久久 | 久爱精品在线 | 人人讲下载 | 在线观看黄色 | 免费91在线| 97成人在线观看视频 | 在线看成人av | 麻豆免费观看视频 | 国产91精品看黄网站在线观看动漫 | 免费av电影网站 | 麻豆久久一区二区 | 狠狠网亚洲精品 | 精品国产乱码久久久久 | 免费的成人av | 国产精品久久久久久爽爽爽 | 国产第一福利 | 麻豆91在线看 | 亚洲视频www | 国产综合91 | 国产 字幕 制服 中文 在线 | 日韩专区中文字幕 | 久久综合九色综合久99 | 欧美在线视频二区 | 成av人电影 | 99久久久久久久 | 波多野结衣一区三区 | 正在播放国产一区二区 | 成在线播放 | 久久婷亚洲五月一区天天躁 | 亚洲精品视频第一页 | 精品成人网 | 欧美伦理一区二区三区 | 99视频在线免费看 | 久草视频国产 | 丁香婷婷激情 | 国产高清视频免费 | 久久久久国产成人精品亚洲午夜 | 国产午夜一区 | 97在线观看免费高清 | 成人久久精品 | 日韩视频在线观看免费 | 天天色天天射天天干 | 欧美三级免费 | 国产第一页在线观看 | 美女久久久久久久久久 | 天天操天天干天天爽 | 午夜久久 | 日韩黄色av网站 | 免费的成人av | 91视频 - 114av | 久草精品在线 | 丁香婷婷深情五月亚洲 | www色片 | 国内精品国产三级国产aⅴ久 | 永久免费毛片在线观看 | 在线观看视频一区二区三区 | 亚洲午夜激情网 | 国产99久久久国产精品成人免费 | 色综合久久精品 | 青春草国产视频 | 精品九九九九 | 黄色1级大片 | 欧美久久久久久久久久 | 国产一级视频在线观看 | 日韩精品久久久久久久电影99爱 | 一区二区三区在线播放 | 日韩视频一区二区在线 | 日本黄色片一区二区 | 91久久偷偷做嫩草影院 | 久久久影院| 伊人va | 天天操天天操天天操 | 久久久久久久久久福利 | 在线99热| 免费a网站 | 国产成人精品久 | 国产精品中文字幕在线观看 | 欧美激情另类 | 在线观看视频你懂得 | 婷婷激情五月 | 色天堂在线视频 | 超碰97av在线| 99精品美女| 国内精自线一二区永久 | 91香蕉视频在线 | 最新日韩在线 | 日韩专区 在线 | 国产伦精品一区二区三区四区视频 | 91人人澡人人爽 | 国模精品一区二区三区 | 毛片一二区 | 97超碰人人澡 | 黄色一级在线免费观看 | 久久视频免费 | 精品亚洲免a | 在线视频欧美日韩 | 超碰在线人人97 | 欧美 日韩 性 | 天天操天天射天天添 | 在线观看久草 | 欧美日韩精 | 国产精久久久久久妇女av | 午夜精品久久久久久久99水蜜桃 | 中文字幕网站视频在线 | 久久99精品国产麻豆宅宅 | 国内精品在线观看视频 | 精品国内自产拍在线观看视频 | 99视频精品 | 亚洲综合精品在线 | 日韩视频一区二区在线观看 | 中文字幕一区三区 | 精品国精品自拍自在线 | 久久精品一区二区三 | 一本一本久久a久久精品综合妖精 | 人人狠狠综合久久亚洲婷 | 欧美一区二区免费在线观看 | 亚洲女欲精品久久久久久久18 | 伊人五月天综合 | 四虎在线观看 | 久久国产精品一国产精品 | 欧美一区二区在线免费观看 | 欧美大香线蕉线伊人久久 | 欧美性色黄 | 日韩a级黄色片 | 日韩三级免费 | 69视频在线 | 欧美日韩一区二区三区在线免费观看 | 欧美一级xxxx | 色在线最新 | 99精彩视频在线观看免费 | 视频在线观看日韩 | 操操操影院 | 久久久久久蜜av免费网站 | 狠狠色丁香久久婷婷综 | 久久久久久看片 | 亚洲精品美女免费 | 色狠狠综合天天综合综合 | 91福利试看| 99 色| 成 人 黄 色 视频播放1 | 日韩精品一二三 | 国产三级久久久 | 一区二区三区在线免费观看视频 | 中文国产成人精品久久一 | 欧美网址在线观看 | 三级小视频在线观看 | 国产成人精品一区二区三区在线观看 | 五月天开心| 久久精品综合网 | av超碰免费在线 | 亚洲欧美国产视频 | 婷婷久久一区 | 欧美成人在线免费 | 波多野结衣精品 | 日韩免费电影一区二区三区 | 91女神的呻吟细腰翘臀美女 | 久热色超碰 | 2024av| 亚洲欧洲一区二区在线观看 | 在线天堂亚洲 | 亚洲欧美日韩精品久久奇米一区 | 国产毛片久久 | 国产91精品一区二区麻豆亚洲 | 亚洲伊人色| 中文字幕在线视频一区二区 | 一级黄色片在线 | 国内成人综合 | 国产在线国产 | 青草草在线视频 | 91精品区 | 日韩成年视频 | 国产成人1区 | 国产一级片毛片 | 97精品国产aⅴ | 黄色中文字幕在线 | 在线精品视频免费播放 | 超碰人人在线 | 久久国产精品免费一区 | 93久久精品日日躁夜夜躁欧美 | 国产成人久久av977小说 | 综合激情av | 精品久久久久久亚洲综合网 | 国产二区av | 久久久久激情 | 免费一级片在线观看 | 免费视频 三区 | 国产精品自拍av | av黄在线播放| 国产一区在线精品 | 色婷婷视频 | 丁香花在线视频观看免费 | 欧美日韩高清 | 欧美-第1页-屁屁影院 | 国产一区二区三区 在线 | 国产又粗又猛又黄 | 香蕉在线观看视频 | 国产免费观看视频 | 日韩在线高清视频 | 麻豆播放| 免费在线观看成年人视频 | 成人免费xxx在线观看 | 久久99亚洲网美利坚合众国 | 婷婷亚洲综合五月天小说 | 久久九九视频 | 日日天天狠狠 | 97视频网址 | 黄色av电影免费观看 | 久久不色| 国产精品去看片 | 人人爽人人射 | 亚洲精品一区二区久 | 日韩av成人在线观看 | 成人av免费网站 | 婷婷综合在线 | 最近中文字幕大全中文字幕免费 | 婷婷久月 | 亚州精品一二三区 | 国产小视频在线免费观看视频 | 中文字幕第一页在线播放 | 国产在线观看你懂得 | 黄色片软件网站 | 六月色 | 一区二区三区免费在线观看视频 | 91久久国产露脸精品国产闺蜜 | 日韩 国产| 色成人亚洲网 | 99精品国产视频 | 99免费看片 | 91视频一8mav | 97色狠狠 | 在线精品观看国产 | 手机在线黄色网址 | 丁香花在线观看免费完整版视频 | 免费a v在线| 美女中文字幕 | 日韩高清片 | 五月激情六月丁香 | 伊人av综合| 免费网站黄| 久久久久久久福利 | 久久免费一 | 亚洲综合激情网 | 亚洲午夜久久久久 | 国产一区二区在线影院 | 国内丰满少妇猛烈精品播放 | 偷拍视频一区 | 在线视频观看亚洲 | 中文字幕在线观看第三页 | 成人精品视频 | www.91国产 | 国产一级在线 | 伊人精品影院 | 91色影院 | 久视频在线 | 日韩一区二区免费在线观看 | 国产精品久久一卡二卡 | 久久久综合九色合综国产精品 | 成人黄色大片在线观看 | 久久久福利 | 综合久久五月天 | 久久永久免费视频 | 黄色精品一区 | 六月丁香在线视频 | 国产精品不卡在线 | 麻豆视频免费播放 | 亚洲国产合集 | 18国产精品福利片久久婷 | 久久久综合香蕉尹人综合网 | 深夜免费福利在线 | 日韩欧美在线观看一区二区三区 | 日本黄色免费大片 | 日韩理论电影网 | 99精品在线视频观看 | 91在线国内视频 | 国内视频在线 | 婷婷六月网 | 亚洲伊人成综合网 | 一级大片在线观看 | 日韩视频一区二区三区 | 99r在线视频 | 激情欧美一区二区三区免费看 | bbb搡bbb爽爽爽 | 国产欧美精品一区二区三区 | 在线精品一区二区 | 中文字幕一区二区三区四区久久 | 97天天综合网 | 中文字幕日韩在线播放 | 欧美a√大片 | 久久永久视频 | 91精品麻豆 | 黄色毛片在线观看 | 久久久鲁 | 深夜福利视频一区二区 | 国产高清久久久 | 五月婷婷伊人网 | 久99久在线视频 | 免费在线日韩 | 伊人五月天婷婷 | 午夜三级大片 | 日韩电影在线观看一区二区 | 91在线亚洲 | 狠狠的操你| 国产免费作爱视频 | 国产精品一区二区av | 永久黄网站色视频免费观看w | 国产精品99页 | 黄色精品一区 | 黄色com| 亚洲女在线 | 操操操日日 | 免费观看久久 | 国产亚洲欧美精品久久久久久 | 国产精品麻豆果冻传媒在线播放 | 国产成人一区三区 | 在线观看免费91 | 久久婷婷国产色一区二区三区 | 色婷婷导航 | 91久久久国产精品 | 99免费视频 | av动图| 精品中文字幕在线播放 | av丁香花| 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 免费能看的黄色片 | 在线观看v片 | 6080yy精品一区二区三区 | 免费高清男女打扑克视频 | 最新av在线播放 | 国产成人av福利 | 亚州av免费 | 国产成视频在线观看 | 久久久久久久久久久久久影院 | 日日干日日 | 黄色av电影免费观看 | 97超碰色 | 免费试看一区 | 国内精品久久久久影院日本资源 | 国产视频久久久 | 日韩理论电影在线 | 日韩极品视频在线观看 | 精品字幕在线 | 日韩在线中文字幕视频 | se婷婷| 91av在线国产 | 亚洲国产精品99久久久久久久久 | 精品不卡视频 | 天天干夜夜爽 | 在线观看免费av片 | 黄污污网站 | 国产成人久久精品亚洲 | 中文字幕丰满人伦在线 | 国产精品久久久久久久久久东京 | 中文国产在线观看 | 香蕉影院在线播放 | 亚洲精品国产精品国自产观看 | 久久免费一 | 狠狠色噜噜狠狠 | 亚洲毛片在线观看. | 91视频网址入口 | 久久美女免费视频 | 美女精品在线观看 | 五月天久久久久 | 精品一二三区 | 国产午夜精品一区 | 中文字幕在线播出 | 婷香五月 | 国产精品久久久久久一二三四五 | 久久精品aaa | 日韩色综合 | 中文字幕在线不卡国产视频 | 免费高清在线观看电视网站 | 久久国产热 | 成人免费在线观看av | 午夜的福利 | 视频成人永久免费视频 | 91麻豆精品国产91 | 中文字幕亚洲欧美 | 亚洲一区二区高潮无套美女 | 亚洲a色 | av三级av | 亚洲影视九九影院在线观看 | 超碰在线9| 国产高清视频免费观看 | 欧美伦理一区 | 久久呀 | 91精品久久久久久 | 天天综合五月天 | 久久 在线 | 超碰av在线 | 亚洲国产精选 | www一起操| 在线观看视频日韩 | 中文字幕高清免费日韩视频在线 | 天堂在线视频免费观看 | 国产高清久久久久 | 91免费版在线 | 91av原创| 伊人视频| 一区二区三区在线免费 | 久久久久亚洲精品男人的天堂 | 麻豆免费看片 | 亚洲精品毛片一级91精品 | 一本一本久久a久久精品牛牛影视 | 久久综合久久久 | 2022国产精品视频 | 国产精品午夜免费福利视频 | 亚洲综合精品视频 | 91成人精品国产刺激国语对白 | 五月婷婷久久丁香 | 久久精品中文字幕少妇 | 日韩av免费在线电影 | 丁香 久久 综合 | 一本一本久久a久久精品综合 | 国产xxxx做受性欧美88 | 精品国产一二三四区 | 99精品免费 | 成人黄色片在线播放 | 91精品第一页 | 91在线一区| 久久综合影音 | 日韩av看片| 香蕉网在线播放 | 日韩午夜av电影 | 热久久在线视频 | 欧美一区免费在线观看 | 国产亚洲精品久久久久久久久久 | 69精品视频 | 日日夜夜草| 天天干,夜夜操 | 国产黄在线看 | 欧美激情视频一二区 | 免费观看一区 | 国产精品一区二区吃奶在线观看 | 欧美日韩在线观看一区 | 国产在线高清 | 亚洲一区欧美激情 | 怡红院久久 | 99热精品免费观看 | 精品视频成人 | 国产一区视频在线播放 | 色狠狠综合 | 国产精品美女久久久 | 国产精品美女视频网站 | 欧美精品免费视频 | www五月 | 日韩在线视频网址 | 免费a级毛片在线看 | 尤物九九久久国产精品的分类 | 色爱区综合激月婷婷 | 免费91麻豆精品国产自产在线观看 | 在线观看免费av网 | 亚洲国产高清视频 | 一级理论片在线观看 | 91成人免费看片 | 久久成人麻豆午夜电影 | 婷婷色 亚洲 | 中文字幕在线播出 | 性日韩欧美在线视频 | a在线v| 婷婷在线看 | 国产精品一区二区三区电影 | 国产成人精品一区二区 | 13日本xxxxxⅹxxx20 | 欧美一级性 | 国产成人精品一区在线 | 天天搞天天干 | 奇米先锋 | 精品国产一二三四区 | 中文字幕一区二区三区四区 | 久久精品播放 | 婷婷久月 | 永久免费的啪啪网站免费观看浪潮 | 精品一区精品二区高清 | 久久精品3 | 亚洲午夜不卡 | 国产精品久久久av | 免费看片黄色 | 中文字幕久久精品亚洲乱码 | 久久久久久久久久久影视 | 丁香视频全集免费观看 | 九色视频网 | 天天拍天天草 | 国产手机视频精品 | 国产97av | 久久成人资源 | 国产精品久久久久久久久久免费看 | 亚洲精品在线视频网站 | 美女视频免费一区二区 | 黄色的网站免费看 | 最近中文字幕完整视频高清1 | 国产精品wwwwww| 日韩av网站在线播放 | 色黄视频免费观看 | 日韩专区 在线 | 国产精品免费不 | 91成人免费看片 | 激情欧美xxxx | 在线国产日韩 | 国产亚洲精品综合一区91 | 久久久久久久99精品免费观看 | 亚洲国产剧情 | 四虎国产精品成人免费4hu | 亚洲国产剧情av | 亚洲精品国产区 | 国产色婷婷在线 | 久久久久97国产 | 久久精品亚洲精品国产欧美 |