亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種截圖方法,及裝置制造方法

文檔序號:6492424閱讀:285來源:國知局
一種截圖方法,及裝置制造方法
【專利摘要】本發(fā)明實施例公開了一種截圖方法,及裝置,本發(fā)明實施例方法包括:在目標軟件啟動后,確定是否有具有圖像顯示功能的模塊被目標軟件所加載;若有,則向所述顯示功能的模塊注入全局鉤子;在接收到截圖指令后,通過全局鉤子進行截圖。以上方案,在確定具有圖像顯示功能的模塊被目標軟件所加載后,向顯示功能的模塊注入全局鉤子,通過局鉤子進行截圖,在實現(xiàn)截圖的過程中可以不影響被截圖軟件進程,提高截圖方案的應(yīng)用范圍,并且簡單智能。并且可以僅截取被截圖軟件相關(guān)的圖像內(nèi)容避免其它例如背景元素的截入,方便快捷。
【專利說明】—種截圖方法,及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件【技術(shù)領(lǐng)域】,特別涉及一種截圖方法,及裝置。
【背景技術(shù)】
[0002]近年來,隨著我國互聯(lián)網(wǎng)產(chǎn)業(yè)的不斷進步,個人電腦、智能終端等設(shè)備的普及率越來越高,用戶對設(shè)備的應(yīng)用需求也多種多樣。一些軟件在運行過程中會有各種圖像顯示,用戶時常需要截取這些圖像,這類圖像截取的的需求也越來越廣泛。
[0003]以下軟件以網(wǎng)絡(luò)游戲軟件為例進行需求性說明,需要說明的是:本發(fā)明實施例中的軟件可以是在運行過程中有圖像顯示的任意軟件,并不限于網(wǎng)絡(luò)游戲軟件。
[0004]目前網(wǎng)絡(luò)游戲產(chǎn)業(yè)呈現(xiàn)快速穩(wěn)定的發(fā)展態(tài)勢,不僅形成日漸完善的產(chǎn)業(yè)鏈和相對成熟的產(chǎn)業(yè)發(fā)展環(huán)境,而且本土原創(chuàng)網(wǎng)絡(luò)游戲在實現(xiàn)由量變到質(zhì)變跨越。網(wǎng)絡(luò)游戲在游戲品種、數(shù)量、題材類型、市場規(guī)模和從業(yè)人員數(shù)量等方面,都實現(xiàn)了持續(xù)快速的增長。由單一大型多人在線到網(wǎng)頁游戲、社區(qū)游戲、手機網(wǎng)游等新品種不斷的涌現(xiàn)。網(wǎng)絡(luò)游戲強調(diào)多人同時登錄服務(wù)器共同賺取在線經(jīng)驗,因此在用戶之間經(jīng)驗分享的需求就變得很突出。在游戲過程中快速、簡單、智能,并且不影響游戲進程的情況下截圖得到照片并將照片分享出去,則能夠使用戶在玩網(wǎng)絡(luò)游戲的同時便捷的與周圍的人分享網(wǎng)絡(luò)游戲的經(jīng)驗與樂趣,同時不對游戲過程產(chǎn)生干擾,保持了游戲原有的用戶體驗。
[0005]發(fā)明人在實現(xiàn)本發(fā)明實施例的過程中發(fā)現(xiàn):目前針對軟件截圖的方案主要有兩類,一類是軟件本身自帶截圖的功能,但是這類截圖方案大部分都是針對當前軟件自身的,與該軟件自身的結(jié)構(gòu)密切相關(guān),缺乏廣泛的應(yīng)用場景因此具有一定的局限性。另外一類是軟件自身并不提供截圖的功能,用戶為了實現(xiàn)截圖這個應(yīng)用需求采用第三方的截圖軟件進行截圖,由于目前的截圖軟件功能單一而且并針對被截圖軟件專門設(shè)計的,會對被截圖軟件的進程產(chǎn)生干擾,因此也存在一定的局限性。綜上所述,目前的截圖方案無法實現(xiàn)快速、簡單、智能在不影響被截圖軟件進程的前提下截圖,應(yīng)用范圍存在局限。

【發(fā)明內(nèi)容】

