C和Java JNA获取系统空闲时间 --GetLastInputInfo 函数

来源:互联网 发布:qq视频网络不稳定 编辑:程序博客网 时间:2024/06/15 17:14
#define _WIN32_WINNT   0x0500#define WINVER       0x0500  //GetLastInputInfo needs Win2K#include <windows.h>#include <iostream>void testLastInput()  {       LASTINPUTINFO lpi;lpi.cbSize = sizeof(lpi);printf("LASTINPUTINFO.cbSize=%d\n",lpi.cbSize);//LASTINPUTINFO.cbSize=8int last_input_time=0;for(int idle_time=0;idle_time<5;)    {  GetLastInputInfo(&lpi);if(lpi.dwTime==last_input_time){idle_time++;}else{last_input_time=lpi.dwTime;idle_time=0;}printf("idle_time=%d seconds\n",idle_time);        Sleep(1000);      }  }  int main(int arg){testLastInput();    return 0;  }


import com.sun.jna.Native;import com.sun.jna.Structure;import com.sun.jna.platform.win32.User32;import com.sun.jna.win32.W32APIOptions;public class GetLastInputInfo {    public static void main(String[] args) throws Exception {    Win32.LastInputInfo lastInputInfo = new Win32.LastInputInfo();    int last_input_time=0;    for(int idle_time=0;idle_time<5;){    Win32.INSTANCE.GetLastInputInfo(lastInputInfo);    if(lastInputInfo.dwTime==last_input_time){    idle_time++;    }else{    last_input_time=lastInputInfo.dwTime;    idle_time=0;    }    System.out.println("空闲: "+idle_time+" 秒");    Thread.sleep(1000);    }    }public interface Win32 extends User32 {public static final Win32 INSTANCE = (Win32)Native.loadLibrary("user32", Win32.class, W32APIOptions.DEFAULT_OPTIONS);public static class LastInputInfo extends Structure {        public int cbSize = 8;        public int dwTime;    }    public boolean GetLastInputInfo(LastInputInfo lastInputInfo);}}


Java 所需的JNA jar资源在这里jars.rar