• PPT辅助工具


    在台上讲解PPT内容的时候,想翻页也不是件容易的事情。当然一只电子笔就搞定了,不过如果我们有只能手机和wifi环境,直接用手机来控制不是更好。

    本来想利用手机的触摸屏,以及加速度感应来操作PPT。由于Android编程水平十分有限,所以,就直接做了一个WebApp。

    利用手机访问目标电脑(演示ppt的电脑),然后目标电脑根据访问的页面截取参数,并作出反应。

    1、响应http请求,因为之间简单的截取url参数,所以自己写一个http服务程序。

    private void button1_Click(object sender, EventArgs e)
            {
                this.button1.Enabled = false;
    
                HttpListener listener = new HttpListener();
                listener.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
                string port = string.Format("http://*:{0}/", textBox1.Text);
                listener.Prefixes.Add(port);
                listener.Start();
                listener.BeginGetContext(new AsyncCallback(GetContext), listener);
    
            }
            private void GetContext(IAsyncResult result)
            {
                HttpListener listener = result.AsyncState as HttpListener;
                HttpListenerContext context = listener.EndGetContext(result);
                new System.Threading.Thread(delegate()
                {
                    this.Command(context.Request.RawUrl);
                }).Start();
                context.Response.ContentEncoding = System.Text.Encoding.UTF8;
                context.Response.StatusCode = 200;
                //string fileName = AppDomain.CurrentDomain.BaseDirectory + "ppt.html";
                //string content = System.IO.File.ReadAllText(fileName);
                string content = html;
                System.IO.StreamWriter writer = new System.IO.StreamWriter(context.Response.OutputStream, context.Response.ContentEncoding);
                writer.Write(content);
                writer.Close();
                context.Response.Close();
                listener.BeginGetContext(new AsyncCallback(GetContext), listener);
            }
    

      这个地方主要用到了HttpListener这个类。因为上一页,下一页等操作都在同一个页面,所以,所有的请求都返回同一个页面。可以把html放到文件然后读取,我这边为了生成后程序的简洁性,直接写道cs代码里面了。(这是一个非常不好的习惯,虽然这个只是一个测试程序)

    2、第二就是要根据web的请求参数,转换为本地电脑的模拟键盘操作。

    public class VirtualControl
        {
            [System.Runtime.InteropServices.DllImport("user32")]
            private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
    
            public static void SendKeys(string keys)
            {
                System.Windows.Forms.SendKeys.Send(keys);
            }
            public static void PageDown()
            {
                System.Windows.Forms.SendKeys.SendWait("{PGDN}");
            }
            public static void PageUp()
            {
                System.Windows.Forms.SendKeys.SendWait("{PGUP}");
            }
            public static void Home()
            {
                System.Windows.Forms.SendKeys.SendWait("{HOME}");
            }
            public static void Esc()
            {
                System.Windows.Forms.SendKeys.SendWait("{ESC}");
            }
            public static void MouseEvent(MouseOption option, int x, int y)
            {
                mouse_event((int)option, x, y, 0, 0);
            }
            public static void MouseContext()
            {
                MouseEvent(MouseOption.RIGHTDOWN, 0, 0);
                MouseEvent(MouseOption.RIGHTUP, 0, 0);
            }
            public static void MouseClick()
            {
                MouseEvent(MouseOption.LEFTDOWN, 0, 0);
                MouseEvent(MouseOption.LEFTUP, 0, 0);
            }
    
            public enum MouseOption : int
            {
                MOVE = 0x0001,
                LEFTDOWN = 0x0002,
                LEFTUP = 0x0004,
                RIGHTDOWN = 0x0008,
                RIGHTUP = 0x0010,
                MIDDLEDOWN = 0x0020,
                MIDDLEUP = 0x0040,
                ABSOLUTE = 0x8000
            }
        }
    

      所以呢,在http服务接收到请求,解析请求url,转换为相应的命令。这样,就可以使用我们的手机控制电脑上的ppt演示稿了。

    我原本的设想是利用智能手机的屏幕,作为画笔,还有加速度感应来控制上下页。这里提供一个思路,希望哪天有牛人实现以下,并共享出来。

    最后附上源码。

    https://files.cnblogs.com/Linjianyu/ControlServer.rar

  • 相关阅读:
    储存过程、游标与触发器
    linux系统安装mysql5.7.22
    为什么实体类要实现序列化
    jsp的语法
    jsp的原理
    转发和重定向的区别
    SpringCloud——简介,5大组件
    Java——线程,并发包(Lock、线程池)
    Spring Data JPA——基本使用
    SpringBoot
  • 原文地址:https://www.cnblogs.com/Linjianyu/p/2699029.html
Copyright © 2020-2023  润新知