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

C#Win表单:检测最后一次交互(触摸)并显示确认框,c#,winforms,user-interface,touch,pixelsense,C#,Winforms,User Interface,Touch,Pixelsense,Windows窗体应用程序: 是否有方法检查设备(Microsoft Surface 55英寸触摸屏)未收到用户任何交互(触摸)的时间,如果超过5分钟,则应显示一个确认框,询问您是否要继续或退出。在这5分钟内,将运行flash文件或视频。如果视频正在运行(我在Win窗体中嵌入了AxWindowsMediaPlayer),则应暂停视频,然后显示确认框 我想使用Visual Studio 2013 Professional上的C#代码来实现这一点 我遇到了一些函数和: 我发现的一个选项是使用GetL

Windows窗体应用程序:

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

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

我遇到了一些函数和:

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

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

我还遇到了Application.idle事件


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

这段代码为我提供了窍门:

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");
    }

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

您可以使用计时器在后台运行,每分钟打勾一次,每分钟>=5启动确认框等。然后使用Form.Click()事件并在每次单击时将计时器重置为零。这只是一个想法。不确定这对你的应用程序是否可行。触摸屏不应该有任何区别,因为手指的触摸只是模拟鼠标的点击。因此,我为点击编写的任何代码都同样适用于触摸?是的,至少在我的经验中,它一直是这样工作的。在我工作的地方,我们使用了很多触摸屏。例如,如果我用鼠标单击按钮或用手指在屏幕上“触摸”按钮,则在按钮上使用普通单击事件的效果是相同的。MSDN上Application.idle事件的此引用是什么意思:“因为这是一个静态事件,所以在释放应用程序时必须分离事件处理程序,否则将导致内存泄漏”。请检查此线程