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





