專利名稱:視窗顯示的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及操作系統(tǒng)中視窗顯示的方法,尤其是一種更改視窗顯示桌面 的方法。
背景技術(shù):
計算機技術(shù)與應(yīng)用進展快速,已經(jīng)涵蓋了人們生活的各個方面。為了 適應(yīng)每個人不同的需求,個人計算機內(nèi)都設(shè)置有自己的系統(tǒng)配置、慣用程 序和文檔。為了要隨時在自己熟悉的系統(tǒng)配置中,使用慣用的程序,處理 自己的文檔,許多使用者會隨身攜帶自己的筆記本計算機。但由于重量和 體積,即使是筆記本計算機,依然是攜帶上的一大負擔。最好的方式是能
將文件、系統(tǒng)配置、程序打包,放在外部存儲裝置中(例如u盤、或外接 式硬盤、甚至服務(wù)器),只要攜帶此外部存儲裝置,接上學校、網(wǎng)吧、公 司、家里或其它地方的任何計算機,即可將熟悉的一切重現(xiàn)。此種技術(shù)即 為虛擬環(huán)境技術(shù)。虛擬環(huán)境是一個特殊的程序,在計算機的操作系統(tǒng)上執(zhí) 行。利用虛擬環(huán)境,使用者可以動態(tài)地將計算機的操作系統(tǒng)調(diào)整成使用者 熟悉的文件、系統(tǒng)配置、慣用程序,以方便使用。
發(fā)明人在實現(xiàn)本發(fā)明的過程中發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在如下問題當使 用者采用的操作系統(tǒng)是Windows Vista Service Packl ,使用者利用現(xiàn)有虛 擬環(huán)境技術(shù)創(chuàng)建虛擬桌面后,當使用者試圖打開虛擬桌面上的視窗時,該 視窗會出現(xiàn)在默認的本地桌面上,而不是其應(yīng)該出現(xiàn)的輸入桌面(目前顯 示的桌面)。例如,使用者默認的本地桌面為default,利用虛擬環(huán)境技術(shù) 創(chuàng)建的虛擬桌面為boxl,當使用者點擊虛擬桌面boxl上的"我的電腦" 時,該對應(yīng)于"我的電腦"的視窗會出現(xiàn)在默認的桌面default上,而不是出現(xiàn)在其本應(yīng)該出現(xiàn)的虛擬桌面boxl上,造成虛擬桌面上看不到自己所 建立的視窗。
發(fā)明內(nèi)容
本發(fā)明的目的是解決視窗出現(xiàn)的桌面不正確的問題,實現(xiàn)視窗顯示在正 確的桌面。
為實現(xiàn)上述目的,本發(fā)明提供了一種視窗顯示的方法,包括 在用于開啟視窗的API上掛上API掛鉤,該API掛鉤用于指定視窗的顯 示位置為輸入桌面;
運行掛上API掛鉤的API以開啟4a窗。
其中,可以通過雙擊輸入桌面上的資源管理器圖標或從"開始"菜單中 選取資源管理器啟動輸入桌面的資源管理器。
這種情況下,所述在用于開啟視窗的API上掛上API掛鉤包括在輸入 桌面的資源管理器程序的創(chuàng)建線程API上掛上API掛鉤,該API掛鉤進一步 調(diào)用改變桌面屬性的API,將桌面屬性設(shè)定為輸入桌面。
或者,可以通過熱^t或者命令列的方式啟動輸入桌面的資源管理器。
這種情況下,所述在用于開啟視窗的API上掛上API掛鉤包括在默認 桌面的資源管理器的創(chuàng)建進程API掛上API掛鉤,該API掛鉤進一步調(diào)用輸 入桌面的同名API。
由上述技術(shù)方案可知,本發(fā)明通過在開啟資源管理器視窗的相關(guān)API上 掛上掛鉤,具有以下有益效果保證資源管理器視窗開在正確的桌面上。
下面通過附圖和實施例,對本發(fā)明的技術(shù)方案做進一步的詳細描述。
圖1為本發(fā)明視窗顯示的方法實施例一的流程圖; 圖2為本發(fā)明視窗顯示的方法實施例二的流程圖;圖3為本發(fā)明視窗顯示的方法實施例三的流程圖。
具體實施例方式
為了更好地理解本發(fā)明,首先簡要描述本發(fā)明所涉及的術(shù)語。
桌面(desktop):梯:作系統(tǒng)的畫面,稱為桌面。 一個操作系統(tǒng)可以同時 有多個桌面,但一次只顯示一個桌面。每個桌面有一個辨識用的名稱,默認 的桌面名稱為"Default"。
輸入桌面(InputDesktop):即使啟用多個桌面,但一次只能顯示一個桌 面。顯示中的桌面稱為輸入桌面。由于現(xiàn)有技術(shù)中不論在虛擬桌面還是默認 桌面打開視窗,視窗均會顯示在默認桌面中。因此,對于在虛擬桌面打開視 窗卻出現(xiàn)在默認桌面這種顯示是有問題的,本發(fā)明也正是主要解決該問題, 所以,本發(fā)明實施例中無特殊說明,所指的輸入桌面為虛擬桌面,由于可能 存在多個虛擬桌面,以一個虛擬桌面為例,以boxl為例。
資源管理器即explorer.exe程序。此程序負責顯現(xiàn)及管理桌面相關(guān)的程 序,沒有運行此程序,桌面將是一片荒蕪,用戶完全無法操作桌面。
應(yīng)用編程接口 ( Application Programming Interface, API):供應(yīng)用程序調(diào)用 的函數(shù)。本發(fā)明中涉及的API包括用于建立任何進程的ShellExecuteEx函數(shù), 用于建立遠端線程的CreateRemoteThread函數(shù),用于建立本地線程的 CreateThread函數(shù),用于更改桌面屬性(Desktop )的SetThreadDesktop函數(shù), 其中,桌面屬性(Desktop)即為顯示的桌面,如是在默認桌面(default)顯 示,還是在虛擬桌面(如boxl)顯示。
API桂鉤(API Hook):以攔截的手法,在運行的程序內(nèi)插入自定義程 序,以改變作用。
進程(Process):運行中的程序, 一個進程至少有一個線程。
線程(Thread):線程是程序的運行單位。任何程序執(zhí)行時,都是由一 個主線程開始,然后視需要增加線程。當一個程序的線程個數(shù)為0時,程序結(jié)束。
圖1為本發(fā)明視窗顯示的方法實施例一的流程圖,包括 步驟ll:在用于開啟視窗的API上掛上API掛鉤,該API掛鉤用于指定 視窗的顯示位置為輸入桌面。其中,使用者可以通過雙擊輸入桌面上的 explorer.exe圖標或從"開始,,菜單中選取explorer.exe以啟動explorer.exe進 程(具體對應(yīng)于下面的實施例二),這種情況下,用于開啟視窗的API為 CreateThread函數(shù);或者,使用者可以通過輸入桌面上的熱鍵"win鍵+E鍵,, 的方式或利用命令列的方式啟動explorer.exe進程(具體對應(yīng)于下面的實施例 三),這種情況下,用于開啟^L窗的API為ShellExecuteEx函數(shù)。 步驟12:運行掛上API掛鉤的API以開啟視窗。
本實施例通過設(shè)置API掛鉤,在掛鉤程序中指定^L窗的顯示位置為輸入 桌面,使視窗可以顯示在輸入桌面上,從而避免現(xiàn)有技術(shù)中資源管理器視窗 一律顯示在默認桌面的問題。
圖2為本發(fā)明視窗顯示的方法實施例二的流程圖,包括 步驟21:在輸入桌面(Boxl)上,使用者通過雙擊explorer.exe圖標或 從"開始"菜單中選取explorer.exe程序。在虛擬桌面boxl上,當通過雙擊 explorer.exe圖標或從"開始"菜單中選取explorer.exe程序時,不會開啟進程, 只調(diào)用CreateThread函數(shù)開啟一個線程?,F(xiàn)有技術(shù)存在的問題是雖然該線 程的位置在boxl,但是此線程開出來的視窗卻是在default桌面。因此,本實 施例需要對該CreateThread函數(shù)進行處理,以便使視窗開在正確的位置。 步驟22:調(diào)用該CreateThread函數(shù),以開啟輸入桌面的i見窗。 步驟23:在該CreateThread函數(shù)掛上API桂鉤,該API桂鉤會調(diào)用 SetThreadDesktop函數(shù),通過該SetThreadDesktop函數(shù)設(shè)定該用于開啟視窗的 線程的桌面屬性(Desktop)為輸入桌面(Boxl)。通過設(shè)置桌面屬性,可以 保證視窗開在正確的位置上,如在輸入桌面上開啟視窗,該視窗將正確地出 現(xiàn)在輸入桌面上。步驟24:運行掛上SetThreadDesktop函數(shù)的CreateThread函數(shù),開啟視 窗。由于SetThreadDesktop函數(shù)已將桌面屬性設(shè)置為輸入桌面,因此該視窗 將會出現(xiàn)在輸入桌面上。
本實施例給出了通過雙擊explorer.exe圖標或從"開始"菜單中啟動 explorer.exe程序開啟視窗的流程。本實施例對開啟i見窗的API ( CreateThread 函數(shù))進行掛鉤處理,在掛鉤程序SetThreadDesktop函數(shù)中設(shè)置桌面屬性為 輸入桌面,保證纟見窗開在正確的桌面上(輸入桌面)。
圖3為本發(fā)明視窗顯示的方法實施例三的流程圖,包括
步驟31:在輸入桌面boxl上,使用者通過熱鍵(win鍵+E鍵)或者利 用命令行的方式啟動資源管理器explorer.exe。
步驟32:操作系統(tǒng)會透過COM機制調(diào)用default桌面的shell程序的 ShellExecuteEx函數(shù),以建立一個explore.exe進程,建立出來的此進程會屬 于default桌面。該步驟是現(xiàn)有技術(shù)中的問題,通過熱鍵或命令行的方式會啟 動default桌面的explorer.exe進程,使視窗開在default桌面,位置錯誤。
步驟33:利用API掛鉤技術(shù),攔截該default桌面的ShellExecuteEx函數(shù), 改調(diào)用CreateRemoteThread函凄t,創(chuàng)建一個遠端進考呈(remote thread)。
步驟34:通過該遠端線程調(diào)用輸入桌面shell進程的ShellExecuteEx函數(shù), 建立正確的進程及視窗。
步驟35:通過輸入桌面的ShellExecuteEx函數(shù)建立輸入桌面的 explorer.exe進程,啟動視窗。
本實施例給出了通過熱鍵(win鍵+E鍵)或者利用命令行的方式啟動程 序開啟視窗的流程。本實施例對開啟視窗的API (默認桌面的ShellExecuteEx 函數(shù))進行桂鉤處理,在掛鉤程序CreateRemoteThread函數(shù)中設(shè)置調(diào)用輸入 桌面的ShellExecuteEx函數(shù),保證視窗開在正確的桌面上(輸入桌面)。
本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述方法實施例的全部或部分步 驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟; 而前述的存儲介質(zhì)包括ROM、 RAM、磁碟或者光盤等各種可以存儲程 序代碼的介質(zhì)。
最后應(yīng)說明的是以上實施例僅用以說明本發(fā)明的技術(shù)方案而非對其進 行限制,盡管參照較佳實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技 術(shù)人員應(yīng)當理解其依然可以對本發(fā)明的技術(shù)方案進行修改或者等同替換, 而這些修改或者等同替換亦不能使修改后的技術(shù)方案脫離本發(fā)明技術(shù)方案的 精神和范圍。
權(quán)利要求
1、一種視窗顯示的方法,其特征在于,包括在用于開啟視窗的API上掛上API掛鉤,該API掛鉤用于指定視窗的顯示位置為輸入桌面;運行掛上API掛鉤的API以開啟視窗。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括 通過雙擊輸入桌面上的資源管理器圖標或從"開始,,菜單中選取資源管理器啟動輸入桌面的資源管理器。
3、 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述在用于開啟^f見窗的 API上掛上API掛鉤包括在輸入桌面的資源管理器程序的創(chuàng)建線程API上掛上API掛鉤,該API 掛鉤進一步調(diào)用改變桌面屬性的API,將桌面屬性設(shè)定為輸入桌面。
4、 根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括 通過熱鍵或者命令列的方式啟動輸入桌面的資源管理器
5、 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述在用于開啟視窗的 API上掛上API掛鉤包括在默認桌面的資源管理器的創(chuàng)建進程API上掛上API掛鉤,該API掛鉤 進一步調(diào)用輸入桌面的同名API。
全文摘要
本發(fā)明公開了一種視窗顯示的方法。該方法包括在用于開啟視窗的API上掛上API掛鉤,該API掛鉤用于指定視窗的顯示位置為輸入桌面;運行掛上API掛鉤的API以開啟視窗。通過本發(fā)明可以保證視窗開在正確的桌面上,尤其是可以克服Windows Vista Service Pack1操作系統(tǒng)環(huán)境下,采用虛擬桌面時視窗一律開在默認桌面的問題。
文檔編號G06F9/44GK101645004SQ20081011773
公開日2010年2月10日 申請日期2008年8月4日 優(yōu)先權(quán)日2008年8月4日
發(fā)明者謝威領(lǐng) 申請人:優(yōu)諾威訊國際有限公司