[0006]本發(fā)明實施例提供了一種截圖方法,及裝置,用于實現(xiàn)快速、簡單、智能在不影響被截圖軟件進程的前提下截圖,提高截圖方案的應(yīng)用范圍,并且簡單智能,實現(xiàn)快速簡單智能的截圖。
[0007]—種截圖方法,包括:
[0008]在目標軟件啟動后,確定是否有具有圖像顯示功能的模塊被目標軟件所加載;若有,則向所述顯示功能的模塊注入全局鉤子;
[0009]在接收到截圖指令后,通過全局鉤子進行截圖。
[0010]一種截圖裝置,包括:
[0011]加載確定單元,用于在目標軟件啟動后,確定是否有具有圖像顯示功能的模塊被目標軟件所加載;[0012]鉤子注入單元,用于若加載確定單元確定結(jié)果為有,則向所述顯示功能的模塊注入全局鉤子;
[0013]指令接收單元,用于接收截圖指令;
[0014]截圖執(zhí)行單元,用于在指令接收單元接收到截圖指令后,通過全局鉤子進行截圖。
[0015]從以上技術(shù)方案可以看出,本發(fā)明實施例具有以下優(yōu)點:在確定具有圖像顯示功能的模塊被目標軟件所加載后,向顯示功能的模塊注入全局鉤子,通過局鉤子進行截圖,在實現(xiàn)截圖的過程中可以不影響被截圖軟件進程,提高截圖方案的應(yīng)用范圍,并且簡單智能。并且可以僅截取被截圖軟件相關(guān)的圖像內(nèi)容避免其它例如背景元素的截入,方便快捷。
【專利附圖】

