1. 程式人生 > >Andriod 手機控制 Powerpoint 演示(服務端)

Andriod 手機控制 Powerpoint 演示(服務端)

整體思路

在電腦中建立手機服務端接聽手機並且根據命令控制PPT進行演示。

通過開發 Powerpoint 外掛,建立服務端和PPT之間聯絡,再通過WCF來打通伺服器和手機之間通訊。

1、我們先開發PPT 外掛,在Visual Studio 中建立 PowerPoint 外接程式專案(對於office 版本,自己根據需要而定)

2、並在專案新增WCF 服務契約,以及實現服務契約類。大致程式碼如下

(服務介面)

 
   [ServiceContract]
    public interface IPPTPhoneControl
    {
        [OperationContract(Name = "GetServerStateJson")]
        [WebGet(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetServerState", BodyStyle = WebMessageBodyStyle.Bare)]
        String GetServerState();


        [OperationContract(Name = "SendMessageJson")]
        [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, UriTemplate = "SendMessageJson", BodyStyle = WebMessageBodyStyle.WrappedRequest)]
        String SendMessage(string Message);

    }


 

  public class PPTPhoneControl : IPPTPhoneControl
    {

        public static Func<String> QueryServerState
        {
            get;
            set;
        }

        public static Func<String, String> ClientSendMessage
        {
            get;
            set;
        }

        public string GetServerState()
        {
            return QueryServerState();
        }

        public string SendMessage(string Message)
        {
            return ClientSendMessage(Message);
        }
    }


3、外掛程式碼

public partial class ThisAddIn
    {
        PowerPoint.SlideShowWindow Wpn;
        ServiceHost host;
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            

        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {

        }

        

        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
            this.Application.SlideShowBegin += new PowerPoint.EApplication_SlideShowBeginEventHandler(Application_SlideShowBegin);
            this.Application.SlideShowEnd += new PowerPoint.EApplication_SlideShowEndEventHandler(Application_SlideShowEnd);
        }

        void Application_SlideShowEnd(PowerPoint.Presentation Pres)
        {
            host.Close();
        }

        void Application_SlideShowBegin(PowerPoint.SlideShowWindow Wn)
        {
            Wpn = Wn;
            if (MessageBox.Show("是否開啟手機控制?","訊息",MessageBoxButtons.YesNo,MessageBoxIcon.Information,MessageBoxDefaultButton.Button1) == DialogResult.Yes)
            {
                host = new ServiceHost(typeof(PPTPhoneControl));
                PPTPhoneControl.QueryServerState = this.ClientQueryServerState;
                PPTPhoneControl.ClientSendMessage = this.ClientSendCommand;
                try
                {
                    host.Open();
                }
                catch(Exception e)
                {
                    MessageBox.Show(e.Message);
                    host.Close();
                }
            }
        }


        public String ClientQueryServerState()
        {
            try
            {

                return "已和服務建立聯絡";
            }
            catch
            {
                return "伺服器解析錯誤!";
            }
        }
        public String ClientSendCommand(String Command)
        {

            String ReturnString = "";
            try
            {
                switch (Command)
                {
                    case "Next":
                        Wpn.View.Next();
                        break;
                    case "First":
                        Wpn.View.First();
                        break;
                    case "Last":
                        Wpn.View.Last();
                        break;
                    case "Perv":
                        Wpn.View.Previous();
                        break;
                    default:
                        break;
                }
            }
            catch(Exception e)
            {
                return "服務端已關閉";
            }
            return ReturnString;
        }

        #endregion
    }


外掛程式碼很好讀懂,主要就是WCF 伺服器HOST建立,以及接收手機的訊息,處理等。

4、WCF 配置檔案

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetUrl="mex" httpGetEnabled="true"/>
          <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="WebHttpBindingBehavior">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>

    <services>
      <service name="LivePPT.Service.PPTPhoneControl">
        <!--<endpoint address="xml" behaviorConfiguration="WebHttpBindingBehavior"
          binding="webHttpBinding" contract="WCFServiceLib.IHomePlay" />-->
        <endpoint address="json" binding="webHttpBinding"  contract="LivePPT.Service.IPPTPhoneControl" behaviorConfiguration="WebHttpBindingBehavior"/>
        <host>
          <baseAddresses>
            <add baseAddress="http://Localhost:8089" />
          </baseAddresses>
        </host>
      </service>
    </services>
  </system.serviceModel>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>


到此服務端編碼完畢,在VS中執行專案即可啟動PowerPoint,當執行幻燈片時候就會提示是否開啟手機控制。

開啟手機控制,也就開啟了8089(配置中)埠,手機也就可以根據此埠進行通訊了。

相關推薦

Andriod 手機控制 Powerpoint 演示(服務)

整體思路 在電腦中建立手機服務端接聽手機並且根據命令控制PPT進行演示。 通過開發 Powerpoint 外掛,建立服務端和PPT之間聯絡,再通過WCF來打通伺服器和手機之間通訊。 1、我們先開發PPT 外掛,在Visual Studio 中建立 PowerPoint 外接

Andriod 手機控制 Powerpoint 演示(客戶)

Andriod PPT控制客戶端主要思路 連線WCF公佈的服務,通過Request,獲取服務端資訊以及傳送資訊。 主要類 WebDataHelper--實現WCF 訪問,包含收發資料(JSON格式) package JHKJ.homeplay; import java.

html控制元件和服務控制元件的區別

