青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉,開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

虛擬桌面技術的初步探討

Posted on 2010-01-13 21:38 S.l.e!ep.¢% 閱讀(1524) 評論(0)  編輯 收藏 引用 所屬分類: VC
【原創】虛擬桌面技術的初步探討
發送 QQ 消息給 newjueqi newjueqi 當前離線 添加 newjueqi 的聲望 反映此帖

標 題: 【原創】虛擬桌面技術的初步探討
作 者: newjueqi
時 間: 2009-02-21,21:43
鏈 接: http://bbs.pediy.com/showthread.php?t=82537

【文章標題】:?虛擬桌面技術的初步探討??
【文章作者】:??newjueqi??
【作者郵箱】:?zengjiansheng1@126.com
【作者QQ號】:?190678908
【編寫語言】:VC++6.0
【操作平臺】:?XP-SP2
【作者聲明】:?這幾天研究了虛擬桌面技術,感覺到這是一種非常有意思的技術,這篇就當成是學習筆記吧!本人只是感興趣,沒有其它目的,失誤之處敬請給位大俠原諒!

什么是桌面?
??????每一個運行著Window?NT?的系統中都有一個Window?工作站對象,這個對象是安全對象的第一層,是所有用戶安全對象的繼承之源,每一個Window?工作站對象可以擁有一些桌面對象,每一個桌面都擁有一個窗口鏈。窗口鏈里存放著顯示在所屬桌面的各種窗口。Window?NT?用了兩個桌面窗口對象,一個是用來處理登陸界面、屏蔽、鎖住工作站等,一個是我們登陸之后進來操作的窗口了。?
????Window?NT通過"explorer.exe"進程來管理這個桌面對象。這就是為什么我們在任務管理器里殺掉"explorer.exe",我們的桌面就會消失的原因。

什么是虛擬桌面?
?????虛擬桌面是一種可以在電腦原來桌面基礎上再創造一個新的桌面出來,在新的桌面上可以進行日常的操作。

虛擬桌面的用途?
(1)??本人覺得這門技術最重要的用途就是可以把任何有UI界面的軟件變成一個后臺軟件(即看不到任何界面,包括啟動界面)
(2)??可以時工作時是一個桌面,娛樂時是一個桌面(大家可以去下載網站上搜索一下這類軟件的用途,上面的功能描述非常有意思)

虛擬桌面的實現方法
在windows中,要創建一下新的桌面可用到API:CreateDesktop(),函數聲明如下
HDESK?CreateDesktop(
??LPCTSTR?lpszDesktop,?????????//?新桌面的名稱
??LPCTSTR?lpszDevice,??????????//?為NULL
??LPDEVMODE?pDevmode,??????????//?為NULL
??DWORD?dwFlags,???????????????//?指定應用程序在桌面的兼容方式
??ACCESS_MASK?dwDesiredAccess,?//?指定新桌面的權限
??LPSECURITY_ATTRIBUTES?lpsa???//指定句柄是否能被繼承
);

返回值是新創建的桌面的句柄。

那么新建了一個桌面后,怎么在這個新的桌面上運行程序呢?先不要著急,我們先來回顧一下創建進程的函數CreateProcess(),在這個函數的參數中StartupInfo中有?lpDesktop這么一個屬性,如果這個屬性為NULL則在當前的桌面創建線程,如果指定了桌面的名稱,則進程將會在指定的桌面上啟動,所以想在創建的新桌面里初始化一些程序,只要把lpDesktop參數指定為新桌面的名稱即可。

另外也有一個簡單的方法可把新的線程掛在新創建的桌面下,就是使用API函數SetThreadDesktop(),聲明如下:
BOOL?SetThreadDesktop(
??HDESK?hDesktop??//?指向指定的桌面句柄
);

但使用這個函數要注意一點,根據MSDN的說法:The?SetThreadDesktop?function?will?fail?if?the?calling?thread?has?any?windows?or?hooks?on?its?current?desktop?(unless?the?hDesktop?parameter?is?a?handle?to?the?current?desktop)??意思就是除非要指定的桌面句柄是當前的桌面,不然的話這個函數的調用會失敗如果當前線程擁有任何的窗口(即UI界面).

