我想在空闲时间后隐藏鼠标光标,当我移动鼠标时它会显示出来。我试图使用一个计时器,但它不能很好地工作。有谁能够帮助我?请!闲置时间后隐藏鼠标光标
11
A
回答
10
下面是如何做到这一点的人为的例子。你可能有一些失踪的逻辑被重写光标的可见性:
public partial class Form1 : Form
{
public TimeSpan TimeoutToHide { get; private set; }
public DateTime LastMouseMove { get; private set; }
public bool IsHidden { get; private set; }
public Form1()
{
InitializeComponent();
TimeoutToHide = TimeSpan.FromSeconds(5);
this.MouseMove += new MouseEventHandler(Form1_MouseMove);
}
void Form1_MouseMove(object sender, MouseEventArgs e)
{
LastMouseMove = DateTime.Now;
if (IsHidden)
{
Cursor.Show();
IsHidden = false;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
TimeSpan elaped = DateTime.Now - LastMouseMove;
if (elaped >= TimeoutToHide && !IsHidden)
{
Cursor.Hide();
IsHidden = true;
}
}
}
+0
我找不到Cursor的`Cursor.Hide`类型。 – lindexi 2017-07-18 01:26:46
21
如果您正在使用的WinForms,只会在Windows机器上部署那么它很容易使用user32 GetLastInputInfo
处理鼠标和键盘空转。
public static class User32Interop
{
public static TimeSpan GetLastInput()
{
var plii = new LASTINPUTINFO();
plii.cbSize = (uint)Marshal.SizeOf(plii);
if (GetLastInputInfo(ref plii))
return TimeSpan.FromMilliseconds(Environment.TickCount - plii.dwTime);
else
throw new Win32Exception(Marshal.GetLastWin32Error());
}
[DllImport("user32.dll", SetLastError = true)]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
struct LASTINPUTINFO
{
public uint cbSize;
public uint dwTime;
}
}
,然后在Form
public partial class MyForm : Form
{
Timer activityTimer = new Timer();
TimeSpan activityThreshold = TimeSpan.FromMinutes(2);
bool cursorHidden = false;
public Form1()
{
InitializeComponent();
activityTimer.Tick += activityWorker_Tick;
activityTimer.Interval = 100;
activityTimer.Enabled = true;
}
void activityWorker_Tick(object sender, EventArgs e)
{
bool shouldHide = User32Interop.GetLastInput() > activityThreshold;
if (cursorHidden != shouldHide)
{
if (shouldHide)
Cursor.Hide();
else
Cursor.Show();
cursorHidden = shouldHide;
}
}
}
+0
一个优雅的解决方案,谢谢 – frameworkninja 2009-10-28 12:19:37
3
需要考虑Environment.Tickcount是消极的:
public static class User32Interop
{
public static TimeSpan GetLastInput()
{
var plii = new LASTINPUTINFO();
plii.cbSize = (uint)Marshal.SizeOf(plii);
if (GetLastInputInfo(ref plii))
{
int idleTime = unchecked(Environment.TickCount - (int)plii.dwTime);
return TimeSpan.FromMilliseconds(idleTime);
}
else
throw new Win32Exception(Marshal.GetLastWin32Error());
}
[DllImport("user32.dll", SetLastError = true)]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
struct LASTINPUTINFO
{
public uint cbSize;
public uint dwTime;
}
}
相关问题
- 1. JavaFX设置鼠标闲置时隐藏
- 2. 空闲时隐藏光标
- 3. 空闲时使用JavaScript隐藏鼠标光标
- 4. 在空闲时间后隐藏我的鼠标光标,当我移动鼠标时它会显示出来
- 5. 闲置时间后隐藏鼠标光标和StackPanel Windows 8.1 - 通用应用程序
- 6. Mediaelement JS - 当鼠标不移动时隐藏鼠标光标
- 7. 隐藏鼠标光标与glfw
- 8. 隐藏光标/变形鼠标(SDL 1.3)
- 9. 跨浏览器隐藏鼠标光标
- 10. 如何隐藏鼠标光标?
- 11. 如何用jquery隐藏鼠标光标
- 12. 如何防止在调用CComboBox :: ShowDropDown后隐藏鼠标光标?
- 13. 隐藏光标
- 14. 在多屏幕设置中隐藏鼠标光标
- 15. 如何在Visual Studio 2010中输入时隐藏鼠标光标?
- 16. 鼠标空闲时鼠标悬停
- 17. NSSecureTextField隐藏光标
- 18. Flowplayer隐藏光标
- 19. 更改光标隐藏光标
- 20. Qt鼠标光标重置
- 21. 从鼠标光标位置
- 22. 在Xul或JavaScript中,有没有办法隐藏鼠标光标?
- 23. Kivy:在桌面上隐藏鼠标光标
- 24. 在Opera 10 Kiosk模式下隐藏鼠标光标
- 25. 侧栏隐藏/显示按钮,跟随光标鼠标?
- 26. 在HTML5画布内隐藏鼠标光标Javascript
- 27. 如何在java applet中隐藏鼠标光标?
- 28. 网络浏览器:隐藏鼠标光标
- 29. 更改\隐藏鼠标光标在插件上
- 30. 取消隐藏光标滞后
什么样的技术? Winforms,WPF,silverlight,ASP.Net – 2009-04-13 19:02:18