golang windows idle time (键盘鼠标的空闲时间)

yeshou · · 2325 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

最近使用golang开发windows服务,需要获取idle time,由于资料比较少,在此记录,代码如下:

package osapi

import (
    "syscall"
    "unsafe"

    "github.com/lxn/win"
)

// last input info
var lastInputInfo struct {
    cbSize uint32
    dwTime uint32
}

// get idle time
func GetIdleTime() int64 {
    lastInputInfo.cbSize = uint32(unsafe.Sizeof(lastInputInfo))

    // load user32.dll , Kernel32.dll only once
    user32 := win.MustLoadLibrary("user32.dll")
    kernal32 := win.MustLoadLibrary("Kernel32.dll")

    getLastInputInfo := win.MustGetProcAddress(user32, "GetLastInputInfo")
    getTickCount := win.MustGetProcAddress(kernal32, "GetTickCount")

    tickCount, _, _ := syscall.Syscall(getTickCount, 0, 0, 0, 0)
    res, _, _ := syscall.Syscall(getLastInputInfo, 1, uintptr(unsafe.Pointer(&lastInputInfo)), 0, 0)
    if res == 0 {
        panic("get idle time error")
    }
    result := int64((int64(tickCount) - int64(lastInputInfo.dwTime)) / 1000)
    var idleTime int64 = 0
    if result > 0 {
        idleTime = result
    }
    return idleTime
}

有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:yeshou

查看原文:golang windows idle time (键盘鼠标的空闲时间)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2325 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传