国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Windows7平臺(tái)下機(jī)房屏幕廣播軟件設(shè)計(jì)

2014-07-28 00:38羅新
電腦知識(shí)與技術(shù) 2014年16期

羅新

摘要:利用Windows7提供的桌面共享API,提出一個(gè)屏幕廣播的解決方案。通過(guò)軟件在機(jī)房的測(cè)試結(jié)果表明,屏幕廣播的效果很好,可以滿足教學(xué)的需要。

關(guān)鍵詞:Windows7;桌面共享API;屏幕廣播

中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)16-3789-02

Abstract: By using desktop sharing API provided by Windows7, propose a solution for screen broadcast, software test results in lab show that, the effect of screen broadcast is good, it can meet the needs of teaching.

Key words: Windows7; Desktop Sharing API; Screen Broadcast

1 概述

機(jī)房教學(xué)中很多時(shí)候都需要把教師電腦的屏幕內(nèi)容共享至學(xué)生機(jī),主要解決了投影儀教學(xué)中,后排學(xué)生看不清教學(xué)內(nèi)容的問(wèn)題,這對(duì)于一些需要實(shí)操演示的課程(如編程課程)具有重要意義。如果通過(guò)某種編程語(yǔ)言,調(diào)用傳統(tǒng)的Windows底層的API接口來(lái)實(shí)現(xiàn)一個(gè)高效穩(wěn)定的屏幕廣播程序,需要解決的問(wèn)題很多,包括:屏幕圖像的獲取、壓縮,圖像數(shù)據(jù)的分塊及組合,數(shù)據(jù)網(wǎng)絡(luò)傳輸效率等,所以開(kāi)發(fā)的難度較大。從Windows Vista操作系統(tǒng)開(kāi)始,微軟的終端服務(wù)提供基于RDP(Remote Desktop Protocol)的遠(yuǎn)程桌面共享API。利用這些API中幾個(gè)主要對(duì)象的方法,可以方便實(shí)現(xiàn)桌面共享,應(yīng)用共享,以及遠(yuǎn)程控制等。該文以VS2008作為開(kāi)發(fā)工具并結(jié)合該API,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)運(yùn)行在Windows7下的機(jī)房屏幕廣播軟件。

2 桌面共享API重要對(duì)象及方法

屏幕廣播所涉及到的API都是由RdpEncom.dll發(fā)布的,它是Win7系統(tǒng)自帶的一個(gè)動(dòng)態(tài)鏈接庫(kù)文件。要想實(shí)現(xiàn)屏幕廣播,有兩個(gè)重要的對(duì)象需要?jiǎng)?chuàng)建,分別是IRDPSRAPISharingSession及IRDPSRAPIViewer。前者是COM對(duì)象,它實(shí)現(xiàn)了屏幕的共享。后者是一個(gè)ActiveX控件,它可以嵌入到運(yùn)行于學(xué)生機(jī)的窗口程序中,實(shí)現(xiàn)屏幕廣播的接收。屏幕廣播的執(zhí)行流程如下,首先由IRDPSRAPISharingSession創(chuàng)建一個(gè)RDPSession實(shí)例,然后訂閱桌面共享API相關(guān)的一些事件及定義事件處理方法,如OnAttendeeConnected,OnAttendeeConnected,OnControlLevelChangeRequest等,分別表示有客戶端連接,斷開(kāi)及控制級(jí)別改變請(qǐng)求的事件。在RDPSession執(zhí)行Open方法之后,屏幕共享開(kāi)啟,此時(shí)還需要?jiǎng)?chuàng)建一個(gè)邀請(qǐng)(Invitation),邀請(qǐng)里面包括了連接串,組名,密碼等信息。客戶端只有獲取這個(gè)邀請(qǐng)之后,才能連接到進(jìn)行屏幕共享的主控端,進(jìn)而接收到屏幕廣播。邀請(qǐng)的產(chǎn)生可以通過(guò)IRDPSRAPIInvitationManager接口的CreateInvitation方法產(chǎn)生,該方法的參數(shù)如下所示。

HRESULT CreateInvitation(

[in] BSTR bstrAuthString,

[in] BSTR bstrGroupName,

[in] BSTR bstrPassword,

[in] long AttendeeLimit,

[out] IRDPSRAPIInvitation **ppInvitation

);

其中bstrAuthString表示授權(quán)串,對(duì)于每個(gè)屏幕廣播會(huì)話都是唯一的。bstrGroupName實(shí)現(xiàn)客戶端的分組,bstrPassword表示會(huì)話的密碼(可以為空),AttendeeLimit表示接收端的最大個(gè)數(shù)。ppInvitationg指向另一個(gè)邀請(qǐng)串,一般不會(huì)用到。下面是一個(gè)邀請(qǐng)產(chǎn)生實(shí)例,使用的編程語(yǔ)言是C#。

IRDPSRAPIInvitation pInvitation= m_pRdpSession.Invitations.CreateInvitation("myauthstring", "Group1", "", 50);

