青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

1. BitBlt

我想做Windows開(kāi)發(fā)應(yīng)該都知道這個(gè)API, 它能實(shí)現(xiàn)DC間的內(nèi)容拷貝, 如果我們把源DC指定成Monitor DC或是桌面DC, 它就能實(shí)現(xiàn)抓屏功能。
對(duì)于通過(guò)這種方式的抓屏, 有2點(diǎn)需要特別提醒:
a. 在XP下我們可以通過(guò)最后的拷貝標(biāo)志來(lái)控制是否拷貝layered window, 只有SRCCPY表示拷貝內(nèi)容不包含layered window, 如果是SRCCPY | CAPTUREBLT表示拷貝包括Layered window在內(nèi)的所有窗口。 這個(gè)標(biāo)志在Vista之后的系統(tǒng)(win7/win8),開(kāi)啟DWM的情況下, 已經(jīng)失效, 因?yàn)檫@種情況下所有的窗口都是layered window.
b. 這種方式的抓屏在 Vista之后, 開(kāi)啟DWM的情況下, 抓屏速度非常慢(30ms +), 具體原因不知道是因?yàn)橄到y(tǒng)沒(méi)有緩存整個(gè)屏幕的數(shù)據(jù)還是GPU向內(nèi)存拷貝數(shù)據(jù)太慢了, 有知道的朋友可以提示下。

2. Mirror driver

這種方法應(yīng)該是Win8之前最高效的抓屏方法, 也是微軟推薦的遠(yuǎn)程桌面共享方案,它通過(guò)創(chuàng)建虛擬鏡像驅(qū)動(dòng), 直接獲取最終屏幕變化數(shù)據(jù)。
該方法也有一些缺點(diǎn):
a. 涉及到驅(qū)動(dòng)安裝, 技術(shù)難度大, 系統(tǒng)權(quán)限要求也高
b. Win8 上該方案已經(jīng)失效, 但是還是有方法的, 參見(jiàn) Remote Display Drivers


3. GDI hook

這種方法應(yīng)該說(shuō)是XP時(shí)代比較流行的抓屏方法, 因?yàn)樗械睦L制都是通過(guò)GDI32.dll中的繪圖函數(shù)來(lái)實(shí)現(xiàn)的, 所以我們只要攔截了這些函數(shù), 系統(tǒng)的所有繪制就都讓我們控制了。這種方法應(yīng)該來(lái)說(shuō)也是一種挺高效的抓屏方法,屏幕的變化也都能讓我們攔截到, 同時(shí)因?yàn)楹枚嗬L圖函數(shù)是以矢量方式實(shí)現(xiàn)的,所有抓到的數(shù)據(jù)包非常小, 即使在低帶寬下也效果挺好。
下面是該方法的一些缺點(diǎn):
a. Hook技術(shù)本身就有其復(fù)雜性和不穩(wěn)定性, 尤其是Hook所有進(jìn)程
b. Vista只有越來(lái)越多程序采用D2D/D3D繪制, GDI Hook對(duì)這些繪制無(wú)能為力。
c. Vista之后UAC打開(kāi)的情況下, 如果我們的程序權(quán)限不夠高, Hook不到更高權(quán)限的程序。

4. Windows Media API

Windows Media 9.0 支持用Windows Media Encoder 9 API來(lái)抓屏。它有一個(gè)編碼器叫Windows Media Video 9 Screen codec,特別為抓屏優(yōu)化過(guò)。Windows Media Encoder API提供了一個(gè)IWMEncoder2接口可以用來(lái)高效地捕捉屏幕圖像。
因?yàn)閷?duì)這組API不熟, 這種抓屏方法我也沒(méi)嘗試過(guò), 具體可見(jiàn)Various methods for capturing the screen, 感覺(jué)這種方法的最大缺點(diǎn)是用戶(hù)機(jī)器需要安裝Windows Media Encoder 9。

5. DirectX

