本文共 1831 字,大约阅读时间需要 6 分钟。
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的方法可参考:
参考:
本文转自xyz_lmn51CTO博客,原文链接:http://blog.51cto.com/xyzlmn/818933,如需转载请自行联系原作者