本申請涉及計(jì)算機(jī),具體涉及一種基于窗口堆棧的進(jìn)程水印實(shí)現(xiàn)方法、裝置、設(shè)備及介質(zhì)。
背景技術(shù):
1、進(jìn)程浮水印能夠在進(jìn)程中浮現(xiàn)出預(yù)設(shè)的水印,提醒用戶當(dāng)前開啟的服務(wù)或軟件正在訪問重要數(shù)據(jù),這種警示作用可在一定程度上避免用戶無意間泄露敏感信息。
2、現(xiàn)有的進(jìn)程水印實(shí)現(xiàn)方式是通過linux窗口協(xié)議的事件監(jiān)聽接口(api)來監(jiān)控窗口事件。當(dāng)檢測到窗口創(chuàng)建事件時(shí),利用窗口標(biāo)識(shí)符(wid)獲取相應(yīng)的進(jìn)程標(biāo)識(shí)符(pid),以判斷該窗口是否需要添加水印。如果需要添加水印,則在該窗口上創(chuàng)建一個(gè)透明且鼠標(biāo)可穿透的置頂窗口進(jìn)行水印繪制。
3、然而,由于水印的繪制也需要一個(gè)窗口,當(dāng)需要繪制水印時(shí),在一個(gè)透明窗口繪制完水印后,將這個(gè)水印窗口附著到需要加密的窗口中。由于linux窗口的特殊性,水印窗口的父窗口為非根窗口時(shí)會(huì)把非根窗口的圖像內(nèi)存給奪走,導(dǎo)致非根窗口的內(nèi)容不可見。所以,當(dāng)有多個(gè)需要繪制水印的加密窗口時(shí),當(dāng)幾個(gè)加密窗口重疊時(shí),它們對應(yīng)的置頂水印窗口也會(huì)重疊,又因?yàn)樗〈翱诘闹庙攲傩?,甚至非加密窗口移?dòng)到加密窗口上,水印也會(huì)在非加密窗口上??梢姡F(xiàn)有技術(shù)在處理多個(gè)需要繪制進(jìn)程水印的窗口時(shí)存在顯著缺陷。
技術(shù)實(shí)現(xiàn)思路
1、本申請的目的是提供一種基于窗口堆棧的進(jìn)程水印實(shí)現(xiàn)方法、裝置、電子設(shè)備及存儲(chǔ)介質(zhì)。
2、第一方面,本申請實(shí)施例提供了一種基于窗口堆棧的進(jìn)程水印實(shí)現(xiàn)方法,包括:
3、與窗口管理器建立連接,并獲取水印圖像資源;
4、從窗口管理器獲取窗口堆棧中的所有窗口,并逐一遍歷所述窗口堆棧中的所有窗口;
5、對每個(gè)遍歷到的窗口,根據(jù)所述窗口為受控窗口且為非隱藏狀態(tài),判斷所述窗口是否為活躍窗口,得到判斷結(jié)果;其中,活躍窗口是指當(dāng)前與用戶交互的窗口;
6、根據(jù)所述判斷結(jié)果以及所述水印圖像資源對所述窗口進(jìn)行水印繪制,并根據(jù)窗口管理器發(fā)送的所述窗口對應(yīng)的窗口事件更新水印的顯示位置和狀態(tài);
7、根據(jù)所述窗口不需要添加水印或者所述窗口處于隱藏狀態(tài),跳過所述窗口,繼續(xù)遍歷下一個(gè)窗口。
8、一種可能的實(shí)現(xiàn)方式中,根據(jù)所述判斷結(jié)果以及所述水印圖像資源對所述窗口進(jìn)行水印繪制,包括:
9、如果所述判斷結(jié)果為所述窗口是活躍窗口,則在根窗口上創(chuàng)建一個(gè)透明的第一子窗口,將所述第一子窗口覆蓋在活躍窗口之上,并在所述第一子窗口中根據(jù)所述水印圖像資源繪制水印,使水印顯示在活躍窗口的內(nèi)容之上;
10、如果所述判斷結(jié)果為所述窗口不是活躍窗口,則在所述窗口上創(chuàng)建一個(gè)第二子窗口,將所述窗口的內(nèi)容拷貝到所述第二子窗口中,并在所述第二子窗口中根據(jù)所述水印圖像資源繪制水印,使水印顯示在所述窗口的內(nèi)容之上。
11、一種可能的實(shí)現(xiàn)方式中,所述窗口事件包括:鼠標(biāo)點(diǎn)擊、窗口形變、移動(dòng)和縮放事件。
12、一種可能的實(shí)現(xiàn)方式中,所述方法還包括:
13、對所述窗口堆棧的水印繪制結(jié)束時(shí),斷開與窗口管理器的連接和釋放水印圖像資源。
14、第二方面,本申請實(shí)施例提供了一種基于窗口堆棧的進(jìn)程水印實(shí)現(xiàn)裝置,包括:
15、初始化模塊,用于與窗口管理器建立連接,并獲取水印圖像資源;
16、窗口遍歷模塊,用于從窗口管理器獲取窗口堆棧中的所有窗口,并逐一遍歷所述窗口堆棧中的所有窗口;對每個(gè)遍歷到的窗口,根據(jù)所述窗口為受控窗口且為非隱藏狀態(tài),判斷所述窗口是否為活躍窗口,得到判斷結(jié)果;其中,活躍窗口是指當(dāng)前與用戶交互的窗口;根據(jù)所述判斷結(jié)果以及所述水印圖像資源對所述窗口進(jìn)行水印繪制,并根據(jù)窗口管理器發(fā)送的所述窗口對應(yīng)的窗口事件更新水印的顯示位置和狀態(tài);根據(jù)所述窗口不需要添加水印或者所述窗口處于隱藏狀態(tài),跳過所述窗口,繼續(xù)遍歷下一個(gè)窗口。
17、一種可能的實(shí)現(xiàn)方式中,所述窗口遍歷模塊,具體用于:
18、如果所述判斷結(jié)果為所述窗口是活躍窗口,則在根窗口上創(chuàng)建一個(gè)透明的第一子窗口,將所述第一子窗口覆蓋在活躍窗口之上,并在所述第一子窗口中根據(jù)所述水印圖像資源繪制水印,使水印顯示在活躍窗口的內(nèi)容之上;
19、如果所述判斷結(jié)果為所述窗口不是活躍窗口,則在所述窗口上創(chuàng)建一個(gè)第二子窗口,將所述窗口的內(nèi)容拷貝到所述第二子窗口中,并在所述第二子窗口中根據(jù)所述水印圖像資源繪制水印,使水印顯示在所述窗口的內(nèi)容之上。
20、一種可能的實(shí)現(xiàn)方式中,所述窗口事件包括:鼠標(biāo)點(diǎn)擊、窗口形變、移動(dòng)和縮放事件。
21、一種可能的實(shí)現(xiàn)方式中,所述裝置還包括:
22、資源釋放模塊,用于對所述窗口堆棧的水印繪制結(jié)束時(shí),斷開與窗口管理器的連接和釋放水印圖像資源。
23、第三方面,本申請?zhí)峁┝艘环N電子設(shè)備,包括:存儲(chǔ)器、處理器及存儲(chǔ)在所述存儲(chǔ)器上并可在所述處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器運(yùn)行所述計(jì)算機(jī)程序時(shí)執(zhí)行以實(shí)現(xiàn)如第一方面所述的方法。
24、第四方面,本申請實(shí)提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)可讀指令,所述計(jì)算機(jī)可讀指令可被處理器執(zhí)行以實(shí)現(xiàn)如第一方面所述的方法。
25、相較于現(xiàn)有技術(shù),本申請?zhí)峁┑幕诖翱诙褩5倪M(jìn)程水印實(shí)現(xiàn)方法,通過與窗口管理器建立連接,并獲取水印圖像資源;從窗口管理器獲取窗口堆棧中的所有窗口,并逐一遍歷所述窗口堆棧中的所有窗口;對每個(gè)遍歷到的窗口,根據(jù)所述窗口為受控窗口且為非隱藏狀態(tài),判斷所述窗口是否為活躍窗口,得到判斷結(jié)果;根據(jù)所述判斷結(jié)果以及所述水印圖像資源對所述窗口進(jìn)行水印繪制,并根據(jù)窗口管理器發(fā)送的所述窗口對應(yīng)的窗口事件更新水印的顯示位置和狀態(tài);根據(jù)所述窗口不需要添加水印或者所述窗口處于隱藏狀態(tài),跳過所述窗口,繼續(xù)遍歷下一個(gè)窗口。與現(xiàn)有技術(shù)相比,本申請通過遍歷窗口堆棧中每一個(gè)窗口,根據(jù)窗口是否為活躍窗口以及是否為隱藏狀態(tài)進(jìn)行水印繪制,確保水印不會(huì)遮擋非加密窗口的內(nèi)容,且多個(gè)加密窗口的內(nèi)容不會(huì)相互重疊,提升了系統(tǒng)性能和用戶體驗(yàn)。
1.一種基于窗口堆棧的進(jìn)程水印實(shí)現(xiàn)方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,根據(jù)所述判斷結(jié)果以及所述水印圖像資源對所述窗口進(jìn)行水印繪制,包括:
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述窗口事件包括:鼠標(biāo)點(diǎn)擊、窗口形變、移動(dòng)和縮放事件。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括:
5.一種基于窗口堆棧的進(jìn)程水印實(shí)現(xiàn)裝置,其特征在于,包括:
6.根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述窗口遍歷模塊,具體用于:
7.根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述窗口事件包括:鼠標(biāo)點(diǎn)擊、窗口形變、移動(dòng)和縮放事件。
8.根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述裝置還包括:
9.一種電子設(shè)備,包括:存儲(chǔ)器、處理器及存儲(chǔ)在所述存儲(chǔ)器上并可在所述處理器上運(yùn)行的計(jì)算機(jī)程序,其特征在于,所述處理器運(yùn)行所述計(jì)算機(jī)程序時(shí)以實(shí)現(xiàn)如權(quán)利要求1至4任一項(xiàng)所述的方法。
10.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,其上存儲(chǔ)有計(jì)算機(jī)可讀指令,所述計(jì)算機(jī)可讀指令可被處理器執(zhí)行以實(shí)現(xiàn)如權(quán)利要求1至4任一項(xiàng)所述的方法。