我正在寻找最好的方法来找出我的用户是否在我的WPF应用程序中空闲.目前,我从操作系统中获取这个空闲时间,如果它们最小化应用程序,并在Internet上搜索,则操作系统中有一个进程,因此操作系统不会将此视为非活动时间,即使它们没有进行应用程序内的任何内容 但是,我想知道他们是否没有点击或在我的申请中做任何事情.
这就是我现在的空闲时间.
myApplication.MainMethod()
{
System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
myTimer .Interval = 1000;
myTimer .Tick += new EventHandler(Timer_Tick);
myTimer .Start();
}
void Timer_Tick(object sender, EventArgs e)
{
int idleTime= (int)Win32.GetIdleTime();
if (idleTime<certainNumber)
{
//do this
}
}
Run Code Online (Sandbox Code Playgroud) 我正在为可视化工具编写拖动系统.单击并拖动时,它会移动您在窗口中看到的内容.当鼠标击中面板边缘时,我开始重新定位光标,使其永远不会离开框.它跟踪光标在盒子内部的虚拟位置.这部分代码工作正常.
只要有一个MouseMoved事件并且位置在框内,我就会执行Cursor.Show().如果它在框外,我会做Cursor.Hide().当用户放开鼠标按钮时,我执行Cursor.Show().
有很多问题.当第一次Hide调用发生时,它不会隐藏.我必须将光标的虚拟位置移到包含窗口之外才能发生隐藏.当我搬回来时,即使正在调用Show,它也不会变得可见.最后,当释放鼠标按钮时,尽管显示被调用,但光标不会出现.
而不是要求人们调试我的代码,我只是想知道事件系统中发生了什么使得Cursor.Hide/Show不能按照我期望的方式工作.我的印象是,如果一个名为Hide的控件,光标会在该控件内部被隐藏; 同样如果我从控件中调出show.
对于我的全屏应用程序,如果没有移动,我想在几秒钟后隐藏光标,如QuickTime或iTunes中的全屏模式.据推测我打算打电话[NSCursor setHiddenUntilMouseMoves:YES],但我怎么知道什么时候打电话呢?
据推测,我在寻找与在空闲时间之后隐藏鼠标光标相同的功能,但在Mac上.我找不到一种方法来获得类似的"空闲时间".(另外,我可能不关心键盘事件,只关注鼠标移动.)