VC下遠(yuǎn)程控制(桌面)的完整實(shí)現(xiàn)
一、功能介紹:
分為兩個(gè)軟件,一個(gè)為【主機(jī)】,一個(gè)為【遠(yuǎn)程終端】?!具h(yuǎn)程終端】通過鼠標(biāo)鍵盤可以控制【主機(jī)】程序;【主機(jī)】將界面?zhèn)魉偷健具h(yuǎn)程終端】顯示。
二、設(shè)計(jì)介紹:
① 【主機(jī)】端的界面位圖傳輸功能使用的是《Visual C++C6.0技術(shù)內(nèi)幕第五版》源碼ex34a的Blocksock,這個(gè)TCP套接字類非常好用,因?yàn)閹Я恕俺瑫r(shí)取消”功能,建議在工程中多多使用這樣的類;
②?【主機(jī)】端的桌面位圖捕獲,見CopyBitmap、ToMemory兩個(gè)函數(shù),分為實(shí)現(xiàn)了獲取桌面HBITMAP和將這個(gè)HBITMAP完整的按bitmap格式保存到內(nèi)存中。ToMemory的第三個(gè)參數(shù)為像素顏色,可選擇32、24、16、8,自己試一試,會(huì)占用不同的內(nèi)存容量,建議取8,這樣一幅800×600的位圖不壓縮時(shí)占用480K字節(jié)多;
③?【主機(jī)】端的位圖壓縮,采用了開源項(xiàng)目miniLZO,這個(gè)開源壓縮項(xiàng)目非常好用。經(jīng)驗(yàn)證,一般界面下的位圖,壓縮后壓縮比可以達(dá)到90%而且速度超快。這些比例數(shù)字都在程序中顯示;
④ 鼠標(biāo)鍵盤控制信息采用了低級(jí)鉤子的方法獲取,注意,低級(jí)鉤子它們并不需要單獨(dú)寫DLL。這一部分參見http://blog.csdn.net/dijkstar/article/details/9007167(VC6捕獲鼠標(biāo)事件(移動(dòng)、單擊等)的一些總結(jié)(MFC消息、DriectInput、鉤子)),說明了為什么要使用低級(jí)鉤子來換??;
⑤ 鼠標(biāo)鍵盤的控制信息傳輸采用了UDP,在Lan.cpp中實(shí)現(xiàn);
⑥ 為了提高程序的健壯性,使用毫秒級(jí)的多媒體測(cè)時(shí)函數(shù),測(cè)量發(fā)送、接收花費(fèi)的時(shí)間,做到心中有數(shù);
⑦?【遠(yuǎn)程終端】把收到的壓縮位圖,解壓后,使用函數(shù)GetHBmp得到HBIMAP,并使用一個(gè)位圖控件做顯示。
使用時(shí),先將每個(gè)程序的IP地址設(shè)一下(每個(gè)程序有兩處IP需要設(shè),IP指的是都是對(duì)方的IP地址),先運(yùn)行【遠(yuǎn)程終端】,再運(yùn)行【主機(jī)】程序。