C#Win Form:检测最后一次交互(触摸)并显示确认框



Windows窗体应用程序:

有没有办法检查设备(Microsoft Surface 55英寸触摸屏)没有收到用户任何交互(触摸)的时间,如果超过5分钟,则会显示确认框,询问您是想继续还是退出。在这5分钟内,将运行一个闪存文件或一个视频。如果视频正在运行(我已在Win Form中嵌入AxWindowsMediaPlayer),则应暂停视频,然后显示确认框。

我想在Visual Studio 2013 Professional上使用C#代码来实现这一点。

我遇到了一些函数和线程:

我发现的一个选项是使用GetLastInputInfo()函数。然而,我不确定它是否适用于触摸交互。我没有要测试的Microsoft Surface设备。MSDN引用:

此功能对于输入空闲检测非常有用。但是,GetLastInputInfo并没有在所有正在运行的会话中提供系统范围的用户输入信息。相反,GetLastInputInfo只为调用函数的会话提供特定于会话的用户输入信息。接收到最后一个输入事件时的刻度计数(请参阅LASTINPUTINFO)不能保证是递增的。在某些情况下,该值可能小于先前事件的刻度计数。例如,这可能是由原始输入线程和桌面线程之间的时间间隔或SendInput引发的事件引起的,SendInput提供自己的刻度计数。

我还遇到Application.inidle事件

任何对此有变通方法或有用链接的人都将不胜感激。

这段代码帮我搞定了:

private void timer1_Tick(object sender, EventArgs e)
    {           
        tagLASTINPUTINFO LastInput = new tagLASTINPUTINFO();
        Int32 IdleTime;
        LastInput.cbSize = (uint)Marshal.SizeOf(LastInput);
        LastInput.dwTime = 0;
        if (GetLastInputInfo(ref LastInput))
        {
            IdleTime = System.Environment.TickCount - LastInput.dwTime;
            if (IdleTime > 10000)
            {
                axWindowsMediaPlayer1.Ctlcontrols.pause();
                timer1.Stop();
                string timeRemaining = IdleTime.ToString();
                lbl_TimeRemaining.Text = IdleTime.ToString();
                lbl_TimeRemaining.Show();
                MessageBox.Show("Do you wish to continue?");
                lbl_TimeRemaining.Hide();
            }
            else
            {
            }
            timer1.Start();
            axWindowsMediaPlayer1.Ctlcontrols.play();
        }            
        string title = axWindowsMediaPlayer1.currentMedia.getItemInfo("Title");
    }

第一次,您必须通过从FormLoad()方法内部调用timer1.start();来启动计时器

最新更新