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

最近使用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
}

转载于:https://www.cnblogs.com/yeshou/p/5197765.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值