国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

如何實(shí)現(xiàn)用windows phone控制PowerPoint的播放

2019-11-17 01:34:04
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

如何實(shí)現(xiàn)用windows phone控制Powerpoint的播放

  相信大家都有過(guò)演講的經(jīng)歷,當(dāng)我們演講時(shí),一手拿著windows phone手機(jī)按按鍵就可以操作powerPoint幻燈片的播放,是不是顯得比較高端?你如果想了解這種互動(dòng)是怎么實(shí)現(xiàn)的,那么你可以繼續(xù)往下看。

  使用windows phone操作PC的PPT播放并不是一件多難的事兒,同樣是對(duì)于android和IOS移動(dòng)端,主要涉及到兩個(gè)方面:通信和調(diào)用PowerPoint 的API。對(duì)于第一方面,既然手機(jī)端可以控制PC端,那么他們之間必然有信息傳遞,你可以使用手機(jī)的藍(lán)牙和電腦的藍(lán)牙進(jìn)行通信,不過(guò)考慮到現(xiàn)在的PC還有很多不支持藍(lán)牙,再加上藍(lán)牙傳輸可能并不穩(wěn)定,所以在這里我們可以使用Socket進(jìn)行通信;對(duì)于第二方面,也很簡(jiǎn)單,我們只需要在PC端去調(diào)用PowerPoint的API就OK,主要涉及的操作包括:切換幻燈片到第一張、切換幻燈片到下一張、切換幻燈片到上一張、切換幻燈片到最后一張。

  舉個(gè)例子來(lái)說(shuō),我們當(dāng)用手機(jī)點(diǎn)擊上一頁(yè)按鈕時(shí),會(huì)傳遞一個(gè)數(shù)字a到服務(wù)端,服務(wù)端會(huì)判斷這個(gè)數(shù)字a是要執(zhí)行切換到上一頁(yè)操作的命令,所以我們就調(diào)用切換到上一頁(yè)的API,就能成功實(shí)現(xiàn)切換,所以如果想實(shí)現(xiàn)這個(gè)功能不僅僅需要手機(jī)客戶端,還需要一個(gè)PC的服務(wù)端用來(lái)接收手機(jī)端發(fā)來(lái)的消息并進(jìn)行處理,當(dāng)然手機(jī)端需要輸入PC端ip和端口來(lái)和PC端通信,我在這里僅實(shí)現(xiàn)了最基本的功能,其他功能可以在此基礎(chǔ)上進(jìn)行擴(kuò)展。

  下面首先介紹服務(wù)端調(diào)用PowerPoint API 的代碼:(參考了貌似是一位微軟工程師的博客)

  

  1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Runtime.InteropServices;  5 using System.Text;  6 using System.Threading.Tasks;  7 using PPt = Microsoft.Office.Interop.PowerPoint;  8 namespace ServerPPT  9 { 10     class PPTServer 11     { 12         // 定義PowerPoint應(yīng)用程序?qū)ο?13         PPt.application pptApplication; 14         // 定義演示文稿對(duì)象 15         PPt.PResentation presentation; 16         // 定義幻燈片集合對(duì)象 17         PPt.Slides slides; 18         // 定義單個(gè)幻燈片對(duì)象 19         PPt.Slide slide; 20  21         // 幻燈片的數(shù)量 22         int slidescount; 23         // 幻燈片的索引 24         int slideIndex; 25         //檢查幻燈片是否已經(jīng)打開(kāi) 26         public void CheckPPT() 27         { 28             // 必須先運(yùn)行幻燈片,下面才能獲得PowerPoint應(yīng)用程序,否則會(huì)出現(xiàn)異常 29             // 獲得正在運(yùn)行的PowerPoint應(yīng)用程序 30             try 31             { 32                 pptApplication = Marshal.GetActiveObject("PowerPoint.Application") as PPt.Application; 33  34                 // 成功獲取了PowerPoint程序時(shí),使UI按鈕可用 35             } 36             catch 37             { 38                 //  MessageBox.Show("請(qǐng)先啟動(dòng)遙控的幻燈片", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error); 39             } 40             if (pptApplication != null) 41             { 42                 //獲得演示文稿對(duì)象 43                 presentation = pptApplication.ActivePresentation; 44                 // 獲得幻燈片對(duì)象集合 45                 slides = presentation.Slides; 46                 // 獲得幻燈片的數(shù)量 47                 slidescount = slides.Count; 48                 // 獲得當(dāng)前選中的幻燈片 49                 try 50                 { 51                     // 在普通視圖下這種方式可以獲得當(dāng)前選中的幻燈片對(duì)象 52                     // 然而在閱讀模式下,這種方式會(huì)出現(xiàn)異常 53                     slide = slides[pptApplication.ActiveWindow.Selection.SlideRange.SlideNumber]; 54                 } 55                 catch 56                 { 57                     // 在閱讀模式下出現(xiàn)異常時(shí),通過(guò)下面的方式來(lái)獲得當(dāng)前選中的幻燈片對(duì)象 58                     slide = pptApplication.SlideShowWindows[1].View.Slide; 59                 } 60             } 61         } 62  63         //第一頁(yè) 64         public  void FirstPage() 65         { 66             try 67             { 68                 // 在普通視圖中調(diào)用Select方法來(lái)選中第一張幻燈片 69                 slides[1].Select(); 70                 slide = slides[1]; 71             } 72             catch 73             { 74                 // 在閱讀模式下使用下面的方式來(lái)切換到第一張幻燈片 75                 pptApplication.SlideShowWindows[1].View.First(); 76                 slide = pptApplication.SlideShowWindows[1].View.Slide; 77             } 78         } 79         //上一頁(yè) 80         public void PreviousPage() 81         { 82             slideIndex = slide.SlideIndex - 1; 83             if (slideIndex >= 1) 84             { 85                 try 86                 { 87                     slide = slides[slideIndex]; 88                     slides[slideIndex].Select(); 89                 } 90                 catch 91                 { 92                     // 在閱讀模式下使用下面的方式來(lái)切換到上一張幻燈片 93                     pptApplication.SlideShowWindows[1].View.Previous(); 94                     slide = pptApplication.SlideShowWindows[1].View.Slide; 95                 } 96             } 97             else 98             { 99                 // MessageBox.Show("已經(jīng)是第一頁(yè)了");100             }101         }102 103         //下一頁(yè)104         public void NextPage()105         {106             slideIndex = slide.SlideIndex + 1;107             if (slideIndex > slidescount)108             {109                 //MessageBox.Show("已經(jīng)是最后一頁(yè)了");110             }111             else112             {113                 try114                 {115                     slide = slides[slideIndex];116                     slides[slideIndex].Select();117                 }118                 catch119                 {120                     // 在閱讀模式下使用下面的方式來(lái)切換到下一張幻燈片121                     pptApplication.SlideShowWindows[1].View.Next();122                     slide = pptApplication.SlideShowWindows[1].View.Slide;123                 }124             }125         }126         //最后一頁(yè)127         public void LastPage()128         {129             try130             {131                 slides[slidescount].Select();132                 slide = slides[slidescount];133             }134             catch135             {136                 // 在閱讀模式下使用下面的方式來(lái)切換到最后幻燈片137                 pptApplication.SlideShowWindows[1].View.Last();138                 slide = pptApplication.SlideShowWindows[1].View.Slide;139             }140         }141     }142 }

    其次介紹服務(wù)端PC和和客戶端(windows phone)使用Socket通信的代碼,服務(wù)端等待接收消息代碼如下所示:

 

 1         Socket listenner = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 2         private Control control = new Control(); 3          4         public Form1() 5         { 6             InitializeComponent(); 7             TextBox.CheckForIllegalCrossThreadCalls = false; 8              9         }10         //打印提示信息11         public void showMessage(String strMsg)12         {13            output.AppendText(strMsg + "/r/n");14         }15         private static AutoResetEvent _flipFlop = new AutoResetEvent(false);16         private void start_Click(object sender, EventArgs e)17         {18             19             20             IPAddress address = IPAddress.Parse(iptext.Text.Trim());//創(chuàng)建IP對(duì)象21 22             IPEndPoint localEP = new IPEndPoint(address,int.Parse(porttext.Text.Trim()));23 24           //  MessageBox.Show("運(yùn)行中");25                  showMessage("本地IP地址和端口是"+localEP);26                 listenner.Bind(localEP);27                 listenner.Listen(10);28                 Thread threadlisten;//定義監(jiān)聽(tīng)線程29                 threadlisten = new Thread(startlisten);30                 threadlisten.IsBackground = true;//創(chuàng)建線程時(shí)默認(rèn)false,為false時(shí),主線程退出,仍然執(zhí)行,直到結(jié)束31                 threadlisten.Start();32 33         }34         private void startlisten() {35             while (true)36             {37                 // Console.WriteLine("等待windows phone客戶端的連接。。。。");38                 showMessage("等待windows phone客戶端的連接");39                 listenner.BeginAccept(AcceptCallback, listenner);40                 _flipFlop.WaitOne();41             }42         }43         private void AcceptCallback(IAsyncResult ar)44         {45             Socket listener = (Socket)ar.AsyncState;46             Socket socket = listener.EndAccept(ar);47            // Console.WriteLine("連接到windows phone 客戶端");48             showMessage("連接到windows phone 客戶端");49             _flipFlop.Set();50             var state = new StateObject();51             state.Socket = socket;52             socket.BeginReceive(state.Buffer, 0, StateObject.BufferSize, 0, ReceiveCallback, state);53         }54 55         private void ReceiveCallback(IAsyncResult ar)56         {57             StateObject state = (StateObject)ar.AsyncState;58             Socket socket = state.Socket;59             int read = socket.EndReceive(ar);60             if (read > 0)61             {62                 string chunk = Encoding.UTF8.GetString(state.Buffer, 0, read);63                 state.StringBuilder.Append(chunk);64                 if (state.StringBuilder.Length > 0)65                 {66                     string result = state.StringBuilder.ToString();67                   //  Console.WriteLine("收到客戶端傳來(lái)的消息:{0}", result);68                     control.Dispatcher(int.Parse(result));69                     //showMessage("收到客戶端
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 莲花县| 徐闻县| 富平县| 施秉县| 电白县| 农安县| 安康市| 宁城县| 武城县| 河间市| 博野县| 石阡县| 阳高县| 小金县| 原平市| 安宁市| 改则县| 成武县| 特克斯县| 泗水县| 峨眉山市| 宁津县| 武胜县| 丰城市| 江陵县| 乐东| 保靖县| 太湖县| 太和县| 万山特区| 定南县| 大渡口区| 垣曲县| 龙南县| 镶黄旗| 耿马| 湖北省| 酒泉市| 齐齐哈尔市| 北安市| 特克斯县|