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();
来启动计时器