●ASP。NET中共有幾種型別的控制元件? 三種:1-asp.net控制元件(動態) 2-標準的html控制元件(靜態) 3-標準的html控制元件加runat="server"屬性(動態) 動態頁面主要由這三種控制元件畫出來。從資料庫獲取到資料後把資料繫結到這些控制元件上發給瀏覽器顯示出來。把資料繫結到控

安卓手機socket通訊(服務和客戶

1:socket通訊首先要定義好服務端的ip地址和埠號; (1):首先看服務端的程式碼: package com.example.androidsockettest; import java.io.BufferedReader; import java.io.IOEx

中小型手機棋牌網路遊戲服務架構設計(帶原始碼)

承接自己《中小型棋牌類網路遊戲服務端架構》博文,用Golang實現基礎架構邏輯後,準備再次談談我的想法。 已實現的邏輯與前文描述有幾點不同: 1. Gateway更名為Proxy,DBProxy更名為DB 2. Proxy同時持有與(Login, Game

【HLSDK系列】服務實體 edict_t 和 控制

武器 .cpp 成員 常用 blog 生成 指針 但是 dll 我們來了解一下引擎是怎麽管理實體的吧!我們這裏就說說服務端的實體(edict_t) 服務端用 edict_t 這個結構體來保存一個實體,可以說一個 edict_t 就是一個 服務端實體,下文簡稱實體。 我們在

服務控制各種瀏覽器禁止緩存頁面資源 學習筆記

服務端控制各種瀏覽器禁止緩存頁面資源 import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.Http

服務性能保障之流量並發控制方法

大型項目 align 分享圖片 文章 系統內存 海量 流程 數據庫 設計 服務端性能保障之流量並發控制方法 7月底最後一個周日,我們品課學院線下性能提升班第二期算是正式開課,零基礎的學員不少,有測試管理經驗、多年開發或者測試經驗的人員也有幾位,但是各個都很上進好學

Swoole 理解manager進程和worker進程的啟動順序,以及演示如何停止或者重啟服務

urn option die span spa actor reactor load ont 測試的代碼主要功能:開啟一個tcp服務器。然後設置了管理進程和工作進程start的回調進行更名。設置了pid_file保存了服務端啟動的mast進程。 <?php //創

Dubbo原始碼分析:RPC協議實現-服務併發控制與Semaphore訊號量

概述 Dubbo支援在服務端通過在service或者method,通過executes引數設定每個方法,允許併發呼叫的最大執行緒數,即在任何時刻,只允許executes個執行緒同時呼叫該方法,超過的則拋異常返回,從而對提供者服務進行併發控制,保護資源。 用法 服務級別 限

app多版本控制服務解決方案

1.應用場景 手機客戶端按一定週期發版,但是客戶不一定會及時更新到最新版本,所以需要服務端能支援舊版手機客戶端。 服務端支援舊版手機客戶端的方式主要有: 相同的介面支援不同版本手機端的請求,需要服務端介面做好相容 相同的介面支援不同版本手機端的請求,但

java版app微信支付服務程式碼【手機app微信支付】

老早就像做支付模組的東西,因為覺得很高大上,很早就開始把微信支付模組的重心簽名給做好了,一直就缺個商家的key,現在有幸來電商公司,哈哈,果然一切很順利,能夠很給力地App端提供支援; 個人覺得核心部分的程式碼: 簽名: //引數:開始生成簽名 SortedMap&

Android手機客戶通過JSP實現與Tomcat伺服器通訊(Msql資料庫,Json作為載體)--服務程式碼

伺服器端主要程式碼: 1.首先構建一個Person類,用來儲存使用者資訊 public class Person private String name; private String address; private Integer age; public P

手機訪問自己電腦上搭建的服務

前提:手機,電腦的網路需要在同一個區域網下; 一: 關閉電腦防火牆或者設定80埠允許連線; 設定方法: 開啟控制面板---Windows防火牆---高階設定---入站規則---新建規則---埠---輸入80 二: 手機訪問電腦,不能再用localhost或者127.0

C# socket 服務與客戶通訊演示程式碼

string strMsg = sokMsg.RemoteEndPoint.ToString()+"說:"+"rn"+System.Text.Encoding.UTF8.GetString(arrMsg, 0, length); //// 我在這裡  Request.ServerVariables.Ge

WIFI小車之旅(二)手機控制

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">手機端的上機位比較的簡單…共兩個介面…一個介面用於設定IP和使用者名稱和

andriod手機新增訪問控制linux

插入連線有android手機的usb資料線 在終端輸入lsusb,比較兩步中usb裝置ID的不同,找出手機的ID 在/etc/udev/rules.d/資料夾下建立50-android.rules檔案 在規則檔案中新增手機ID 開啟50-android.rules檔案,新增

WebForm框架頁面上js修改服務控制元件導致後臺不能正確獲取到控制元件值的問題【總結】

WebForm框架頁面上js修改服務端控制元件導致後臺不能正確獲取到控制元件值的問題 頁面程式碼 <td><span id="sp_notice_type_item">公告型別</span></td

手機的系統訊息推送的服務開發

作為服務端,要想向手機端推送訊息. 最簡單的是整合第三方. 現舉例友盟訊息推送U-push 友盟 官網 http://www.umeng.com/ 分析訊息推送流程: 一種是 : 從友盟伺服器

Java通過 Socket 實現 TCP服務(一個實例)

trac write 建立 回復 狀態 else 應用程序 字符 system 1 Java Socket簡介   所謂socket 通常也稱作”套接字“,用於描述IP地址和端口,是一個通信鏈的句柄。應用程序通常通過”套接字”向網絡發出請求或者應答網絡請求。Socket和S