gpt4 book ai didi

c# - 检查用户是否处于非事件状态

转载 作者:可可西里 更新时间:2023-11-01 10:59:17 28 4
gpt4 key购买 nike

如何检查用户是否处于非事件状态?我有这个:

class UserActivity : IMessageFilter
{
private double afk_time = 0.1;//minutes
private DateTime last_activity = DateTime.Now;
public static bool inactive = false;

private int WM_LBUTTONDOWN = 0x0201;
private int WM_MBUTTONDOWN = 0x0207;
private int WM_RBUTTONDOWN = 0x0204;
private int WM_MOUSEWHEEL = 0x020A;
private int WM_MOUSEMOVE = 0x0200;
private int WM_KEYDOWN = 0x0100;

public bool PreFilterMessage(ref Message m)
{
if (m.Msg == WM_LBUTTONDOWN || m.Msg == WM_MBUTTONDOWN || m.Msg == WM_RBUTTONDOWN || m.Msg == WM_MOUSEWHEEL || m.Msg == WM_MOUSEMOVE || m.Msg == WM_KEYDOWN)
{
this.last_activity = DateTime.Now;
inactive = false;
}

if (DateTime.Now.AddMinutes(-afk_time) > last_activity)
inactive = true;

return false;
}
}

但我必须在 Program.cs 中运行它

Application.AddMessageFilter(new UserActivity());

我该怎么做才能自己运行用户不活动检查。我将选中一些复选框,它会开始检查。

我想检查全局用户事件 - 在所有系统中,而不仅仅是在应用程序中。

我不想使用不必要的 cpu。或者我应该使用其他解决方案?

最佳答案

我找到了这个,而且效果很好!所以如果另一个人有问题,这里是解决方案:

    [StructLayout(LayoutKind.Sequential)]
public struct LASTINPUTINFO
{
public uint cbSize;
public uint dwTime;
}

[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);


public static TimeSpan? GetInactiveTime()
{
LASTINPUTINFO info = new LASTINPUTINFO();
info.cbSize = (uint)Marshal.SizeOf(info);
if (GetLastInputInfo(ref info))
return TimeSpan.FromMilliseconds(Environment.TickCount - info.dwTime);
else
return null;
}

关于c# - 检查用户是否处于非事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10776027/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com