当前位置:  开发笔记 > 编程语言 > 正文

如何判断Windows何时处于非活动状态

如何解决《如何判断Windows何时处于非活动状态》经验,为你挑选了2个好方法。

只有当你有一段时间没有使用电脑时,各种程序才能做些事情(例如屏幕保护程序,Google桌面索引等).

他们怎么知道什么时候不活跃?Windows中是否有一些功能可以告诉您它处于非活动状态的时间,或者您是否必须使用某种键盘/鼠标钩来自行跟踪活动?

我正在使用C#,但我对任何确定不活动的方法感兴趣.



1> TheSoftwareJ..:

编辑:改变了答案,提供了Shy答案背后的文字和细节(应该被接受).随意合并并删除这个.

GetLastInputInfo函数GetLastInputInfo函数检索上次输入事件的时间.

从P/Invoke粘贴到这里

此函数检索自上次用户输入以来的时间

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

static int GetLastInputTime()
{
    int idleTime = 0;
    LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
    lastInputInfo.cbSize = Marshal.SizeOf( lastInputInfo );
    lastInputInfo.dwTime = 0;

    int envTicks = Environment.TickCount;

    if( GetLastInputInfo( ref lastInputInfo ) )
    {
    int lastInputTick = lastInputInfo.dwTime;

    idleTime = envTicks - lastInputTick;
    }

    return (( idleTime > 0 ) ? ( idleTime / 1000 ) : idleTime );
}

[StructLayout( LayoutKind.Sequential )]
struct LASTINPUTINFO
{
    public static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO));

    [MarshalAs(UnmanagedType.U4)]
    public int cbSize;    
    [MarshalAs(UnmanagedType.U4)]
    public UInt32 dwTime;
}

FWIW:我在AnAppADay期间实现了全局键盘和鼠标钩子.看到这个应用程序的来源 - 它非常接近你想要的.您需要的类位于AnAppADay.Utils命名空间中. [由于linkrot划伤]



2> shoosh..:

谷歌是你的朋友

基本上用这个.
在使用之前不要忘记完全准备好文档.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有