每個(gè)DirectX程序都包含一個(gè)被我們稱(chēng)作緩沖的內(nèi)存區(qū)域,其中保存了和該程序有關(guān)的顯存內(nèi)容,這在程序中被稱(chēng)作后臺(tái)緩沖(Back Buffer),有些程序有不止一個(gè)的后臺(tái)緩沖。還有一個(gè)緩沖,在默認(rèn)情況下每個(gè)程序都可以訪問(wèn)-前臺(tái)緩沖。前臺(tái)緩沖保存了和桌面相關(guān)的顯存內(nèi)容,實(shí)質(zhì)上就是屏幕圖像。 我們的程序通過(guò)訪問(wèn)前臺(tái)緩沖就可以捕捉到當(dāng)前屏幕的內(nèi)容。上面的列子中也包含該方法的實(shí)現(xiàn), 是基于DirectX9的,我們可以參考下, 據(jù)我測(cè)試該方法在DWM打開(kāi)的情況下抓整屏也要30ms左右。Vista之后的DirectX 10/11相對(duì)于DirectX 9 已經(jīng)發(fā)生非常大的變化, 直接用新的接口上面的代碼未必能正常工作。

6. PrintWindow

該方法本身不能直接做為一種抓屏方法, 但是有時(shí)候我們要獲取某個(gè)窗口的內(nèi)容, 即使他被其他窗口覆蓋著, 這時(shí)候這個(gè)函數(shù)就很有用。該方該調(diào)用法的原理是通過(guò)給目標(biāo)窗口發(fā)送WM_PRINT或是WM_PRINTCLIENT消息, 所以如果目標(biāo)窗口沒(méi)有響應(yīng), 該調(diào)用可能會(huì)阻塞抓屏線(xiàn)程, 這種情況下抓屏前最好先用SendMessageTimeout檢測(cè)目標(biāo)窗口是否有響應(yīng)。另外該方法也抓不到D3D窗口的內(nèi)容。

7. DWM/Dxgi hook

Vista之后微軟放棄了XP時(shí)代的XPDM, 采用了全新的WDDM視屏驅(qū)動(dòng)模型, 現(xiàn)在Win8.1上已經(jīng)是WDDM1.3.
Vista之后底層所有的渲染都是基于D3D技術(shù), 另外我們也知道系統(tǒng)在DWM.exe里進(jìn)行窗口邊框的繪畫(huà)和合成, 所以理論上我們可以通過(guò)HOOK DWM/D3D/DXGI,攔截到整個(gè)系統(tǒng)的屏幕內(nèi)容。當(dāng)然作為一種Hook技術(shù), 它也有上面GDI Hook類(lèi)似的問(wèn)題。

8. Magnification

這組API是微軟Vista之后開(kāi)放給我們開(kāi)發(fā)放大鏡程序的, 它里面提供了一個(gè)API讓我們攔截到顯示的內(nèi)容, 可惜的是這個(gè)關(guān)鍵的API  MagSetImageScalingCallback 微軟已經(jīng)宣布作廢。另外該方式的抓屏效率也不高, 整屏需要60 ms 左右。

9. Desktop Duplication  

這是微軟Win8 上宣布放棄Mirror driver之后推薦采用的抓屏技術(shù), 全部基于D3D/DXGI技術(shù), 效率非常高, 并且包含變化區(qū)域和屏幕鼠標(biāo)光標(biāo)。它的缺點(diǎn)是沒(méi)法抓取某個(gè)窗口的內(nèi)容 。


10. GetWindowDC 

該方法和PrintWindow類(lèi)似,但是它沒(méi)有PrintWindow的權(quán)限問(wèn)題, 也沒(méi)有超時(shí)問(wèn)題。
這種抓屏方法在Win7/Win8  DWM打開(kāi)的情況下抓屏,結(jié)果會(huì)顛覆我們XP時(shí)代的知識(shí), 因?yàn)榧词勾翱诒桓采w, 它也可以正確抓取到被覆蓋窗口下的內(nèi)容, WebRTC正是用這種方式來(lái)Share  Application的。
它的主要問(wèn)題是有些窗口抓到的內(nèi)容不包含非客戶(hù)區(qū),有些窗口比如任務(wù)欄的Thumbnail窗口會(huì)抓不到內(nèi)容。


最后簡(jiǎn)單總結(jié)下 , 我們可以看到Windows系統(tǒng)上基本沒(méi)有一種通用的抓屏技術(shù)可以高效的抓取所有的系統(tǒng)(XP/Win7/Win8), 很大一部原因是操作系統(tǒng)的顯示驅(qū)動(dòng)模型在從XPDM向WDDM轉(zhuǎn)變, 應(yīng)用層的API也在從GDI向D3D轉(zhuǎn)變 。 相對(duì)于Linux的穩(wěn)定, Window的不斷發(fā)展和進(jìn)步, 對(duì)開(kāi)發(fā)人員究竟是喜是悲?

