虛擬桌面原理及實現

2021-04-24 17:11:27 字數 2779 閱讀 9486

虛擬桌面原理及實現

一、為什麼要使用虛擬桌面。

場景一、

上班的時候,我們經常會趁老闆不注意,去一些工作時間不應該去的**,或是執行一些不應該執行的程式,比如一些聊天工具,小遊戲,**軟體等等。而且,經常會開啟一大堆。當老闆或其他同事來到你的桌前的時候,你正在手忙腳亂的關著這些程式,而且,還來不及儲存想要儲存的東西。

場景二、

在你給別人做講演的時候,需要在電腦桌面上展示很多資料。當然乙個桌面經常是遠遠不夠展示的,而且,需要經常的切換畫面,由於開啟的資料太多,每次還的工作列裡找上一陣。很影響講演的流暢性。

虛擬桌面程式就是用來解決以上的問題。

場景一、

你可以用虛擬桌面程式同時生成多個桌面。乙個桌面開啟著你工作的資料,程式等等。乙個桌面開啟著你的聊天工具及一些你不想別人看到的東西。當然你還可以用乙個桌面放一些你想訪問的**啊,**資訊啊等等。剩下的只是簡單的按一下快捷鍵來切換不同的桌面。

場景二、

同場景一,你可以用虛擬桌面程式生成多個桌面,把要講演的資料提前分配到多個桌面。剩下的只是簡單的按一下快捷鍵來切換不同的桌面。

二、虛擬桌面實現原理

1. 原理概況

每次開機的時候,我就建立多個桌面,然後定時監控快捷鍵(ctrl+數字鍵),如果有快捷鍵被按下,就切換到數字鍵對應編號的桌面。

2.什麼是桌面?

每乙個執行著window nt 的系統中都有乙個window 工作站物件,這個物件是安全物件的第一層,是所有使用者安全物件的繼承之源,每乙個window 工作站物件可以擁有一些桌面物件,每乙個桌面都擁有乙個視窗鏈。視窗鏈裡存放著顯示在所屬桌面的各種視窗。window nt 用了兩個桌面視窗物件,乙個是用來處理登陸介面、遮蔽、鎖住工作站等,乙個是我們登陸之後進來操作的視窗了。

window nt通過"explorer.exe"程序來管理這個桌面物件。這就是為什麼我們在任務管理器裡殺掉"explorer.exe",我們的桌面就會消失的原因。

3.建立乙個桌面。

function createanewdesktop(desktopname: string): boolean;

varsin   : tstartupinfo;

pin   : tprocessinformation;

hdesk : hdesk;

begin

result := false;

hdesk := createdesktop(pchar(desktopname),nil,nil,0,maximum_allowed,nil);

tryfillchar(sin,sizeof(sin),0);

sin.cb := sizeof(sin);

sin.lpdesktop := pchar(desktopname);

createprocess(pchar(windowdirectory+'explorer.exe'),nil,nil,nil,false,0,nil,nil,sin,pin);

sleep(2000);

result := true;

finally

closedesktop(desk);

end;

end;

4.查詢當前已經存在的桌面。

列舉桌面的api是enumdesktops.

bool enumdesktops(

hwinsta hwinsta,                            // 當前的windowsstation控制代碼

desktopenumproc lpenumfunc,       // **函式,由系統呼叫。

lparam lparam                                //傳遞給**函式的引數指標

);通常我們定義個一**函式,定義乙個全域性tstringlist類物件,在**函式裡將列舉到的桌面的名稱增加到tstringlist裡。

var

sttoplist : tstringlist;

function enumdesktopproc(desktop: lptstr; param: lparam): boolean; stdcall;

begin

if (desktop<>'winlogon') and (desktop<>'disconnect') then 

desktplist.add(desktop);

result := true;

end;

procedure enumeratedesktops;

begin

enumdesktops(getprocesswindowstation, @enumdesktopproc, nil);

end;

5.切換桌面。

procedure desktopswitch(desktopname: string);

var hdesk: hdesk;

begin

hdesk:=opendesktop(pchar(desktopname), df_allowotheraccounthook, false, mximum_allowed);

sleep(100);

switchdesktop(hdesk);

closedesktop(hdesk);

end;

三、結束語

你可以把這個虛擬桌面程式做成乙個服務,每次開機就自動載入。這樣,你就可以每次都擁有多個桌面了。

附件virtualdesktop.rar是執行程式,無須安裝。

虛擬 DOM 實現原理

為什麼要用?好處是啥 直接操作dom引發頁面重排重繪,頻繁操作會造成頻繁渲染,非常消耗效能 我們希望的是每次修改能夠只修改我們想要修改的dom而不是重新渲染所有的dom 而虛擬dom的思路是 前提關鍵是 在虛擬dom樹上的操作不會渲染到檢視 一 將dom樹轉換成js物件樹,產生第乙個虛擬dom樹 與...

桌面虛擬化VS虛擬桌面基礎架構

我想很多人都對桌面虛擬化和虛擬桌面基礎架構這兩種技術的區別感到困惑。從名字上看兩者的區別確實不是很明顯,但隱藏在它們後面的技術卻是有很大不同。我們可以利用桌面虛擬化技術在自己的pc上執行乙個虛擬機器,而虛擬桌面基礎架構為遠端使用者提供桌面映象資料中心,推送桌面環境到使用者終端。從以上看出,兩種技術的...

虛擬桌面現狀

1 目前雲桌面廠商中領導者幾乎清一色技術出身,技術方面自然沒問題,但是銷售方面普遍欠缺。在進行產品路線規劃中主要想著做一款技術領先的產品,而不是設計一套銷售模式領先的產品。2 廠商中負責銷售的領導對雲桌面三大作用理解不夠,無法明白為使用者解決安全問題和管理問題的重要性遠比解決客戶成本問題要重要的多。...