zoukankan      html  css  js  c++  java
  • 定时拍照功能

         CameraCaptureDialog 后必须手动按“确定”然后“退出”,才能拍照, 怎样使用 CameraCaptureDialog 实现自动、定时拍照呢?可以使用System.Windows.Forms.Timer 、SendMessage方法实现,Timer方法必须在主线程中。

    实现代码:

     public partial class Form1 : Form
        {
            /*
            [DllImport("CoreDll")]
            public static extern IntPtr FindWindow(
                              string lpClassName,  // class name
                              string lpWindowName  // window name
                              );
            */
            [DllImport("CoreDll")]
            public static extern IntPtr SendMessage(
                  IntPtr hWnd,      // handle to destination window
                  uint Msg,     // message
                  uint wParam,  // first message parameter
                  uint lParam   // second message parameter
                  );

            [DllImport("CoreDll")]
            public static extern IntPtr GetForegroundWindow();

            System.Threading.Timer tmr;

            public Form1()
            {
                InitializeComponent();

            }

            private void menuItem2_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }

            private void menuItem1_Click(object sender, EventArgs e)
            {

                CameraCaptureDialog ccd = new CameraCaptureDialog();
                ccd.Mode = CameraCaptureMode.Still;

                object someState = new object();
                TimerCallback tmrClbck = new TimerCallback(this.atTimer1);
                tmr = new System.Threading.Timer(tmrClbck, someState, 10* 1000, -1);
               
                if (ccd.ShowDialog() == DialogResult.OK)
                {
                    pictureBox1.Image = new Bitmap(ccd.FileName);
                    //MessageBox.Show("OK");
                }
            }


            private void atTimer1(object state)
            {
                Debug.WriteLine("Timer 1 On");
                IntPtr hwnd = GetForegroundWindow();
                SendMessage(hwnd, 0x100, 0x0d, 0xf20001);

                object someState = new object();
                TimerCallback tmrClbck = new TimerCallback(this.atTimer2);
                tmr = new System.Threading.Timer(tmrClbck, someState, 2 * 1000, -1);
                //tmr.Dispose();
            }

            private void atTimer2(object state)
            {
                Debug.WriteLine("Timer 2 On");
                IntPtr hwnd = GetForegroundWindow();
                SendMessage(hwnd, 0x101, 0x1b, 0xc0310001);
                tmr.Dispose();
            }
        }

    程序中发送的 message,不同的 device 不同,需要用 Remote Spy 去抓

    使用Remote Spy的方法可参考:

    http://hi.baidu.com/%D0%CF%BD%F2%C8%F0/blog/item/33f8c9170bea01064a90a712.html

    参考:

    http://hi.baidu.com/%D0%CF%BD%F2%C8%F0/blog/item/793132ddef3f28e876c6385f.html/cmtid/6b2f0307824e84c17b8947a2

    http://www.christec.co.nz/blog/archives/208

  • 相关阅读:
    css笔记
    js面向对象开发之--元素拖拽
    git命令笔记
    数据扁平化笔记。
    手写冒泡排序
    ant design-Table组件实现每一行某个特定字段连续相同进行行合并。
    Array.prototype.reduce()。
    I/O多路复用
    TCP/IP四层体系结构
    TCP的三次握手和四次挥手,为什么?
  • 原文地址:https://www.cnblogs.com/xyzlmn/p/3168279.html
Copyright © 2011-2022 走看看