posted on 2013-12-01 22:04 Richard Wei 閱讀(39231) 評(píng)論(16)  編輯 收藏 引用 所屬分類(lèi): windows desktop

FeedBack:
# re: Windows桌面共享中一些常見(jiàn)的抓屏技術(shù)
2013-12-01 22:17 | 萬(wàn)連文
遠(yuǎn)程桌面協(xié)議(RDP) 不知道算不算?  回復(fù)  更多評(píng)論
  
# re: Windows桌面共享中一些常見(jiàn)的抓屏技術(shù)
2013-12-02 10:46 | Richard Wei
@萬(wàn)連文
RDP協(xié)議是不公開(kāi)的,他主要定義了圖像的壓縮,加密,傳輸和遠(yuǎn)程控制等方法, 本身沒(méi)有定義屏幕采樣方法,微軟的遠(yuǎn)程桌面用的應(yīng)該是mirror driver的抓屏。  回復(fù)  更多評(píng)論
  
# re: Windows桌面共享中一些常見(jiàn)的抓屏技術(shù)[未登錄](méi)
2013-12-02 14:43 | Q
Mirror驅(qū)動(dòng)在win8上不是失效,只是默認(rèn)沒(méi)有安裝,還是可以用的  回復(fù)  更多評(píng)論
  
# re: Windows桌面共享中一些常見(jiàn)的抓屏技術(shù)
2013-12-02 18:57 | Richard Wei
@Q
多謝指正, 因?yàn)榫唧w我也沒(méi)試過(guò), 只是看微軟文檔得出的結(jié)論,可看這里第一句:http://msdn.microsoft.com/en-us/library/windows/desktop/hh404487(v=vs.85).aspx  回復(fù)  更多評(píng)論
  
# re: Windows桌面共享中一些常見(jiàn)的抓屏技術(shù)
2014-02-12 16:40 | allen
1,BitBlt
10. GetWindowDC

這兩個(gè)不是同一種方法嗎?  回復(fù)  更多評(píng)論
  
# re: Windows桌面共享中一些常見(jiàn)的抓屏技術(shù)
2014-02-12 20:02 | Richard Wei
@allen
BitBlt主要針對(duì)Monitor DC, 抓某個(gè)Monitor的屏幕內(nèi)容
WindowDC可以抓任何一個(gè)窗口的內(nèi)容, 當(dāng)然抓時(shí)也要BitBlt  回復(fù)  更多評(píng)論
  
# re: Windows桌面共享中一些常見(jiàn)的抓屏技術(shù)
2015-07-18 09:40 | 龍門(mén)外的魚(yú)
絕對(duì)的受教了,最近正愁如何截取一個(gè)程序的屏幕  回復(fù)  更多評(píng)論
  
# re: Windows桌面共享中一些常見(jiàn)的抓屏技術(shù)
2015-10-27 22:03 | vigers
第一種方法剛好解決我的程序有些窗口無(wú)法獲取的問(wèn)題  回復(fù)  更多評(píng)論
  
# re: Windows桌面共享中一些常見(jiàn)的抓屏技術(shù)[未登錄](méi)
2016-07-11 22:07 | 12
感覺(jué)不如佳美迅的桌面共享軟件方便  回復(fù)  更多評(píng)論
  
# re: Windows桌面共享中一些常見(jiàn)的抓屏技術(shù)
2016-07-11 22:08 | 34
談到桌面共享,沒(méi)有哪家技術(shù)能比連通寶的流暢穩(wěn)定  回復(fù)  更多評(píng)論
  
# re: Windows桌面共享中一些常見(jiàn)的抓屏技術(shù)
2016-07-11 22:09 | 34
不管什么類(lèi)型的遠(yuǎn)程桌面共享技術(shù)都沒(méi)有RHUB的方便好用  回復(fù)  更多評(píng)論
  
# re: Windows桌面共享中一些常見(jiàn)的抓屏技術(shù)
2016-07-11 22:10 | 34
誰(shuí)說(shuō)沒(méi)有,turbomeeting的效果就很棒  回復(fù)  更多評(píng)論
  