這個(gè)實(shí)例產(chǎn)生了一個(gè)授權(quán)串為myauthstring,組名為Group1,密碼為空,最大客戶端為50的邀請(qǐng)。客戶端獲得這個(gè)邀請(qǐng)后,再調(diào)用IRDPSRAPIViewer的Connect方法,即可連接到屏幕廣播主控端,從而接收到屏幕廣播。

3 屏幕廣播軟件的實(shí)現(xiàn)

根據(jù)前面的分析,屏幕廣播軟件的實(shí)現(xiàn)應(yīng)該包括教師端及學(xué)生端。教師端負(fù)責(zé)屏幕廣播的控制,學(xué)生端則接收來(lái)自教師端的屏幕廣播。為了確保不同機(jī)房同時(shí)使用時(shí)不產(chǎn)生干擾,可以為每個(gè)學(xué)生機(jī)設(shè)置一個(gè)頻道號(hào),學(xué)生機(jī)只接收與自己頻道號(hào)一致的教師端廣播。屏幕廣播采用UDP廣播的方式進(jìn)行,教師端啟用屏幕廣播后,首先生成一個(gè)邀請(qǐng)串,然后把自己的頻道號(hào)與邀請(qǐng)串聯(lián)結(jié)成一個(gè)字符串,最后通過(guò)UDP廣播發(fā)送。學(xué)生機(jī)獲得這個(gè)UDP數(shù)據(jù)包后,提取里面的字符串內(nèi)容,分解出頻道號(hào)及邀請(qǐng)串,然后與自己的頻道號(hào)進(jìn)行比較,只有在頻道號(hào)一致的情況下,才通過(guò)邀請(qǐng)串連接到教師機(jī),接收屏幕廣播。下面是教師端的主要代碼:

m_pRdpSession = new RDPSession();

m_pRdpSession.OnAttendeeConnected+=

new_IRDPSessionEvents_OnAttendeeConnectedEventHandler(OnAttendeeConnected);endprint

m_pRdpSession.OnAttendeeDisconnected +=

new_IRDPSessionEvents_OnAttendeeDisconnectedEventHandler(OnAttendeeDisconnected);

m_pRdpSession.OnControlLevelChangeRequest +=

new_IRDPSessionEvents_OnControlLevelChangeRequestEventHandler(OnControlLevelChangeRequest);

m_pRdpSession.Open();

IRDPSRAPIInvitation pInvitation = m_pRdpSession.Invitations.CreateInvitation("WinPresenter","PresentationGroup", "", 5);

string invitationString = pInvitation.ConnectionString;

if(ChannelNo<=9)

strChannelNo="0"+ChannelNo.ToString();

else

strChannelNo=ChannelNo.ToString();

string strDataPacket = strChannelNo + invitationString;

udp_sender = new UdpClient();

Byte[] buffer = System.Text.Encoding.ASCII.GetBytes(strDataPacket);

udp_sender.Send(buffer, buffer.Length, iep);

對(duì)于客戶端,除了用UDPClient接收并處理來(lái)自教師端的邀請(qǐng)串,然后就是調(diào)用IRDPSRAPIViewer的Connect方法連接至教師端,例如下面語(yǔ)句實(shí)現(xiàn)了連接到教師端的功能:

pRDPViewer.Connect(invitestr, "viewer1", "");

其中pRDPViewer是控件的名字。在使用VS2008創(chuàng)建工程時(shí),注意要添加對(duì)RdpEncom.dll引用。

4 小結(jié)

本文利用微軟提供的桌面共享API,提出了一個(gè)運(yùn)行在Windows7平臺(tái)下的屏幕廣播解決方案,通過(guò)軟件在機(jī)房中的使用測(cè)試,屏幕廣播的效果不錯(cuò),廣播延時(shí)很小,圖像質(zhì)量也可以接受。而整個(gè)開(kāi)發(fā)過(guò)程卻相當(dāng)簡(jiǎn)單及高效,這為我們提供了開(kāi)發(fā)屏幕廣播軟件的新思路。

參考文獻(xiàn):

[1] 陳紹鈞.屏幕廣播技術(shù)在演示教學(xué)系統(tǒng)中的應(yīng)用[J].實(shí)驗(yàn)室科學(xué),2008(8):144-146.

[2] 張軍翔,劉興紅.屏幕廣播教學(xué)系統(tǒng)在計(jì)算機(jī)類(lèi)課程實(shí)驗(yàn)教學(xué)中的應(yīng)用研究[J].湖北師范學(xué)院:自然科學(xué)版,2013,33(4):100-104.endprint

黑河市| 怀安县| 锡林郭勒盟| 苍南县| 本溪市| 林芝县| 泰兴市| 桐梓县| 阿坝| 宁陵县| 英吉沙县| 莱芜市| 克拉玛依市| 隆昌县| 平武县| 拜城县| 青龙| 三原县| 克拉玛依市| 涞源县| 冀州市| 景泰县| 正宁县| 桂平市| 江永县| 灌南县| 扶风县| 金寨县| 高雄县| 洛宁县| 阳泉市| 乐昌市| 集贤县| 衡水市| 平阳县| 邵东县| 乡城县| 平昌县| 会理县| 兴业县| 兴义市|