【附圖說明】
[0016]為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡要介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域的普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0017]圖1為本發(fā)明實施例方法流程示意圖;
[0018]圖2為本發(fā)明實施例另一方法流程示意圖;
[0019]圖3為本發(fā)明實施例裝置結(jié)構(gòu)示意圖;
[0020]圖4為本發(fā)明實施例裝置結(jié)構(gòu)示意圖;
[0021]圖5為本發(fā)明實施例裝置結(jié)構(gòu)示意圖;
[0022]圖6為本發(fā)明實施例裝置結(jié)構(gòu)示意圖;
[0023]圖7為本發(fā)明實施例裝置結(jié)構(gòu)示意圖。
【具體實施方式】
[0024]為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明作進一步地詳細描述,顯然,所描述的實施例僅僅是本發(fā)明一部份實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護的范圍。
[0025]本發(fā)明實施例提供了一種截圖方法,如圖1所示,包括:
[0026]101:在目標軟件啟動后,確定是否有具有圖像顯示功能的模塊被目標軟件所加載;若有,則向上述顯示功能的模塊注入全局鉤子;
[0027]以游戲軟件為例,目前市面上絕大多數(shù)的網(wǎng)絡(luò)游戲都是使用DirectX (Directextension,多媒體編程接口)技術(shù)進行圖像顯示,由C++編程語言實現(xiàn),遵循COM (組件對象模型),被廣泛應(yīng)用于各種圖像處理軟件的的開發(fā)。DirectX是這樣一組技術(shù):旨在使基于計算機成為運行和顯示具有豐富多媒體元素(例如全色圖形、視頻、三維(3D)動畫和豐富音頻)的應(yīng)用程序的理想平臺。DirectX是由很多APKApplication Programming Interface,應(yīng)用程序編程接口)組成的,按照性質(zhì)分類,可以分為四大部分,顯示部分、聲音部分、輸入部分和網(wǎng)絡(luò)部分。本實施例可以針對在網(wǎng)絡(luò)游戲中占有重要比重的DirectX中的顯示部分,分為DirectDraw (Ddraw, DirectX中的關(guān)于視頻輸入輸出的基本部分)和Direct3D(D3D,顯示程序接口),前者主要負責(zé)二維(2D)圖像加速,后者則主要負責(zé)3D效果的顯示,比如各種3D畫面中的場景和人物等,都是使用了 DirectX的Direct3D。如果目標軟件是基于DirectX的,那么上述確定是否有具有圖像顯示功能的模塊被目標軟件所加載,則可以確定是否有D3D8.dll或者D3D9.dll等模塊被游戲主函數(shù)加載。如果有,則可以確定此啟動的游戲是用DirectX技術(shù)進行圖像界面的渲染的。
[0028]如果沒有圖像顯示功能的模塊被目標軟件所加載,那么要么沒有圖像顯示不需要進行截圖,要么就是本實施例方案還不支持這種目標軟件的截圖,會導(dǎo)致截圖失敗,對于沒有圖像顯示功能的模塊被目標軟件所加載的情況,本發(fā)明實施例不予限定。
[0029]對目標軟件進行全局鉤子的注入,一般可以通過操作系統(tǒng)實現(xiàn),具體注入過程本發(fā)明實施例不予限定。
[0030]102:在接收到截圖指令后,通過全局鉤子進行截圖。
[0031]以上實現(xiàn)方案,在確定具有圖像顯示功能的模塊被目標軟件所加載后,向顯示功能的模塊注入全局鉤子,通過局鉤子進行截圖,在實現(xiàn)截圖的過程中可以不影響被截圖軟件進程,提高截圖方案的應(yīng)用范圍,并且簡單智能。并且可以僅截取被截圖軟件相關(guān)的圖像內(nèi)容避免其它例如背景元素的截入,方便快捷。
[0032]更具體地,本發(fā)明實施例給出了適應(yīng)于DirectX的截圖具體實現(xiàn)方式,上述在接收到截圖指令后,通過全局鉤子進行截圖包括:通過全局鉤子獲取圖像顯示功能模塊的輸出的圖像,并將圖像發(fā)送給應(yīng)用程序編程接口,進行圖像顯示;若接收到截圖指令,則截取通過全局鉤子獲取到的當前的圖像。
[0033]進一步地,本發(fā)明實施例為了保證截圖時先執(zhí)行截圖邏輯然后執(zhí)行目標軟件相關(guān)圖像的顯示,達到及時準確的截圖,本發(fā)明實施例給出了如下解決方案:在向上述顯示功能的模塊注入全局鉤子之后還包括:將目標軟件的的主函數(shù)中標記為有截圖進程加載了上述主函數(shù)。
[0034]更具體地,本發(fā)明實施例還給出了使用庫函數(shù)鉤子(Hook)的具體實現(xiàn)方式:上述通過全局鉤子獲取圖像顯示功能模塊的輸出的圖像包括:通過全局鉤子,確定目標函數(shù),并通過目標函數(shù)的替代函數(shù)分配新內(nèi)存,然后拷貝目標函數(shù)的圖像數(shù)據(jù)到上述新內(nèi)存;上述當前的圖像為接收到截圖指令時,上述新內(nèi)存中的圖像。
[0035]進一步地,本發(fā)明實施例還給出了使用前述截圖方案并且不影響目標軟件相關(guān)圖像顯示的具體實現(xiàn)方案:上述通過目標函數(shù)的替代函數(shù)分配新內(nèi)存之前還包括:通過全局鉤子,確定將要攔截的目標函數(shù)的函數(shù)地址,并復(fù)制上述函數(shù)地址的目標函數(shù);上述將圖像發(fā)送給應(yīng)用程序編程接口,進行圖像顯示包括:在拷貝目標函數(shù)的圖像數(shù)據(jù)到上述新內(nèi)存之后,退出上述替代函數(shù),恢復(fù)復(fù)制的上述目標函數(shù)并運行。
[0036]優(yōu)選地,上述替代函數(shù)為:新編寫的開發(fā)庫函數(shù)。使用開發(fā)庫函數(shù)可以實現(xiàn)與操作系統(tǒng)的平滑對接,提高兼容性。
[0037]優(yōu)選地,由于運行目標軟件所采用的操作系統(tǒng)可能存在差異,本發(fā)明實施例還給出了解決因這種差異可能導(dǎo)致確定目標函數(shù)的地址可能出現(xiàn)的錯誤的具體實現(xiàn)方式:上述確定將要攔截的目標函數(shù)的函數(shù)地址包括:利用編程接口 DirectX提供的應(yīng)用程序編程接口 API函數(shù),創(chuàng)建用于圖像顯示的接口 API函數(shù)的接口對象;利用上述接口對象導(dǎo)出顯示程序接口的設(shè)備對象,并依據(jù)設(shè)備對象的虛函數(shù)表的首地址,以及API函數(shù)的導(dǎo)出函數(shù)的位置確定目標函數(shù)的函數(shù)地址。[0038]以上實施例,給出了在接收到截圖指令后,通過全局鉤子進行截圖的各種實現(xiàn)方式的舉例,后續(xù)實施例中目標軟件將以網(wǎng)絡(luò)游戲為例進行更詳細的舉例說明。
[0039]進一步地,本發(fā)明實施例還給出了按需截圖的具體實現(xiàn)方式,在截圖完成后還包括:按照用戶指令將截圖得到的圖像數(shù)據(jù)轉(zhuǎn)換為上述用戶指令指定規(guī)格參數(shù)的圖像。
[0040]進一步地,本發(fā)明實施例還給出了按需截圖以后的使用實現(xiàn)方式舉例,上述方法還包括:將用戶指令指定規(guī)格參數(shù)的圖像,發(fā)送至用戶指令指定的地址。上述指定的地址可以微博、網(wǎng)絡(luò)空間、博客等各種表現(xiàn)形式的地址,對于具體的地址表現(xiàn)形式本發(fā)明實施例不予限定。
[0041]以下實施例將目標軟件將以網(wǎng)絡(luò)游戲為例進行更詳細的舉例說明,主要分為四個部分:一、網(wǎng)絡(luò)游戲的識別,二、游戲界面的截取,三、生成游戲屏幕截圖并快速分享,四、截圖流程綜述。
[0042]一、網(wǎng)絡(luò)游戲的識別
[0043]以游戲軟件為例,目前市面上絕大多數(shù)的網(wǎng)絡(luò)游戲都是使用DirectX (Directextension,多媒體編程接口)技術(shù)進行圖像顯示,由C++編程語言實現(xiàn),遵循COM(組件對象模型),被廣泛應(yīng)用于各種圖像處理軟件的的開發(fā)。DirectX是這樣一組技術(shù):旨在使基于計算機成為運行和顯示具有豐富多媒體元素(例如全色圖形、視頻、三維(3D)動畫和豐富音頻)的應(yīng)用程序的理想平臺。DirectX是由很多APKApplication Programming Interface,應(yīng)用程序編程接口)組成的,按照性質(zhì)分類,可以分為四大部分,顯示部分、聲音部分、輸入部分和網(wǎng)絡(luò)部分。本實施例可以針對在網(wǎng)絡(luò)游戲中占有重要比重的DirectX中的顯示部分,分為DirectDraw (Ddraw, DirectX中的關(guān)于視頻輸入輸出的基本部分)和Direct3D(D3D,顯示程序接口),前者主要負責(zé)二維(2D)圖像加速,后者則主要負責(zé)3D效果的顯示,比如各種3D畫面中的場景和人物等,都是使用了 DirectX的Direct3D。如果目標軟件是基于DirectX的,那么上述確定是否有具有圖像顯示功能的模塊被目標軟件所加載,則可以確定是否有D3D8.dll或者D3D9.dll等模塊被游戲主函數(shù)加載。如果有,則可以確定此啟動的游戲是用DirectX技術(shù)進行圖像界面的渲染的。
[0044]本發(fā)明實施例中的截圖進程在游戲啟動的時候會對游戲中加載的顯示模塊(SP:具有圖像顯示功能的模塊)進行鑒別,如果含有D3D8.dll或者D3D9.dll等模塊被游戲主函數(shù)加載,就可以判定此啟動的游戲是用DirectX技術(shù)進行圖像界面的渲染的,這時就可以啟動截圖進程,如果無法檢測到這兩個模塊的加載,此時截圖進程就可以立即退出,達到智能識別網(wǎng)絡(luò)游戲的目的。
[0045]二、游戲界面的截取
[0046]當完成前一步網(wǎng)絡(luò)游戲的識別以后,截圖進程已經(jīng)在后臺啟動并運行,截圖進程的主要工作原理是采用視窗操作系統(tǒng)的鉤子(hook)機制,在截圖進程隨著網(wǎng)絡(luò)游戲軟件啟動的過程中會向游戲軟件的進程中的顯示模塊,例如:D3D8.dll或者D3D9.dll進行hook注入,本發(fā)明實施例可以采用WH_CBT類型的全局鉤子,在游戲進程啟動的時候視窗操作系統(tǒng)會把包含全局鉤子的dll (Dynamic Link Library,動態(tài)鏈接庫)向所有運行的進程進行注入,這就可以保證照相功能的子進程能順利進入游戲進程。包含全局鉤子的dll在注入到游戲進程后,需要在注入的時候可先執(zhí)行截圖功能的邏輯(簡稱為:截圖邏輯),因此技術(shù)實現(xiàn)上本發(fā)明將截圖邏輯的函數(shù)加入到dll開始執(zhí)行時,即入口函數(shù)dll main (dll的主函數(shù))中標記為DLL_PROCESS_ATTACH (當進程加載DLL文件的時候傳這個參數(shù),表示有進程加載了該DLL)的邏輯內(nèi),保證游戲在界面顯示的時候先執(zhí)行鉤子里邊的截圖邏輯。
[0047]在使用DirectX進行顯示的游戲中,游戲動態(tài)效果的展現(xiàn)采用的是逐幀顯示的方式,這種逐幀顯示的效果靠D3D8.dll或者D3D9.dll中的API函數(shù)來提供,如果能在游戲界面顯示之前先截獲到圖像數(shù)據(jù),然后把圖像數(shù)據(jù)在內(nèi)存中拷貝一份,最后再將圖像數(shù)據(jù)原封不動的送還給DirectX的API就能實現(xiàn)不影響游戲流暢性的前提下截取游戲畫面的目的。為了達到Hook游戲進程DirectX的API函數(shù)的目的,本發(fā)明實施例采用了 Hook開發(fā)庫Detour,使用Detour庫Hook的步驟主要是完成以下四步:
[0048](I)、確定要攔截的目標(Target)函數(shù)的函數(shù)地址,即函數(shù)指針;該目標函數(shù)即為要Hook的API函數(shù);
[0049](2)、因為開發(fā)庫會修改目標函數(shù)(Detour將會改寫Target函數(shù)),可以先編寫Target函數(shù)的復(fù)制品,把Target函數(shù)復(fù)制保存好,一方面仍然保存Target函數(shù)的過程調(diào)用語義,另一方面便于以后的恢復(fù);
[0050](3)、編寫Detour函數(shù)用來替代Target函數(shù)的函數(shù),分配一塊全新的內(nèi)存拷貝圖像數(shù)據(jù)到新分配的內(nèi)存;
[0051](4)、在拷貝游戲圖像數(shù)據(jù)完成以后,Detour函數(shù)立即退出,恢復(fù)Target函數(shù)的復(fù)制品保證游戲顯示進程的正常運行。
[0052]關(guān)于步驟(I)中獲得Target函數(shù)的函數(shù)地址(即:函數(shù)的導(dǎo)出地址),一般的實現(xiàn)方式可以是采用LoadLibrary (LoadLibrary:載入指定的動態(tài)鏈接庫,并將它映射到當前進程使用的地址空間。一旦載入,即可訪問庫內(nèi)保存的資源)的方式根據(jù)Target函數(shù)的名稱用標準的視窗操作系統(tǒng)的API函數(shù)GetProcAddress (GetProcAddress:用于獲得一個dll的某個導(dǎo)出函數(shù)),用于調(diào)用某一 dll的功能獲取,但是在實際的使用當中發(fā)明人發(fā)現(xiàn)這種方式在某些視窗操作系統(tǒng)系統(tǒng)上會獲取錯誤的函數(shù)地址,導(dǎo)致無法Hook到對應(yīng)D3D8.dll或者D3D9.dll的API,但是由于國內(nèi)的視窗操作系統(tǒng)用戶使用數(shù)據(jù)巨大,因此為了截圖的有效性本發(fā)明實施例可以采用計算函數(shù)偏移量的方式來保證能夠準確的獲取對應(yīng)的函數(shù)地址。具體過程簡述如下:
[0053](1.1)、首先利用DirectX提供的API函數(shù)創(chuàng)建IDirect3D9或者IDirect3D8的接口對象;
[0054](1.2)、利用上述接口對象的導(dǎo)出函數(shù)CreateDevice創(chuàng)建D3D的設(shè)備對象,此對象包含數(shù)據(jù)顯示的功能;
[0055](1.3)、獲取設(shè)備對象的虛函數(shù)表的首地址,根據(jù)D3D8.h或者D3D9.h給出的導(dǎo)出函數(shù)的位置獲取需要攔截的Target函數(shù)的地址。IDirect3D9、IDirect3D8、CreateDevice、D3D8.h、D3D9.h ;均是游戲開發(fā)相關(guān)的用于圖像顯示的接口 API函數(shù)。
[0056]完成上述使用Detour庫Hook的四個步驟以后,技術(shù)上就實現(xiàn)了在游戲顯示進程中用Detour函數(shù)攔截D3D8.dll或者D3D9.dll中的Target函數(shù)的功能。在實際的運行過程中發(fā)明人發(fā)現(xiàn)通過Detour函數(shù)Hook的方式雖然在游戲界面顯示之前分配了一塊內(nèi)存并執(zhí)行了拷貝,但是對游戲的進程影響幾乎可以忽略,用戶基本感覺不到游戲有卡或者拖尾的現(xiàn)象產(chǎn)生,因此仍然可以保證游戲的流暢運行。
[0057]三、生成游戲屏幕截圖并快速分享[0058]在第二個部分中,由于利用Detours函數(shù)Hook到D3D8.dll或者D3D9.dll以后,已經(jīng)將用戶需要的游戲界面的截圖數(shù)據(jù)拷貝到指定的內(nèi)存空間中,根據(jù)DirectX的技術(shù)文檔,此截圖數(shù)據(jù)是僅僅包含像素信息的原始數(shù)據(jù),為了能讓用戶直觀的看到可以讓這些數(shù)據(jù)轉(zhuǎn)化成按照一定格式的圖像格式,截圖進程可以默認將游戲截圖格式轉(zhuǎn)化成DIB(DeviceIndependent Bitmap,設(shè)備無關(guān)位圖)的類型的bmp (BitMaP,—種位圖格式)圖像,用戶也可以根據(jù)自己的喜歡在設(shè)置里邊選擇保存圖片的類型和保存的路徑。保存好的圖片用戶可以將其分享到微博或者空間等SNS (Social Networking Services,社會性網(wǎng)絡(luò)服務(wù))應(yīng)用,以便可以跟好友分享自己的游戲經(jīng)驗。
[0059]四、截圖流程綜述,如圖2所示包括:
[0060]201:啟動游戲進程;在用戶啟動游戲進程后,確定是否有D3D模塊被加載,本步驟可以按照截圖模塊啟動的規(guī)則判斷游戲的顯示模塊是否含有DirectX的D3D模塊,如果沒有偵測到則截圖模塊退出,如果有,進入202。
[0061]202:截圖模塊注入游戲進程;
[0062]具體地:在截圖模塊的功能dll (Dynamic Link Library,動態(tài)鏈接庫)里定義視窗全局鉤子,在截圖模塊的程序啟動時該全局鉤子會對系統(tǒng)的所有進程進行注入,使含有截圖功能的模塊能在游戲的進程空間中運行。
[0063]203:Hook(鉤子)游戲D3D模塊的顯不APKApplication Programming Interface,應(yīng)用程序編程接口)。
[0064]具體地:采用Windows的Detours庫(微軟的一個開發(fā)庫,功能:1攔截x86機器上的任意的win32API函數(shù)。2插入任意的數(shù)據(jù)段到預(yù)安裝環(huán)境(PE)文件中,修改DDL文件的導(dǎo)入表。)Hook到D3D模塊的API函數(shù),定義自己的Detours函數(shù)來代替游戲進程的D3D模塊的Target函數(shù)的功能,如果失敗則截圖模塊退出,如果成功則進入步驟204。
[0065]204:拷貝游戲截圖數(shù)據(jù);
[0066]利用Detours函數(shù)使截圖模塊能正確的拷貝出游戲當前顯示的圖像截圖的像素數(shù)據(jù),并將像素數(shù)據(jù)按照設(shè)定的圖片格式寫入硬盤。
[0067]205:生成設(shè)定的圖片格式并分享;
[0068]根據(jù)用戶定義的圖片格式生成對應(yīng)的游戲截圖圖像,提供分享的功能使用戶可以將圖片分享到微博或者SNS。
[0069]本發(fā)明實施例還提供了一種截圖裝置,如圖3所示,包括:
[0070]加載確定單元301,用于在目標軟件啟動后,確定是否有具有圖像顯示功能的模塊被目標軟件所加載;
[0071]鉤子注入單元302,用于若加載確定單元301確定結(jié)果為有,則向上述顯示功能的模塊注入全局鉤子;
[0072]指令接收單元303,用于接收截圖指令;
[0073]截圖執(zhí)行單元304,用于在指令接收單元303接收到截圖指令后,通過全局鉤子進行截圖。
[0074]以上實現(xiàn)方案,在確定具有圖像顯示功能的模塊被目標軟件所加載后,向顯示功能的模塊注入全局鉤子,通過局鉤子進行截圖,在實現(xiàn)截圖的過程中可以不影響被截圖軟件進程,提高截圖方案的應(yīng)用范圍,并且簡單智能。并且可以僅截取被截圖軟件相關(guān)的圖像內(nèi)容避免其它例如背景元素的截入,方便快捷。
[0075]可選地,本發(fā)明實施例給出了適應(yīng)于DirectX的截圖具體實現(xiàn)方式,如圖4所示,上述截圖執(zhí)行單元304包括:
[0076]圖像處理子單元401,用于通過全局鉤子獲取圖像顯示功能模塊的輸出的圖像,并將圖像發(fā)送給應(yīng)用程序編程接口,進行圖像顯示;
[0077]截圖子單元402,用于若接收到截圖指令,則截取圖像處理子單元401獲取到的當前的圖像。
[0078]進一步地,本發(fā)明實施例為了保證截圖時先執(zhí)行截圖邏輯然后執(zhí)行目標軟件相關(guān)圖像的顯示,達到及時準確的截圖,本發(fā)明實施例給出了如下解決方案:如圖5所示,上述裝置還包括:
[0079]標記單元501,用于在鉤子注入單元302向上述顯示功能的模塊注入全局鉤子之后,將目標軟件的的主函數(shù)中標記為有截圖進程加載了上述主函數(shù)。
[0080]更具體地,本發(fā)明實施例還給出了使用庫函數(shù)鉤子(Hook)的具體實現(xiàn)方式:上述圖像處理子單元401,用于通過全局鉤子獲取圖像顯示功能模塊的輸出的圖像包括:具體用于通過全局鉤子,確定目標函數(shù),并通過目標函數(shù)的替代函數(shù)分配新內(nèi)存,然后拷貝目標函數(shù)的圖像數(shù)據(jù)到上述新內(nèi)存;上述當前的圖像為接收到截圖指令時,上述新內(nèi)存中的圖像。
[0081]更具體地,本發(fā)明實施例還給出了使用前述截圖方案并且不影響目標軟件相關(guān)圖像顯示的具體實現(xiàn)方案:上述圖像處理子單元401,還用于在通過目標函數(shù)的替代函數(shù)分配新內(nèi)存之前,通過全局鉤子,確定將要攔截的目標函數(shù)的函數(shù)地址,并復(fù)制上述函數(shù)地址的目標函數(shù);上述用于將圖像發(fā)送給應(yīng)用程序編程接口,進行圖像顯示包括:用于在拷貝目標函數(shù)的圖像數(shù)據(jù)到上述新內(nèi)存之后,退出上述替代函數(shù),恢復(fù)復(fù)制的上述目標函數(shù)并運行。
[0082]更具體地,由于運行目標軟件所采用的操作系統(tǒng)可能存在差異,本發(fā)明實施例還給出了解決因這種差異可能導(dǎo)致確定目標函數(shù)的地址可能出現(xiàn)的錯誤的具體實現(xiàn)方式:上述圖像處理子單元401,用于確定將要攔截的目標函數(shù)的函數(shù)地址包括:用于利用編程接口 DirectX提供的應(yīng)用程序編程接口 API函數(shù),創(chuàng)建用于圖像顯示的接口 API函數(shù)的接口對象;利用上述接口對象導(dǎo)出顯示程序接口的設(shè)備對象,并依據(jù)設(shè)備對象的虛函數(shù)表的首地址,以及API函數(shù)的導(dǎo)出函數(shù)的位置確定目標函數(shù)的函數(shù)地址。
[0083]進一步地,本發(fā)明實施例還給出了按需截圖的具體實現(xiàn)方式,如圖6所示,上述指令接收單元303,還用于接收用戶指令;
[0084]上述裝置還包括:轉(zhuǎn)換單元601,用于在截圖完成后,按照指令接收單元303接收的上述用戶指令將截圖得到的圖像數(shù)據(jù)轉(zhuǎn)換為上述用戶指令指定規(guī)格參數(shù)的圖像。
[0085]進一步地,本發(fā)明實施例還給出了按需截圖以后的使用實現(xiàn)方式舉例,如圖7所示,上述裝置7還包括:
[0086]發(fā)送單元701,用于將轉(zhuǎn)換單元601得到的用戶指令指定規(guī)格參數(shù)的圖像,發(fā)送至用戶指令指定的地址。
[0087]值得注意的是,上述裝置實施例中,所包括的各個單元只是按照功能邏輯進行劃分的,但并不局限于上述的劃分,只要能夠?qū)崿F(xiàn)相應(yīng)的功能即可;另外,各功能單元的具體名稱也只是為了便于相互區(qū)分,并不用于限制本發(fā)明的保護范圍。
[0088]另外,本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述各方法實施例中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件完成,相應(yīng)的程序可以存儲于一種計算機可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。
[0089]以上僅為本發(fā)明較佳的【具體實施方式】,但本發(fā)明的保護范圍并不局限于此,任何熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明實施例揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)該以權(quán)利要求的保護范圍為準。
【權(quán)利要求】
1.一種截圖方法,其特征在于,包括: 在目標軟件啟動后,確定是否有具有圖像顯示功能的模塊被目標軟件所加載;若有,則向所述顯示功能的模塊注入全局鉤子; 在接收到截圖指令后,通過全局鉤子進行截圖。
2.根據(jù)權(quán)利要求1所述方法,其特征在于,所述在接收到截圖指令后,通過全局鉤子進行截圖包括: 通過全局鉤子獲取圖像顯示功能模塊的輸出的圖像,并將圖像發(fā)送給應(yīng)用程序編程接口,進行圖像顯示; 若接收到截圖指令,則截取通過全局鉤子獲取到的當前的圖像。
3.根據(jù)權(quán)利要求2所述方法,其特征在于,在向所述顯示功能的模塊注入全局鉤子之后還包括: 將目標軟件的的主函數(shù)中標記為有截圖進程加載了所述主函數(shù)。
4.根據(jù)權(quán)利要求2所述方法,其特征在于:所述通過全局鉤子獲取圖像顯示功能模塊的輸出的圖像包括: 通過全局鉤子,確定目標函數(shù),并通過目標函數(shù)的替代函數(shù)分配新內(nèi)存,然后拷貝目標函數(shù)的圖像數(shù)據(jù)到所述新內(nèi)存;所述當前的圖像為接收到截圖指令時,所述新內(nèi)存中的圖像?!?br> 5.根據(jù)權(quán)利要求4所述方法,其特征在于,所述通過目標函數(shù)的替代函數(shù)分配新內(nèi)存之前還包括:通過全局鉤子,確定將要攔截的目標函數(shù)的函數(shù)地址,并復(fù)制所述函數(shù)地址的目標函數(shù); 所述將圖像發(fā)送給應(yīng)用程序編程接口,進行圖像顯示包括:在拷貝目標函數(shù)的圖像數(shù)據(jù)到所述新內(nèi)存之后,退出所述替代函數(shù),恢復(fù)復(fù)制的所述目標函數(shù)并運行。
6.根據(jù)權(quán)利要求5所述方法,其特征在于,所述替代函數(shù)為: 新編寫的開發(fā)庫函數(shù)。
7.根據(jù)權(quán)利要求5所述方法,其特征在于,所述確定將要攔截的目標函數(shù)的函數(shù)地址包括: 利用編程接口 DirectX提供的應(yīng)用程序編程接口 API函數(shù),創(chuàng)建用于圖像顯示的接口API函數(shù)的接口對象;利用所述接口對象導(dǎo)出顯示程序接口的設(shè)備對象,并依據(jù)設(shè)備對象的虛函數(shù)表的首地址,以及API函數(shù)的導(dǎo)出函數(shù)的位置確定目標函數(shù)的函數(shù)地址。
8.根據(jù)權(quán)利要求1至7任意一項所述方法,其特征在于,在截圖完成后還包括: 按照用戶指令將截圖得到的圖像數(shù)據(jù)轉(zhuǎn)換為所述用戶指令指定規(guī)格參數(shù)的圖像。
9.根據(jù)權(quán)利要求8所述方法,其特征在于,還包括: 將用戶指令指定規(guī)格參數(shù)的圖像,發(fā)送至用戶指令指定的地址。
10.一種截圖裝置,其特征在于,包括: 加載確定單元,用于在目標軟件啟動后,確定是否有具有圖像顯示功能的模塊被目標軟件所加載; 鉤子注入單元,用于若加載確定單元確定結(jié)果為有,則向所述顯示功能的模塊注入全局鉤子; 指令接收單元,用于接收截圖指令;截圖執(zhí)行單元,用于在指令接收單元接收到截圖指令后,通過全局鉤子進行截圖。
11.根據(jù)權(quán)利要求10所述裝置,其特征在于,所述截圖執(zhí)行單元包括: 圖像處理子單元,用于通過全局鉤子獲取圖像顯示功能模塊的輸出的圖像,并將圖像發(fā)送給應(yīng)用程序編程接口,進行圖像顯示; 截圖子單元,用于若接收到截圖指令,則截取圖像處理子單元獲取到的當前的圖像。
12.根據(jù)權(quán)利要求11所述裝置,其特征在于,還包括: 標記單元,用于在鉤子注入單元向所述顯示功能的模塊注入全局鉤子之后,將目標軟件的的主函數(shù)中標記為有截圖進程加載了所述主函數(shù)。
13.根據(jù)權(quán)利要求11所述裝置,其特征在于: 所述圖像處理子單元,用于通過全局鉤子獲取圖像顯示功能模塊的輸出的圖像包括:具體用于通過全局鉤子,確定目標函數(shù),并通過目標函數(shù)的替代函數(shù)分配新內(nèi)存,然后拷貝目標函數(shù)的圖像數(shù)據(jù)到所述新內(nèi)存;所述當前的圖像為接收到截圖指令時,所述新內(nèi)存中的圖像。
14.根據(jù)權(quán)利要求13所述裝置,其特征在于, 所述圖像處理子單元,還用于在通過目標函數(shù)的替代函數(shù)分配新內(nèi)存之前,通過全局鉤子,確定將要攔截的目標函數(shù)的函數(shù)地址,并復(fù)制所述函數(shù)地址的目標函數(shù);所述用于將圖像發(fā)送給應(yīng)用程序編程接口,進行圖像顯示包括:用于在拷貝目標函數(shù)的圖像數(shù)據(jù)到所述新內(nèi)存之后,退出所述替代函數(shù),恢復(fù)復(fù)制的所述目標函數(shù)并運行。
15.根據(jù)權(quán)利要求14所述裝置,其特征在于, 所述圖像處理子單元,用于確定 將要攔截的目標函數(shù)的函數(shù)地址包括:用于利用編程接口 DirectX提供的應(yīng)用程序編程接口 API函數(shù),創(chuàng)建用于圖像顯示的接口 API函數(shù)的接口對象;利用所述接口對象導(dǎo)出顯示程序接口的設(shè)備對象,并依據(jù)設(shè)備對象的虛函數(shù)表的首地址,以及API函數(shù)的導(dǎo)出函數(shù)的位置確定目標函數(shù)的函數(shù)地址。
16.根據(jù)權(quán)利要求10至15任意一項所述裝置,其特征在于, 指令接收單元,用于接收用戶指令; 轉(zhuǎn)換單元,用于在截圖完成后,按照指令接收單元接收的所述用戶指令將截圖得到的圖像數(shù)據(jù)轉(zhuǎn)換為所述用戶指令指定規(guī)格參數(shù)的圖像。
17.根據(jù)權(quán)利要求16所述裝置,其特征在于,還包括: 發(fā)送單元,用于將轉(zhuǎn)換單元得到的用戶指令指定規(guī)格參數(shù)的圖像,發(fā)送至用戶指令指定的地址。
【文檔編號】G06F9/445GK103853576SQ201210519551
【公開日】2014年6月11日 申請日期:2012年12月6日 優(yōu)先權(quán)日:2012年12月6日
【發(fā)明者】王彪 申請人:騰訊科技(深圳)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1