# re: Windows桌面共享中一些常見(jiàn)的抓屏技術(shù)
2016-07-12 14:26 | chuanhui812
你采用了那種方法,抓屏的速率怎么樣@龍門(mén)外的魚(yú)
  回復(fù)  更多評(píng)論
  
# re: Windows桌面共享中一些常見(jiàn)的抓屏技術(shù)
2016-08-11 22:51 | 龍門(mén)外的魚(yú)
大神。我采用
::UpdateWindow(hWnd);
::RedrawWindow(hWnd,NULL,NULL,RDW_INVALIDATE|RDW_ERASE|RDW_ALLCHILDREN|RDW_FRAME);
::PrintWindow(hWnd,T_hMemDC,0);
的方式截屏,win7 aero主題下有些電腦截不到,有些可以而且都可以遮擋。basic主題下幾乎所有電腦都能截到,但是不穩(wěn)定,十次里五次失敗,更嚴(yán)重的是,運(yùn)行一段時(shí)間后,一旦失敗,就連續(xù)的十幾秒到十幾分鐘的失敗。請(qǐng)問(wèn)大神我哪里沒(méi)有注意到。應(yīng)該怎么修改。我截圖頻率不高。另,截圖的程序是opengl的  回復(fù)  更多評(píng)論
  
# re: Windows桌面共享中一些常見(jiàn)的抓屏技術(shù)[未登錄](méi)
2016-08-11 23:14 | richard
@龍門(mén)外的魚(yú)
如果目標(biāo)是抓某個(gè)被蓋住的窗口內(nèi)容,basic下只能printwindow(不用你上面這么麻煩,直接printwindow就好了),areo下用博文中的最后一種方法  回復(fù)  更多評(píng)論
  
