package org.rzo.yajsw.os.ms.win.w32;
import java.util.logging.Logger;
import org.rzo.yajsw.os.SystemInformation;
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.Structure;
import com.sun.jna.platform.win32.Kernel32;
public class WindowsXPSystemInformation implements SystemInformation
{
public Logger _logger;
public interface MyKernel32 extends Kernel32
{
// Method declarations, constant and structure definitions go here
/** The INSTANCE. */
MyKernel32 INSTANCE = (MyKernel32) Native.loadLibrary("kernel32", MyKernel32.class);
/*
* typedef struct _MEMORYSTATUSEX { DWORD dwLength; DWORD dwMemoryLoad;
* DWORDLONG ullTotalPhys; DWORDLONG ullAvailPhys; DWORDLONG
* ullTotalPageFile; DWORDLONG ullAvailPageFile; DWORDLONG
* ullTotalVirtual; DWORDLONG ullAvailVirtual; DWORDLONG
* ullAvailExtendedVirtual; } MEMORYSTATUSEX,LPMEMORYSTATUSEX;
*/
static class MEMORYSTATUSEX extends Structure
{
public int dwLength;
public int dwMemoryLoad;
public NativeLong ullTotalPhys;
public NativeLong ullAvailPhys;
public NativeLong ullTotalPageFile;
public NativeLong ullAvailPageFile;
public NativeLong ullTotalVirtual;
public NativeLong ullAvailVirtual;
public NativeLong ullAvailExtendedVirtual;
}
/*
* BOOL WINAPI GlobalMemoryStatusEx( __inout LPMEMORYSTATUSEX lpBuffer
* );
*/
boolean GlobalMemoryStatusEx(MEMORYSTATUSEX lpBuffer);
}
public long freeRAM()
{
MyKernel32.MEMORYSTATUSEX lpBuffer = new MyKernel32.MEMORYSTATUSEX();
lpBuffer.size();
lpBuffer.dwLength = lpBuffer.size();
if (MyKernel32.INSTANCE.GlobalMemoryStatusEx(lpBuffer))
{
lpBuffer.read();
return lpBuffer.ullAvailPhys.longValue();
}
return 0;
}
public long totalRAM()
{
MyKernel32.MEMORYSTATUSEX lpBuffer = new MyKernel32.MEMORYSTATUSEX();
lpBuffer.size();
lpBuffer.dwLength = lpBuffer.size();
if (MyKernel32.INSTANCE.GlobalMemoryStatusEx(lpBuffer))
{
lpBuffer.read();
return lpBuffer.ullTotalPhys.longValue();
}
return 0;
}
public void setLogger(Logger logger)
{
_logger = logger;
}
}