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