# re: Windows桌面共享中一些常見(jiàn)的抓屏技術(shù)[未登錄](méi)
2016-08-11 23:22 | richard
@龍門(mén)外的魚(yú)
如果窗口沒(méi)蓋住,可以抓整個(gè)屏幕后再扣圖。另外printwindow會(huì)block我們的程序,調(diào)用前可以給目標(biāo)窗口sendmessagetimeout一個(gè)wm_null消息以判斷對(duì)方程序有沒(méi)有掛起  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            中日韩美女免费视频网址在线观看 | 国产精品99久久久久久久久| 美腿丝袜亚洲色图| 欧美在线日韩| 久久午夜精品一区二区| 欧美激情视频在线免费观看 欧美视频免费一| 久久综合久久88| 亚洲国产美女精品久久久久∴| 麻豆精品一区二区综合av| 免费h精品视频在线播放| 亚洲电影免费观看高清完整版在线观看 | 亚洲第一区在线观看| 欧美高清在线精品一区| 亚洲国产福利在线| 亚洲婷婷在线| 久久理论片午夜琪琪电影网| 欧美精品午夜| 国模套图日韩精品一区二区| 韩国精品久久久999| 日韩视频免费在线观看| 午夜欧美精品久久久久久久| 久久视频精品在线| 亚洲精品乱码| 久久精品国产视频| 欧美日韩亚洲一区二区| 国语自产精品视频在线看一大j8| 日韩亚洲不卡在线| 久久久久国产精品午夜一区| 亚洲国产国产亚洲一二三| 亚洲一区三区在线观看| 美女主播一区| 国产精自产拍久久久久久| 亚洲国内自拍| 久久青草欧美一区二区三区| 99在线|亚洲一区二区| 久久三级福利| 国产香蕉久久精品综合网| 日韩午夜在线电影| 美女网站在线免费欧美精品| 亚洲视频网在线直播| 欧美福利视频| 好吊日精品视频| 午夜精品视频在线观看一区二区 | 午夜国产精品视频免费体验区| 久久视频在线免费观看| 一区二区三区av| 欧美精品一区二区在线播放| 伊人久久综合| 久久久免费精品视频| 亚洲一区免费视频| 国产精品v欧美精品v日本精品动漫| 亚洲精品久久久久久久久久久久 | 亚洲精品少妇30p| 免费久久久一本精品久久区| 国产在线观看一区| 欧美在线亚洲| 午夜精品久久久久久久蜜桃app | 欧美日韩一二三四五区| 欧美日韩国产黄| 欧美激情综合色| 久久精品一区蜜桃臀影院| 国产日韩精品一区二区| 午夜伦理片一区| 亚洲欧美影院| 国产麻豆精品在线观看| 性感少妇一区| 午夜视频一区在线观看| 国产麻豆日韩| 久久久五月婷婷| 乱中年女人伦av一区二区| 亚洲国产精品一区二区www在线| 欧美sm视频| 欧美高清在线精品一区| 一本大道av伊人久久综合| 亚洲视频二区| 国产美女一区二区| 乱码第一页成人| 久久人人97超碰国产公开结果| 原创国产精品91| 亚洲精品国产精品国自产观看| 欧美日韩美女在线观看| 先锋影音国产精品| 久久精品成人一区二区三区| 亚洲人成毛片在线播放| 日韩亚洲欧美成人| 国产婷婷色一区二区三区在线| 免费高清在线一区| 欧美日韩免费一区二区三区| 亚洲欧美在线免费观看| 久久久久久久久久码影片| 亚洲老司机av| 欧美亚洲在线观看| 亚洲精品乱码久久久久久按摩观| 洋洋av久久久久久久一区| 国产欧美日韩在线| 亚洲国产二区| 极品少妇一区二区三区| 亚洲免费观看高清完整版在线观看熊 | 欧美亚洲专区| 亚洲精品久久嫩草网站秘色| 亚洲中字在线| 亚洲精选一区二区| 欧美有码在线观看视频| 99一区二区| 久久久久久久综合狠狠综合| 亚洲午夜激情| 欧美电影在线观看完整版| 久久成人资源| 国产精品二区在线观看| 欧美激情精品久久久久久| 国产午夜精品麻豆| 一区二区三区不卡视频在线观看 | 在线成人欧美| 一区二区三区欧美激情| 亚洲电影免费在线观看| 亚洲免费综合| 亚洲一二三区精品| 欧美成人69av| 可以免费看不卡的av网站| 国产精品国色综合久久| 91久久久久久| 亚洲国产日韩欧美综合久久| 性感少妇一区| 欧美在线视频一区二区三区| 国产精品a久久久久| 亚洲精品乱码久久久久久日本蜜臀 | 亚洲破处大片| 亚洲黑丝在线| 久久久久国产精品人| 久久国产精品72免费观看| 欧美四级电影网站| 日韩一级不卡| 夜夜爽夜夜爽精品视频| 欧美精品观看| 99成人在线| 一个色综合av| 欧美日韩国产小视频在线观看| 亚洲激情在线视频| 日韩午夜精品| 欧美性猛交99久久久久99按摩| 亚洲美女在线视频| 亚洲一区二区成人| 国产精品成人一区二区| 亚洲天堂av在线免费观看| 亚洲女女女同性video| 国产精品你懂的在线欣赏| 亚洲欧美日韩国产综合在线| 午夜精品久久久久影视| 国产亚洲成av人片在线观看桃| 欧美一级久久久| 免费日韩成人| 日韩视频永久免费| 欧美日韩高清区| 亚洲男人的天堂在线aⅴ视频| 久久精品国产69国产精品亚洲 | 久久精品导航| 亚洲经典在线| 亚洲欧美成人网| 国产视频一区在线观看| 久久天堂精品| 一本久久综合亚洲鲁鲁| 久久激情综合网| 91久久综合亚洲鲁鲁五月天| 欧美视频亚洲视频| 久久福利一区| 99热免费精品在线观看| 久久精彩视频| 99国产精品国产精品久久| 99国产精品| 亚洲欧美在线网| 国产精品网站视频| 久久青草欧美一区二区三区| 亚洲精选一区二区| 久久国产精品色婷婷| 亚洲人成在线免费观看| 国产精品乱码一区二区三区| 久久久精品午夜少妇| 一本大道久久a久久精品综合| 久热国产精品| 亚洲一区国产视频| 亚洲第一精品久久忘忧草社区| 欧美小视频在线| 欧美电影在线| 久久青青草原一区二区| 亚洲午夜精品久久久久久浪潮| 欧美大片免费观看在线观看网站推荐| 亚洲永久字幕| 亚洲最新视频在线播放| 在线观看国产精品网站| 国产精品av久久久久久麻豆网| 久久综合婷婷| 久久av免费一区| 宅男噜噜噜66一区二区66| 欧美激情第六页| 另类亚洲自拍| 久久精品国产视频| 亚洲欧美视频一区| 亚洲天堂av高清| 一区二区欧美在线| 亚洲全部视频|