怎么實現不同桌面之間的切換呢?
?????要在不同的桌面之間切換,可用API函數SwitchDesktop,聲明如下:
BOOL?SwitchDesktop(
??HDESK?hDesktop??//?桌面的句柄
);

另外也可通過點擊“切換”按鈕實現桌面的切換。

但又引申出一個新的問題,必須要知道各個桌面的句柄,獲取桌面的句柄可通過API函數GetThreadDesktop,函數的聲明如下:
HDESK?GetThreadDesktop(
??DWORD?dwThreadId???//線程的ID);

返回值就是指定線程所在的桌面了。
????而且我們必須要認清的是創建新桌面的線程啟動是在舊的桌面上,所以可以用下面的語句輕松獲得當前桌面的句柄:
GetThreadDesktop(GetCurrentThreadId());???
返回值就是舊的桌面句柄。

怎么關閉新創建的桌面?
?????這個問題其實也不用我們擔心,微軟已經替我們想好了^-^?,?用CloseDesktop函數可輕松實現這個功能,函數聲明如下:
????BOOL?CloseDesktop(
??HDESK?hDesktop??//?指定要關閉的桌面的句柄
);

下面貼一段代碼的例子,是在新創建的桌面上運行計算器(calc.exe)實現計算器的后臺運行

#include?<windows.h>

HINSTANCE?hInst;??//當前的實例句柄
HWND?hWnd;????????//窗口句柄
HDESK?hvirtualDesk;????//新創建的虛擬桌面句柄
PROCESS_INFORMATION?pi;?//計算器進程信息

//消息循環
LRESULT?CALLBACK?WinProc(
??????HWND?hwnd,??????//?handle?to?window
??????UINT?uMsg,??????//?message?identifier
??????WPARAM?wParam,??//?first?message?parameter
??????LPARAM?lParam???//?second?message?parameter
??????????????)
{
??switch(uMsg)
??{
??case?WM_CLOSE:
??????TerminateProcess(?pi.hProcess,?1?);
??????CloseDesktop(?hvirtualDesk?);
??????DestroyWindow(hwnd);
??????PostQuitMessage(0);
??????break;

??case?WM_DESTROY:

??????CloseDesktop(?hvirtualDesk?);
??????PostQuitMessage(0);
??????break;

??case?WM_HOTKEY:?

????if?(?0x0001?==?wParam?)?//為退出桌面熱鍵Alt+Q
????{
????????????SendMessage(hwnd,WM_CLOSE,0,0);????
????}
????break;

??default:
????return?DefWindowProc(hwnd,uMsg,wParam,lParam);
??}
??return?0;
}

//創建虛擬桌面
void?CrateVirtualDesk()
{
??//把新創建的虛擬桌面句柄存放在hvirtualDesk
??hvirtualDesk=CreateDesktop(?"newdesk",
????????????????NULL,
????????????????NULL,
????????????????DF_ALLOWOTHERACCOUNTHOOK,???
????????????????GENERIC_ALL,?????
????????????????NULL);???

}


//在虛擬桌面上運行一個計算器的實例
void?RunCalc()
{
??STARTUPINFO?si;???
??
??ZeroMemory(?&si,?sizeof(si)?);??
??si.cb?=?sizeof(si);???
????si.lpDesktop?=?"newdesk";???
??
??ZeroMemory(?&pi,?sizeof(pi)?);???
??
??if(?!CreateProcess(?NULL,???????????????????
????"calc",???????????????????????????????????????
????NULL,???????????????????????
????NULL,??????????????????????
????FALSE,??????????????????????
????0,??????????????????????
????NULL,??????????????????????????
????NULL,??????????????????????
????&si,???????????????????????
????&pi?)?)??????
??{?????
????MessageBox(NULL,"運行計算器失敗","Error",0);?????
????ExitProcess(1);?????
??}?????

}

int?WINAPI?WinMain(
????HINSTANCE?hInstance,??????//?handle?to?current?instance
????HINSTANCE?hPrevInstance,??//?handle?to?previous?instance
????LPSTR?lpCmdLine,??????????//?command?line
?????int?nCmdShow??????????????//?show?state
???????????)
{
??WNDCLASS?wndcls;
??MSG?msg;

??hInst=hInstance;
??ZeroMemory(?&wndcls,sizeof(wndcls)?);
??wndcls.cbClsExtra=0;
??wndcls.cbWndExtra=0;
??wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
??wndcls.hInstance=hInstance;
??wndcls.lpfnWndProc=WinProc;
??wndcls.lpszClassName="hello";
??wndcls.lpszMenuName=NULL;
??wndcls.style=CS_HREDRAW?|?CS_VREDRAW;
??RegisterClass(&wndcls);
??
??hWnd=CreateWindow(?"hello","hello",WS_OVERLAPPEDWINDOW,
????300,300,100,100,NULL,NULL,hInstance,NULL?);
??
??//注冊所需的熱鍵,Alt+Q為退出創建的虛擬桌面
??if(?!RegisterHotKey(?hWnd,0x0001,MOD_ALT?,'Q'?)?)?????
????{?????
????????//處理退出進程?????
????????return?TRUE;?????
????}?????

??//創建虛擬桌面
??CrateVirtualDesk();
??
??//在虛擬桌面上運行一個計算器的實例
??RunCalc();

??ShowWindow(?hWnd,SW_SHOWNORMAL?);
??UpdateWindow(?hWnd?);
??
??while(?GetMessage(?&msg,NULL,0,0?)?)
??{
????TranslateMessage(&msg);
????DispatchMessage(&msg);
??}

??return?msg.wParam;
}

程序運行后如下圖
名稱:  1.JPG
查看次數: 941
文件大小:  114.2 KB

紅框的virtualDesktop.exe就是代碼創建的程序,calc.exe就是計算器的進程,大家可以看一下任務欄,是沒有計算器的影蹤的,證明是運行在另一個桌面上,從另一個角度來看,就是運行在后臺(只要不切換到另一桌面)。

上傳的附件
文件類型: rar 虛擬桌面技術的初步探討.rar (216.7 KB, 293 次下載) [誰下載?]
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产亚洲视频| 久久人人97超碰国产公开结果 | 女生裸体视频一区二区三区| 久久国产一区二区| 久久成人精品视频| 欧美成人免费网| 欧美午夜片在线免费观看| 欧美三级乱码| 国产亚洲一级高清| 亚洲黄色高清| 亚洲欧美视频| 蜜臀av一级做a爰片久久| 欧美黄色一级视频| 亚洲视屏在线播放| 久久久99国产精品免费| 欧美岛国在线观看| 国产伦精品一区二区三区在线观看 | 欧美午夜精品久久久久久孕妇 | 嫩草成人www欧美| 亚洲免费视频成人| 午夜免费电影一区在线观看| 久热re这里精品视频在线6| 亚洲国产老妈| 亚洲免费在线观看视频| 美女精品视频一区| 国产精品视频大全| 亚洲人成毛片在线播放| 欧美一区影院| 亚洲人成毛片在线播放女女| 午夜精品久久久久久久| 欧美激情一区二区三区在线视频观看 | 午夜亚洲性色福利视频| 欧美另类久久久品| 激情视频一区二区三区| 欧美一级黄色网| 亚洲毛片在线看| 麻豆精品在线观看| 国产一区二区中文| 亚洲欧美日韩精品久久亚洲区| 欧美国产日本| 久久aⅴ国产欧美74aaa| 国产精品视屏| 亚洲一区二区三区精品动漫| 亚洲国产精品成人一区二区 | 欧美日本中文| 亚洲韩国青草视频| 另类天堂av| 久久av二区| 国产一区二区久久久| 亚洲欧美中文日韩在线| 日韩视频国产视频| 欧美日韩www| 一区二区三区欧美日韩| 亚洲国产精品电影在线观看| 久久只有精品| 亚洲激情在线观看| 欧美大片91| 老牛影视一区二区三区| 亚洲观看高清完整版在线观看| 美女91精品| 欧美jizz19hd性欧美| 91久久综合亚洲鲁鲁五月天| 嫩模写真一区二区三区三州| 久久影视三级福利片| 亚洲高清不卡在线观看| 欧美国产91| 欧美激情黄色片| 亚洲一二三区在线观看| 亚洲图片你懂的| 国产日韩在线看片| 久久婷婷国产综合精品青草| 久久国产主播| 亚洲毛片av| 亚洲专区一区| 国产精品久久久久久久久久免费看| 99精品视频网| 一本一道久久综合狠狠老精东影业| 欧美日韩在线不卡一区| 性欧美video另类hd性玩具| 午夜精品福利在线观看| 激情伊人五月天久久综合| 免费观看日韩| 欧美日韩精品一区二区三区四区| 亚洲一区二区三区精品在线| 午夜激情综合网| 最新中文字幕亚洲| 亚洲一区二区日本| 尤物精品国产第一福利三区| 91久久精品国产91久久性色| 国产精品国产三级国产普通话蜜臀| 久久国产精品亚洲77777| 老鸭窝亚洲一区二区三区| 一区二区三区欧美在线观看| 性亚洲最疯狂xxxx高清| 亚洲精品欧美一区二区三区| 亚洲午夜精品久久久久久app| 国内精品久久久久影院优| 亚洲欧洲综合另类在线| 国产嫩草一区二区三区在线观看| 欧美阿v一级看视频| 国产精品久久久久三级| 欧美国产综合视频| 国产精品一区二区久久久久| 欧美激情国产日韩| 国产性猛交xxxx免费看久久| 亚洲人成网站777色婷婷| 国内精品一区二区三区| 亚洲精选一区| 亚洲成人资源网| 午夜在线电影亚洲一区| 99综合精品| 免费观看国产成人| 久久久亚洲精品一区二区三区| 欧美精品系列| 欧美多人爱爱视频网站| 国产一区二区三区四区在线观看| 亚洲精品自在久久| 亚洲麻豆国产自偷在线| 欧美h视频在线| 欧美激情综合色| 在线免费观看一区二区三区| 欧美一级一区| 欧美一区二区大片| 欧美香蕉大胸在线视频观看| 亚洲国产欧美日韩另类综合| 在线成人亚洲| 美女视频一区免费观看| 美女精品在线| 又紧又大又爽精品一区二区| 久久久久国产精品一区二区| 久久久水蜜桃av免费网站| 欧美a级一区二区| 国产日韩欧美二区| 午夜久久福利| 久久久久久久久久久久久久一区| 国产精品亚洲视频| 午夜免费在线观看精品视频| 欧美一区二区视频观看视频| 国产精品无码专区在线观看| 久久精品国产欧美亚洲人人爽| 欧美三级在线播放| 欧美午夜在线| 亚洲国产影院| 狠狠久久五月精品中文字幕| 99伊人成综合| 亚洲国产精品女人久久久| 久久裸体艺术| 羞羞视频在线观看欧美| 国产精品久久久久久久第一福利| 欧美一区在线直播| 亚洲国产另类久久精品| 久久国产日韩欧美| 99精品免费网| 亚洲福利视频免费观看| 国产日韩欧美| 国产欧美日韩亚洲精品| 在线观看亚洲视频| 欧美一区二区免费观在线| 亚洲午夜未删减在线观看| 亚洲人午夜精品免费| 欧美日韩dvd在线观看| 欧美激情一二三区| 欧美一区二区三区视频免费播放 | 久久婷婷丁香| 亚洲精品一二| 亚洲精品久久久一区二区三区| 欧美不卡一区| 另类天堂av| 欧美 日韩 国产 一区| 久久婷婷国产麻豆91天堂| 欧美寡妇偷汉性猛交| 午夜视频久久久久久| 99国产精品99久久久久久粉嫩| 亚洲破处大片| 亚洲第一精品夜夜躁人人爽 | 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美午夜理伦三级在线观看| 欧美在线影院| 欧美性开放视频| 国产精品国产自产拍高清av王其| 国产精品免费久久久久久| 欧美特黄视频| 免费在线观看精品| 国产欧美一区二区白浆黑人| 欧美激情五月| 国产欧美精品久久| 红桃视频国产一区| 亚洲精品免费一二三区| 午夜精品视频网站| 亚洲免费高清| 久久伊人精品天天| 久久综合九色99| 欧美在线日韩精品| 美日韩在线观看| 亚洲欧美资源在线| 欧美日本亚洲| 亚洲欧美视频一区二区三区| 亚洲一区二区高清| 久热精品视频在线观看一区| 国产欧美日韩视频|