專利名稱:移除遮擋的應用共享的制作方法
技術領域:
本發明一般地涉及遠程呈現會話,更具體地涉及應用共享。
背景技術:
雖然計算機曾經一度是孤立的并且與其他計算機具有最小的或很少的交互,但是現在計算機通過局域網(LAN)、廣域網(WAN)、撥號連接等等與各種各樣的其他計算機進行交互。隨著因特網的廣泛增長,計算機之間的連接已經變得更加重要并且已經開發了許多新的應用程序和技術。大規模網絡的增長以及低成本個人計算機的廣泛可用性已經從根本上改變了許多人工作、交互、通信、以及玩樂的方式。網絡通信的一種日益增加的流行形式一般被稱為遠程呈現系統,其能使用諸如遠程桌面協議(RDP)、獨立計算體系結構(ICA)、以及其他協議來與遠程客戶機共享桌面和其他應用。這樣的計算系統通常將來自客戶機的鍵盤按壓和鼠標點擊或選擇傳送到服務器, 通過網絡連接(例如,因特網)將屏幕更新轉播回其他方向。由此,當實際上僅僅向客戶機設備發送如在服務器側上出現的應用的屏幕截圖時,用戶具有好像他們的機器正在本地地執行應用的體驗。這些遠程呈現會話技術中有被稱為應用共享或窗口共享的一類技術。這些技術允許第一計算機處的第一用戶與第二計算機處的第二用戶共享一個或多個窗口。在許多情況中,第一用戶不想要與第二用戶共享其整個桌面,而僅共享這些特定共享的窗口(下文中稱為“共享窗口”)。此外,當非共享窗口部分阻擋或遮擋共享窗口時也可能有問題。就第二用戶而言該非共享窗口可引起混亂,第二用戶不能看到共享窗口的全部而可能看到不完整的一些窗口。以往的用于共享窗口的技術基于單獨地從呈現的計算機桌面提取窗口,然后根據計算機桌面確定其什么部分對應于共享窗口或應用,接下來覆蓋非共享區域(用不透明圖案)以使得桌面該部分的內容不可見。即,這些技術從桌面的內容開始,從桌面中隱去非共享區域。這些技術不允許顯示共享窗口中在桌面上被遮擋的部分(至少部分被另一窗口或其它圖形對象覆蓋)或向受者顯示共享和非共享窗口兩者的替換表示(諸如非共享窗口存在,且這是共享窗口的一部分被遮擋的原因)。
發明內容
因此,提供移除遮擋的窗口共享的技術將是一種改進。本發明的技術在可能時從共享的窗口中移除遮擋,且在這樣的遮擋不可被移除時,向共享窗口的觀看者提供這些遮擋存在的視覺指示。在一實施例中,生成合成位圖——尺寸為其中要共享至少一個窗口的計算機桌面的空白位圖。合成位圖包括共享遮擋區域——合成位圖的這些部位對應于被遮擋的共享窗口中不能被確定的各部分(窗口的該部位的圖形表示未存儲在可訪問存儲器區域中)—— 以及共享非遮擋區域——合成位圖的這些部分對應于共享窗口中可被確定的部分。然后通過一次一個窗口地將這些共享窗口的全部或一部分復制到桌面來構建該合成位圖以構成被發送給客戶機的共享窗口。遍歷桌面的窗口來確定這些窗口的ζ次序(每一窗口相對于每一其它窗口的深度;兩個窗口何時占據相同的坐標、哪一窗口將遮擋另一窗口)。然后,從最后面的窗口(即具有最大ζ深度的窗口)開始,檢查該窗口來確定桌面上該窗口占據的位置(包括窗口的任何被遮擋部分)、該窗口是否是共享的以及該窗口是否與另一窗口相交。基于這些判斷,會發生以下情況如果該窗口是共享的并且是分層的(當窗口被指定為分層的,則整個窗口被存儲在與存儲桌面的存儲器區域分開的存儲器區域中)。它從存儲其的窗口緩沖區(與存儲桌面的存儲器分開)被復制到合成圖。如果窗口是共享的但不是分層的,則從存儲桌面的存儲器將其復制到合成位圖。如果窗口不是共享的,且其與共享的被遮擋區域相交,則將一偽窗口添加到合成位圖。該偽窗口例如可以是具有該非共享窗口的尺寸但沒有該窗口的內容的窗口(因為該窗口將不被共享)。如果窗口不是共享的,且其與未被遮擋的共享區域相交,則將對該相交的指示添加到合成位圖。例如,該部位可與位圖的其余部分不同地蒙上陰影,以向觀看者傳達該部位在第一用戶的桌面上被覆蓋的信息。如果窗口不是共享的,且不與被遮擋的共享區域或未被遮擋的共享區域相交,則可忽略該窗口。在對每一窗口完成這些操作之后,合成位圖可被編碼并發送到第二計算機以便顯
示共享窗口。盡管此處所述的主要實施例討論位圖,但本領域的技術人員可以理解,這些技術可應用于各種不同格式的圖像。本發明技術的優點涉及窗口同步。當窗口在桌面上諸如經由來自用戶的鼠標輸入而移動時,所存儲的窗口位置將變得與窗口的圖形顯示稍微有所不同步。即,系統可能已經確定窗口的位置與它在桌面上實際顯示的位置稍有不同。所以,使用以往的技術,如果窗口快速移動并變得不同步,則對客戶機發送的是桌面的錯誤部位——桌面上曾包含窗口但現在僅包含窗口的一部分的部位。桌面的這一錯誤部位還可包括未被共享的窗口。與此相反, 如果本發明的技術出現不同步問題,它可導致窗口在錯誤的位置向客戶機顯示而非顯示非共享窗口的一部分。本領域技術人員將理解,本發明的一個或多個方面可包括但不限于用于實現本發明的本文所述方面的電路和/或編程;該電路和/或編程實質上可以是被配置成實現本文所述方面的硬件、軟件和/或固件的任何組合,這取決于系統設計者的設計選擇。以上是概述,并且因此必然包含細節的簡化、一般化及省略。本領域技術人員將明白,本概述只是說明性的并且決不旨在是限制性的。
參考附圖來進一步描述用于移除遮擋的窗口共享的系統、方法和計算機可讀存儲介質,附圖中
圖1示出了可在其中體現了在此描述的技術的示例性通用計算環境。圖2描繪了其中可實現本發明的各方面的示例服務器。圖3A描繪了其中未實現本發明的技術的被遮蔽的共享窗口。圖;3B描繪了其中實現本發明的技術的圖3A的被遮蔽的共享窗口。圖4A描繪了包括多個窗口的計算機桌面,其中要共享多個窗口的子集。圖4B描繪了使用本發明的技術的圖4A的計算機桌面的共享窗口。圖5描繪了移除遮擋的窗口共享的示例操作過程。
具體實施例方式圖1是在其中可實現在此描述的技術的通用計算設備的框圖。計算系統環境120 只是合適的計算環境的一個示例,并且不旨在對所公開的主題的使用范圍或功能提出任何限制。也不應該將計算環境120解釋為對示例性操作環境120中示出的任一組件或其組合有任何依賴性或要求。在某些實施方式中,所描繪的各種計算元素可包括被配置成實例化本公開的各具體方面的電路。例如,本公開中使用的術語電路可包括被配置成執行固件或開關的功能的專用硬件組件。在其他示例實施方式中,術語電路可包括由實施可用于執行功能的邏輯的軟件指令配置的通用處理單元、存儲器等。在電路包括硬件與軟件組合的示例實施方式中,實現者可編寫實施邏輯的源代碼且該源代碼可被編譯成可由通用處理單元處理的機器可讀代碼。因為本領域技術人員可以明白現有技術已經進化到硬件、軟件或硬件/軟件組合之間幾乎沒有差別的地步,因而選擇硬件或是軟件來實現具體功能是留給實現者的設計選擇。更具體地,本領域技術人員可以明白軟件進程可被變換成等價的硬件結構,而硬件結構本身可被變換成等價的軟件進程。因此,對于硬件實現還是軟件實現的選擇是設計選擇并留給實現者。計算機141通常包括各種計算機可讀介質。計算機可讀介質可以是可由計算機 141訪問的任何可用介質,并且包括易失性與非易失性介質、可移動與不可移動介質兩者。 系統存儲器122包括易失性和/或非易失性存儲器形式的計算機可讀存儲介質,如只讀存儲器(ROM) 123和隨機存取存儲器(RAM) 160。基本輸入/輸出系統IM(BIC)Q包括如在啟動時幫助在計算機141內的元件之間傳輸信息的基本例程,它通常儲存在ROM 123中。RAM 160通常包含處理單元159可以立即訪問和/或目前正在操作的數據和/或程序模塊。作為示例而非限制,圖1示出操作系統125、應用程序126、其他程序模塊127和程序數據128。計算機141還可以包括其他可移動/不可移動、易失性/非易失性計算機存儲介質。僅作為示例,圖1示出了從不可移動、非易失性磁介質中讀取或向其寫入的硬盤驅動器 138,從可移動、非易失性磁盤IM中讀取或向其寫入的磁盤驅動器139,以及從諸如⑶ROM 或其他光學介質等可移動、非易失性光盤153中讀取或向其寫入的光盤驅動器140。可以在示例性操作環境中使用的其他可移動/不可移動、易失性/非易失性計算機存儲介質包括但不限于,磁帶盒、閃存卡、數字多功能盤、數字錄像帶、固態RAM、固態ROM等等。硬盤驅動 138通常由諸如接口 134等不可移動存儲器接口連接至系統總線121,而磁盤驅動139和光盤驅動140通常由諸如接口 135等可移動存儲器接口連接至系統總線121。以上討論并在圖1中示出的驅動器及其相關聯的計算機存儲介質為計算機141提供了對計算機可讀指令、數據結構、程序模塊和其他數據的存儲。在圖1中,例如,硬盤驅
6動器138被示為存儲操作系統158、應用程序157、其他程序模塊156和程序數據155。注意,這些組件可以與操作系統125、應用程序126、其他程序模塊127和程序數據1 相同, 也可以與它們不同。操作系統158、應用程序157、其他程序模塊156和程序數據155在這里被標注了不同的標號是為了說明至少它們是不同的副本。用戶可以通過輸入設備,諸如鍵盤151和定點設備152(通常被稱為鼠標、跟蹤球或觸摸墊),向計算機141輸入命令和信息。其他輸入設備(未示出)可以包括麥克風、游戲桿、游戲手柄、圓盤式衛星天線、掃描儀等等。這些和其他輸入設備通常由耦合至系統總線的用戶輸入接口 136連接至處理單元 159,但也可以由其他接口和總線結構,諸如并行端口、游戲端口或通用串行總線(USB),來連接。監視器142或其他類型的顯示設備也經由接口,諸如視頻接口 132,連接至系統總線 121。除監視器以外,計算機也可以包括其它外圍輸出設備,諸如揚聲器144和打印機143, 它們可以通過輸出外圍接口 133連接。計算機141可使用至一個或多個遠程計算機,如遠程計算機146的邏輯連接在網絡化環境中操作。遠程計算機146可以是個人計算機、服務器、路由器、網絡PC、對等設備或其他常見網絡節點,并且通常包括許多或所有以上關于計算機141所描述的元件,盡管在圖1中僅示出了存儲器存儲設備147。圖1中所示的邏輯連接包括局域網(LAN) 145和廣域網(WAN) 149,但也可以包括其他網絡。這樣的聯網環境在辦公室、企業范圍計算機網絡、內聯網和因特網中是常見的。當在LAN聯網環境中使用時,計算機141通過網絡接口或適配器137連接至LAN 145。當在WAN聯網環境中使用時,計算機141通常包括調制解調器150或用于通過諸如因特網等WAN 149建立通信的其他裝置。可以是內置或外置的調制解調器150可被連接到系統總線121。在網絡化環境中,關于計算機141所描述的程序模塊或其部分可被儲存在遠程存儲器存儲設備中。作為示例而非限制,圖1示出遠程應用程序148駐留在存儲器設備 147上。可以理解,所示的網絡連接是示例性的,且可以使用在計算機之間建立通信鏈路的其他手段。現在參照圖2,其一般描繪其中可實現本公開的各方面的示例環境。本領域技術人員可理解,示出圖2所描繪的示例元素是為了提供用于描述本公開的操作框架。因此,在一些實施例中,每個環境的物理布局可取決于不同的實現方案而有所不同。因此,該示例操作框架將僅被視為說明性的且不以任何方式限制權利要求的范圍。本領域技術人員還可理解,以下討論是介紹性的,且圖2描繪的元素在由圖5描繪的操作過程的討論中更詳細地描述。一般地,圖2描繪了可被配置成包括本公開的各方面的服務器環境的高級概覽。 參考附圖,描繪了可包括被配置成實現包括窗口共享會話在內的遠程呈現會話連接的電路的服務器204。在所描繪的示例中,服務器204可被配置成生成用于連接客戶機的一個或多個會話,諸如會話1到N(其中N是大于2的整數)。簡言之,在本公開的示例實施例中,會話一般可包括由配置成與服務器204的內核214交互的多個子系統(例如,軟件代碼)實現的操作環境。例如,會話可包括實例化諸如桌面窗口之類的用戶界面的進程、跟蹤該窗口內的鼠標移動的子系統、將圖標上的鼠標點擊轉換成實現程序實例的命令的子系統等。會話可由服務器204在逐個用戶的基礎上生成,例如在服務器204通過網絡連接接收來自客戶機201的連接請求時由服務器204生成。一般而言,連接請求首先可由傳輸邏輯210處理,傳輸邏輯210例如可由服務器204的電路實現。在一些實施例中,傳輸邏輯210可包括網絡適配器、可被配置成接收連接消息并將其轉發給引擎212的固件和軟件。如圖2所示, 在一些實施例中,傳輸邏輯210可包括每個會話的協議棧實例。一般而言,每個協議棧實例可被配置成將用戶界面輸出路由到客戶機,以及將從客戶機接收到的用戶輸入路由到與其會話相關聯的會話核心M4。繼續圖2的一般性描述,在本發明的一些示例實施例中,引擎212可被配置成處理對會話的請求;確定每個會話的功能;通過為會話分配一組物理資源來生成會話;以及實例化會話的協議棧實例。在一些實施例中,引擎212可由能實現上述操作過程中的一部分的專門電路組件來實現。例如,一些示例實施例中,該電路在可包括存儲器以及配置成執行實現引擎212的代碼的處理器。如圖2所描繪地,在一些情況下,引擎212可接收連接請求并確定例如許可證可用,并且可為該請求生成會話。在服務器204是包括遠程桌面能力的遠程計算機的情形中,引擎212可被配置成響應于連接請求生成會話而不檢查許可證。如圖2所示,會話管理器216可被配置成接收來自引擎212的消息,并且響應于該消息,會話管理器216可將會話標識符添加到表中;向該會話標識符指派存儲器;以及在指派給該會話標識符的存儲器中生成系統環境變量和子系統進程的實例。如圖2所示,會話管理器216可實例化諸如運行時子系統240之類的環境子系統, 該子系統可包括諸如會話核心244之類的內核模式部分。例如,在一實施例中,環境子系統被配置成將一些服務子集展示給應用程序并向操作系統214的內核提供接入點。在示例實施例中,運行時子系統240可控制進程和線程的執行,并且會話核心244可向內核214的執行程序發送請求以向線程分配存儲器并調度執行它們的時間。在一實施例中,會話核心244 可包括圖形顯示界面246 (⑶I)、安全子系統250和輸入子系統252。在這些實施例中,輸入子系統252可被配置成經由與該會話相關聯的協議棧實例接收來自客戶機201的用戶輸入并將該輸入傳送給合適會話的會話核心對4。在一些實施例中,用戶輸入可包括指示絕對和 /或相對鼠標移動命令、鼠標坐標、鼠標點擊、鍵盤信號、操縱桿移動信號等的信號。例如圖標上的鼠標雙擊的用戶輸入可被會話核心244接收,并且輸入子系統252可被配置成確定圖標位于與該雙擊相關聯的坐標處。輸入子系統252隨后可被配置成向可執行與該圖標相關聯的應用的進程的運行時子系統240發送通知。除了接收來自客戶機201的輸入之外,可從應用和/或桌面接收繪制命令并由GDI 246來處理。⑶I 246 —般可包括能生成圖形對象繪制命令的進程。在該示例實施例中, GDI 246可被配置成將其輸出傳遞給遠程顯示子系統254,在那里,針對附連到該會話的顯示驅動器,命令被格式化。在某些示例實施例中,一個或多個物理顯示器可被附連到服務器 204,例如在遠程桌面情形中。在這些示例實施例中,遠程顯示子系統邪4可被配置成對由遠程計算機系統的顯示驅動器呈現的繪制命令制作鏡像,并經由與該會話相關聯的棧實例將鏡像信息傳送給客戶機201。在服務器204是終端服務器的另一示例實施例中,遠程顯示子系統2M可被配置成包括可不與物理上附連到服務器204的顯示器相關聯的虛擬顯示驅動器,例如服務器204可無頭地運行。在該實施例中,遠程顯示子系統2M可被配置成接收針對一個或多個虛擬顯示器的繪制命令并將它們經由與該會話相關聯的棧實例傳送給客戶機201。在本公開的實施例中,遠程顯示子系統邪4可被配置成確定每個顯示驅動器的顯示分辨率,例如確定與虛擬顯示器相關聯的虛擬顯示驅動器的顯示分辨率或與物理顯示器相關聯的顯示驅動器的顯示分辨率;以及經由相關聯的協議棧實例將分組路由到客戶機 201。在一些示例實施例中,會話管理器216可附加地實例化與該會話的會話標識符相關聯的可被配置成處理該會話的登入和登出的登錄進程的實例。在這些示例實施例中,指示與登錄進程相關聯的圖形用戶界面的繪制命令可被傳送給客戶機201,在那里,客戶機 201的用戶可向登錄屏幕輸入帳戶標識符(例如用戶名/ 口令組合)、智能卡標識符、和/ 或生物測定信息。該信息可被傳送給服務器204并被路由至引擎212以及會話核心244的安全子系統250。例如,在某些示例實施例中,引擎212可被配置成確定用戶帳戶是否與許可證相關聯;并且安全子系統250可被配置成生成該會話的安全令牌。圖3A描繪了其中未實現本發明的技術的被遮蔽的共享窗口。共享窗口會話中的客戶機可接收合成圖像302,該圖像包括共享窗口 304、共享窗口 306以及對應于非共享窗口 308的區域。共享窗口 304遮擋了共享窗口 306。所以,即使共享窗口 306的一部分因共享窗口 304的存在而不可見,其上顯示這些共享窗口的客戶計算機的用戶也可理解共享窗口 306的這一部分為何未被呈現,因為他或她能看到共享窗口 304覆蓋這一部分。共享窗口 304的一部分和共享窗口 306的其它部分因對應于非共享窗口 308的區域而不可見。在該共享窗口會話中的服務器上,對應于非共享窗口 308的區域包含非共享窗口。然而,在客戶機上,如此處所顯示,該窗口不被顯示,而改為顯示空白空間。這可使客戶機的用戶混淆,因為看上去好像共享窗口 304和共享窗口 306被不正確地顯示且其部分缺失。圖:3B描繪了其中實現本發明的技術的圖3A的被遮蔽的共享窗口。這可例如經由圖2所示的系統實現。共享窗口會話中的客戶機可接收合成圖像302a,該圖像包括共享窗口 30 和共享窗口 306a。類似于圖3A,共享窗口 30 遮擋了共享窗口 306a。所以,即使共享窗口 306a的一部分因共享窗口 30 的存在而不可見,其上顯示這些共享窗口的客戶計算機的用戶也可理解共享窗口 306a的這一部分為何未被呈現,因為他或她能看到共享窗口 30 覆蓋這一部分。與圖3A相反,共享窗口 30 和共享窗口 306a均未被非共享窗口遮擋(在圖3A 中,共享窗口 304和共享窗口 306被非共享窗口 308遮擋)。這可例如通過應用如參考圖5 所述的技術來實現。圖4A描繪了包括多個窗口的計算機桌面,其中要共享多個窗口的子集。這可例如經由圖2所示的系統實現。計算機桌面402包括多個窗口——共享窗口 404、共享窗口 406、 共享窗口 408、非共享窗口 410以及非共享窗口 412。如同圖3A和3B,可注意到每一窗口與至少一個其它窗口相交——例如,共享窗口 404遮擋共享窗口 408,且其本身被共享窗口 406以及非共享窗口 410遮擋。圖4B描繪了如客戶機所接收的使用本發明的技術的圖4A的計算機桌面的共享窗口。這可例如經由圖2所示的系統實現。合成圖像40 包括共享窗口 404a、共享窗口 406a、共享窗口 408a以及偽窗口 410a。顯示共享窗口 406a的全部,包括圖4A中窗口 406 中被非共享窗口 412遮擋的那些部分。這是因為窗口 406被遮擋的部位能夠使用如參考圖 5描述的技術來確定。偽窗口 410a在桌面40 中占據圖4A中非共享窗口 410在桌面402中占據的空間。在一實施例中,圖4A中共享窗口 404的部位不能被確定(參考圖5更詳細描述),因此在圖4B中,顯示偽窗口 410來傳達這一信息。在一實施例中,可確定窗口 408的內容,但是已經作出了用與窗口 410相同的尺寸呈現偽窗口 410a的選擇,因此它遮擋窗口 408的一部分。在一實施例中,偽窗口的大小不同于其對應于的窗口,使得可在此對其執行遮擋移除的窗口(諸如窗口 408)不被遮擋。圖5描繪了用于計算機桌面的多個窗口的帶遮擋移除的窗口共享的示例操作過程。圖5的技術可被實現來取圖4A的計算機桌面并從中共享圖4B的共享窗口。這可例如經由圖2所示的系統實現。窗口是共享的,其中在窗口共享會話中,它被指定被發送給客戶機。窗口是分層的,其中它被如此指定,且因此整個窗口被存儲在與存儲桌面的存儲器區域分開的存儲器區域中(且該窗口在桌面上可能被遮擋,因此不能從桌面確定整個窗口)。當窗口是共享的但不是分層的,且另一窗口遮擋其部分,則可能不能從存儲器檢索該窗口中被遮擋的部位, 或者因為從存儲器檢索窗口會產生不令人滿意的結果,諸如要求不可接受的大量計算資源來完成。在這些情況下,非共享窗口可能會遮擋共享窗口的部位,且被遮擋的部位不能被確定。在一實施例中,桌面中的窗口可具有以下特征(1)它既是共享的又是分層的; (2)它是共享的但不是分層的;C3)它不是共享的且遮擋共享窗口的部位,且被遮擋的部位不能被確定(諸如如果窗口不是分層窗口); (4)它不是共享的,且它遮擋共享窗口的部位, 且被遮擋的部位能夠被確定;以及( 它不是共享的,且它不遮擋共享窗口的任何部位。在一實施例中,生成合成圖像——其上繪制要共享的窗口的空白畫布,然后對窗口過兩遍以將共享的窗口如其在桌面上所排列的方式繪制到合成圖像上。在對窗口過第一遍時,對每一窗口檢查三件事。第一,檢查每一窗口以確定其ζ次序(窗口在桌面上的深度;當兩個窗口在桌面上占據相同位置時,具有較小ζ深度的窗口將遮擋具有較大ζ深度的窗口)。其次,檢查每一窗口以確定它是否是共享的,且如果是,則確定它是否有部分被遮擋。如在對窗口過的這一遍中所確定地,合成圖像的各區域被指定為共享并被遮擋或共享但未被遮擋。第三且最后,檢查每一窗口來確定合成圖像中如果要在該合成圖像中呈現窗口則窗口將被呈現的位置。由于合成窗口具有與桌面相同的尺寸,因此該位置可通過按照桌面的左上角的坐標來使窗口偏移來確定。每一窗口的這一位置可被稱為窗口的目標坐標。合成圖像中共享且被遮擋區域是其中要添加共享窗口但窗口的部位不能被確定的區域。合成圖像的共享但未被遮擋區域是其中要添加共享窗口且窗口的部位可被確定的區域,窗口的部位可被確定或者因為其未被桌面上的另一窗口遮擋或者因為其雖然被桌面上的另一區域遮擋但共享窗口的該區域因存儲在與存儲桌面的存儲器區域分開的某些存儲器區域中而可被確定。在過第一遍之后,對每一窗口過第二遍,從具有最大ζ深度的窗口開始,并按照減少的ζ深度的順序對窗口進行。根據其如上所述的特征處理每一窗口。如果窗口既是共享的且又是分層的,則將窗口從存儲窗口的存儲器區域(與存儲桌面的存儲器區域分開;這可被稱為窗口緩沖區,它可構成系統存儲器的一部分)復制到合成圖像的目標坐標。由該窗口占據的區域被添加到共享未被遮擋區域。如果窗口是共享的但不是分層的,則將存儲桌面的存儲器區域中所呈現(且由此可見)的窗口的部位復制到合成圖像中該窗口的目標坐標處。如果窗口在桌面上被部分遮擋,將不呈現其全部,因此不將其全部復制到合成圖像。如果窗口不是共享的,且它與共享、被遮擋區域相交,則可將該遮擋的指示添加到合成圖像中此窗口的目標坐標處。這一指示可包括偽窗口——與此窗口具有相同尺寸但不具有此窗口的內容(可以是空白的)的窗口。從被遮擋的共享窗口區域410a中移除對應于此窗口的區域。如果窗口不是共享的,且它與未被遮擋的共享區域相交,則可向合成圖像在同共享的未被遮擋區域與此窗口占據的區域之間的相交相對應的區域中添加對此的指示。這一指示可包括透明陰影的形式。這可向客戶機處的用戶傳達共享窗口的某一部位被非共享窗口遮擋的信息。在另一實施例中,不添加任何指示。如果窗口不是共享的,且它不與被遮擋或共享的未被遮擋的區域相交,則不向合成圖像添加任何東西。在過第二遍之后,合成圖像現在包括共享的未被遮擋的窗口(其各部位可能被其它共享窗口遮擋)以及對未被解決的遮擋的指示,諸如通過偽窗口。然后對合成圖像編碼 (例如,壓縮)并將其發送到客戶機以便在客戶機的顯示設備上顯示。可以理解,存在實現類似結果但不精確地包括對窗口的兩遍的技術。例如,確定窗口 ζ次序、以及確定合成圖像的共享未被遮擋和共享被遮擋區域的操作可在分開的遍中執行。參考圖5所述的這些技術在以下參考操作502-516更詳細描述。盡管圖5的操作討論了四個窗口,但可以理解,本發明的技術可應用于處于被共享和/或被遮擋的任何狀態下以及按任何ζ次序的任何數量個窗口。操作502描繪了確定多個窗口的ζ次序,其中第一窗口具有多個窗口中最大的ζ 距離。窗口可被認為在桌面上具有ζ次序——具有較大ζ距離的窗口將被具有較小ζ距離的窗口遮擋。在以下操作中,可通過以ζ次序遍歷窗口,從具有最大ζ距離的窗口開始,并以具有最小ζ距離的窗口結束來處理窗口。在一實施例中,窗口的ζ距離可被存儲在其元數據中,或由諸如操作系統等系統中管理這些窗口的某一管理部分存儲。在這樣的實施例中,每一窗口的ζ距離可通過檢查其被存儲的位置來確定。操作504描繪確定多個計算機窗口中第一窗口在桌面上的位置。如同與操作502 一樣,該信息可被存儲在窗口的元數據中,或可由系統中管理這些窗口的某一管理部分存儲。在一實施例中,操作504包括基于第一窗口相對于計算機桌面的共享窗口位置來確定第一窗口的位置。如上所述,這可利用第一窗口的目標坐標來完成。操作506描繪確定第一窗口是共享的且是分層的。可以通過檢查服務器用戶設置的用來表示該窗口要被共享的窗口的標志來確定窗口是共享的。可通過檢查與窗口相關聯的元數據來查看“分層標志”,諸如MICR0S0FTWIND0WS⑧中的WS_EX_LAYERED (WS_EX_分層) 標志來確定窗口是分層的,或設置類似的指示符。
操作508描繪了基于第一窗口的位置將第一窗口復制到合成圖像。為了按照共享窗口在服務器上的相同排列來向客戶機顯示共享窗口,共享窗口的排列必須已知。在合成圖像包括與共享窗口的桌面相同的尺寸的情形中,則這例如可通過使用共享窗口對于桌面的相對位置來完成。例如,如果共享窗口的左上角位于桌面的左上角向右70像素、向下60 像素處,則可通過復制第一窗口使得第一窗口的左上角位于合成圖像的左上角向右70像素、向下60像素處來在合成圖像中維護第一窗口的相對位置。在一實施例中,合成圖像包括位像。可使用各種其它圖像格式,諸如聯合圖象專家組(JPEG)或圖形交換格式(GIF)。在一實施例中,操作508包括在將窗口復制到合成圖像之前禁止多個計算機窗口的每一窗口的桌面合成。某些操作系統中的應用程序,諸如MICROSOFT WINDOWS VISTA 及其桌面窗口管理器(DWM)不向桌面的存儲器區域直接繪制窗口。相反,這些窗口被繪制到視頻存儲器中的屏幕外存儲器區域中,然后被呈現到桌面圖像中。在包括這樣的桌面合成特征的一些實現中,當共享窗口被繪制到這些屏幕外存儲器區域時,在沒有窗口的邊界框的情況下繪制窗口,且當窗口稍后被會繪制到桌面的存儲器區域時圍繞窗口繪制該邊界。 在這種情況中,從這些屏幕外存儲器區域中檢索共享窗口將導致檢索部分共享窗口,因為該窗口將缺少其框邊界。這一問題可通過禁用這樣的桌面合成特征來減輕。在一實施例中,操作508包括在將任何共享窗口復制到合成圖像之前為多個計算機窗口中所共享的每一窗口設置分層標志。在某些操作系統中,分層和未分層的窗口被不同地處理。如果窗口不是分層的,則它僅被繪制到桌面的存儲器區域,而根本不繪制窗口中被另一窗口遮擋的那些部位。如果窗口是分層的,則將整個窗口繪制到屏幕外存儲器區域, 在那里存儲該窗口,然后將窗口中未被遮擋的部位(可以是整個窗口)繪制到桌面的存儲器區域。由此,通過在支持為每一共享窗口設置分層標志的環境中為每一共享窗口設置分層標志,可使得共享窗口中被遮擋的那些部位在存儲器中可用以便傳送給客戶機,盡管它們在服務器桌面上不可見。在一實施例中,操作508包括將第一窗口從窗口緩沖區復制到合成圖像。窗口緩沖區可包括如參考操作506所述的屏幕外存儲器區域。在其中分層窗口被存儲在屏幕外存儲器區域中的實施例中,該窗口可被復制到合成圖像,使得整個窗口被復制到合成圖像,即使窗口的某一部分在桌面上被遮擋。操作510描繪了確定多個計算機窗口中的第二窗口在桌面上的位置;確定第二窗口是共享的但不是分層的;以及基于第二窗口的位置將第二窗口從計算機桌面復制到合成圖像。在使用MICROSOFT WINDOWS 操作系統的實施例中,這例如可通過對GetWindowDCO (取窗口 DC0)函數的調用來實現。在第二窗口是共享的時候,將其復制到合成圖像以便傳送到客戶機。在其不是分層的時候(諸如第二窗口的分層標志未被置位),則第二窗口可能在存儲器中僅被存儲在桌面的存儲器區域中。在這樣的情況中,可從桌面的存儲器區域檢索它并從中將其復制到合成圖像。操作512描繪了確定多個計算機窗口的第三窗口在桌面上的位置;確定第三窗口不是共享且與合成位圖的被遮擋的共享區域相交;以及基于第三窗口的位置向合成位圖添加對第三窗口的指示。
這可以包括第一窗口是共享窗口且第三窗口是遮擋第一窗口的非共享窗口且第一窗口的被遮擋部位不能確定的情況。這可在第一窗口僅被繪制到桌面的存儲器區域中時發生,諸如因為未對第一窗口設置分層標志。在某些情況下,窗口的分層標志不能被設置。 例如,窗口的一部位可由多個進程所有,且執行本發明的技術的實體不具有修改窗口的充分特權。在這樣的情況中,此實體設置分層標志的嘗試可能會失敗。在一實施例中,對第三窗口的指示包括偽窗口,偽窗口具有與第三窗口相同的尺寸以及與第三窗口的位置相對于第一窗口的位置相同的相對于第一窗口的位置。在另一實施例中,偽窗口具有與第三窗口不同的尺寸,諸如如上參考圖4B所述(其中偽窗口也將覆蓋可對其執行遮擋移除的共享窗口,在此實施例中,可設置偽窗口的尺寸使其不會遮擋這另一共享窗口)。由于不能確定第一窗口的一部位,因此在沒有關于發生了什么指示的情況下,第一窗口對客戶機用戶而言看上去將是不完整的。在一實施例中,對遮擋的指示包括偽窗口。 偽窗口可包括具有與第三窗口相同的尺寸但不具有第二窗口的內容(由于第二窗口不是共享的)的窗口。例如,偽窗口可具有第三窗口的邊界框,但該邊界框內將其繪制為全黑 410a。操作514描繪了確定多個計算機窗口中的第四窗口在桌面上的位置;確定第四窗口不是共享的,且該第四窗口與合成位圖的共享區域相交,且第四窗口不與合成位圖的被遮擋的共享區域相交;以及將對第四窗口與合成位圖的共享區域相交的指示添加到合成位圖。這可包括其中第四窗口遮擋第一窗口的一部位,但整個第一窗口被存儲在屏幕外存儲器區域中并從中檢索——而非存儲在桌面的存儲器區域中并從中檢索的情況。在這樣的情況中,盡管第四窗口引起的遮擋不會限制可發送給客戶機的第一窗口的量,但仍優選地向客戶機發送對該服務器側遮擋的指示。例如,這可允許客戶機計算機的用戶了解服務器計算機的用戶在服務器用戶的桌面上不能看到第一窗口中被第四窗口遮擋的該部位。這例如可通過向合成位圖繪制在第一窗口被第四窗口遮擋的部位之上的有陰影的透明區域來實現。操作516描繪了向客戶機發送合成圖像。這可諸如通過根據遠程呈現會話協議并在諸如INTERNET 之類的通信網絡上向客戶機發送圖像來完成。在實施例中,操作516包括在將合成圖像發送給客戶機之前對其編碼。各種遠程呈現會話實現在將合成圖像發送給客戶機之前對其編碼以降低帶寬要求。例如,當合成圖像包括位像時,可將其編碼為JPEG圖像以減少其大小,且因此減少在通信網絡上發送它所需的帶寬。結論盡管已經結合各附圖所示的較佳方面描述了本發明,但要理解,可使用其它相似方面或者可對所述方面進行修改或添加來執行本發明的相同功能而不脫離本發明。因此, 本發明應當不限于任何單個方面,而應按照所附權利要求書的廣度與范圍來解釋。例如,本文描述的各種過程可用硬件或軟件、或兩者的組合來實現。因此,所公開的各實施例的方法和裝置或其某些方面或部分可采用包含在諸如軟盤、CD-ROM、硬盤驅動器或任何其他機器可讀存儲介質等有形介質中的程序代碼(即,指令)的形式。當程序代碼被加載到諸如計算機等機器并由其執行時,該機器變為被配置成實施所公開的各實施例的裝置。除了此處明確闡述的具體實現之外,考慮此處所公開的說明書,其它方面和實現將對本領域的技術人員是顯而易見的。說明書和所示實現旨在僅被認為是示例。
權利要求
1.一種用于共享計算機桌面的多個計算機窗口中的計算機窗口的方法,包括 確定所述多個計算機窗口中的第一窗口在桌面上的位置(504);確定所述第一窗口是共享的且是分層的(506);基于所述第一窗口的位置,將所述第一窗口從窗口緩沖區復制到合成圖像,所述窗口緩沖區與所述計算機桌面分開地存儲所述第一窗口(508);以及向客戶機發送所述合成圖像(516)。
2.如權利要求1所述的方法,其特征在于,還包括 在將合成圖像發送給客戶機之前對所述合成圖像編碼。
3.如權利要求1所述的方法,其特征在于,還包括 在將窗口復制到所述合成圖像之前禁用桌面合成。
4.如權利要求1所述的方法,其特征在于,還包括在將任何共享窗口復制到所述合成圖像之前,為所述多個計算機窗口中所共享的每一窗口設置分層標志。
5.如權利要求1所述的方法,其特征在于,還包括 確定所述多個窗口的ζ次序;以及其中所述第一窗口具有所述多個窗口中最大的ζ距離。
6.如權利要求1所述的方法,其特征在于,所述合成圖像的尺寸等于所述桌面的尺寸。
7.如權利要求1所述的方法,其特征在于,還包括 確定所述多個計算機窗口中的第二窗口在桌面上的位置; 確定所述第二窗口是共享的但不是分層的;以及基于所述第二窗口的位置將所述第二窗口從計算機桌面復制到所述合成圖像。
8.如權利要求1所述的方法,其特征在于,還包括 確定所述多個計算機窗口中的第三窗口在桌面上的位置;確定所述第三窗口不是共享的且與合成圖像的被遮擋共享區域相交;以及基于所述第三窗口的位置將對所述第三窗口的指示添加到所述合成圖像。
9.如權利要求1所述的方法,其特征在于,還包括 確定所述多個計算機窗口中的第四窗口在桌面上的位置;確定所述第四窗口不是共享的、所述第四窗口與所述合成圖像的共享區域相交、且所述第四窗口不與所述合成圖像的被遮擋共享區域相交;以及將對所述第四窗口與所述合成圖像的共享區域相交的指示添加到合成圖像。
10.如權利要求1所述的方法,其特征在于,確定所述多個計算機窗口中的所述第一窗口在桌面上的位置包括基于所述第一窗口相對于所述計算機桌面的共享窗口位置來確定所述第一窗口的位置。
11.一種用于共享計算機桌面上的多個計算機窗口中的計算機窗口的系統,包括 處理器;通信地耦合到所述處理器的存儲器(22),承載計算機可讀指令,當在所述處理器上執行所述計算機可讀指令時,使得所述處理器執行以下操作,包括 確定所述多個計算機窗口中的第一窗口在桌面上的位置(504);確定所述第一窗口是共享的且是分層的(506); 基于所述第一窗口的位置將所述第一窗口復制到合成圖像(510);以及向客戶機發送所述合成圖像(516)。
12.如權利要求11所述的系統,其特征在于,所述存儲器還承載在所述處理器上執行時使得所述處理器執行以下操作的指令,所述操作包括確定所述多個計算機窗口中的第二窗口在桌面上的位置; 確定所述第二窗口是共享的但不是分層的;以及基于所述第二窗口的位置將所述第二窗口從計算機桌面復制到所述合成圖像。
13.如權利要求11所述的系統,其特征在于,所述存儲器還承載在所述處理器上執行時使得所述處理器執行以下操作的指令,所述操作包括確定所述多個計算機窗口中的第三窗口在桌面上的位置; 確定所述第三窗口不是共享的且與所述合成圖像的被遮擋共享區域相交;以及基于所述第三窗口的位置將對所述第三窗口的指示添加到合成圖像。
14.如權利要求11所述的系統,其特征在于,對所述第三窗口的指示包括偽窗口,所述偽窗口具有與第三窗口相同的尺寸以及與所述第三窗口的位置相對于所述第一窗口的位置相同的相對于所述第一窗口的位置。
15.如權利要求11所述的系統,其特征在于,所述圖像包括位像。
全文摘要
公開了用于移除遮擋的窗口和應用共享的技術。在一實施例中,該技術從空白的合成圖像開始,將對其添加共享窗口。對從中共享至少一個窗口的桌面的每一窗口,從最大z深度到最小z深度遍歷窗口,基于窗口是否是共享的和是否被遮擋來處理窗口。共享窗口被復制到合成圖像。當共享窗口的一部分被遮擋且不能被檢索時,對該遮擋的指示被添加到合成圖像。當各窗口已被處理之后,對合成圖像編碼并將其發送到其將顯示的客戶機計算機以產生計算機之間的窗口共享。
文檔編號H04L29/08GK102196034SQ201110065889
公開日2011年9月21日 申請日期2011年3月9日 優先權日2010年3月9日
發明者A·A·陳, S·R·尼如杜, W·R·舒米德爾 申請人:微軟公司