首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >声明PPROCESS_MEMORY_COUNTERS

声明PPROCESS_MEMORY_COUNTERS
EN

Stack Overflow用户
提问于 2013-10-29 14:54:06
回答 1查看 336关注 0票数 0

下面是我的PSAPI.java接口:

代码语言:javascript
复制
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;

    public interface PsApi extends StdCallLibrary {

        public static abstract class PPROCESS_MEMORY_COUNTERS extends Structure {

            public int cb;
            public int PageFaultCount;
            public int PeakWorkingSetSize;
            public int WorkingSetSize;
            public int QuotaPeakPagedPoolUsage;
            public int QuotaPagedPoolUsage;
            public int QuotaPeakNonPagedPoolUsage;
            public int QuotaNonPagedPoolUsage;
            public int PagefileUsage;
            public int PeakPagefileUsage;
        }

        boolean GetProcessMemoryInfo(HANDLE process, PsApi pmem, int cb);
    }

另一个版本(没有抽象):

代码语言:javascript
复制
public static class PPROCESS_MEMORY_COUNTERS extends Structure {

    public int cb;
    public int PageFaultCount;
    public int PeakWorkingSetSize;
    public int WorkingSetSize;
    public int QuotaPeakPagedPoolUsage;
    public int QuotaPagedPoolUsage;
    public int QuotaPeakNonPagedPoolUsage;
    public int QuotaNonPagedPoolUsage;
    public int PagefileUsage;
    public int PeakPagefileUsage;
    @Override
    protected List getFieldOrder() {
        // TODO Auto-generated method stub
        return null;
    }
}

要使用GetProcessMemoryInfo()函数,我应该声明变量:

代码语言:javascript
复制
PPROCESS_MEMORY_COUNTERS pmem;

但是它返回一个错误:

不能将PPROCESS_MEMORY_COUNTERS解析为类型

如何正确地包含PPROCESS_MEMORY_COUNTERS结构?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-08-01 16:13:28

应评论员的请求,我发布了一个代码片段,其中显示了正在运行的进程列表(id、进程名、线程数):

代码语言:javascript
复制
public class windows {
    public static void main(String[] args) {
        Kernel32 kernel32 = Kernel32.INSTANCE;
        WinNT.HANDLE snapshot = kernel32.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPPROCESS, new WinDef.DWORD(0));
        Tlhelp32.PROCESSENTRY32.ByReference processEntry = new Tlhelp32.PROCESSENTRY32.ByReference();

        try {
            while (kernel32.Process32Next(snapshot, processEntry)) {
                HANDLE process = Kernel32.INSTANCE.OpenProcess(0x0400 | 0x0010,
                        false, 0);
                if (process != null) {
                    int len = psapi.GetModuleFileNameExW(process, null, path,
                            1024);
                    if (len > 0)
                        System.out.println(new String(path, 0, len));
                    else
                        System.out.println("GetModuleFileNameW failed");
                } else
                    System.out.println("OpenProcess failed");

                System.out.println(processEntry.th32ProcessID + "\t"
                        + Native.toString(processEntry.szExeFile) + "\t"
                        + processEntry.cntThreads);
            }
        } finally {
            kernel32.CloseHandle(snapshot);
        }
}

使用进程ID (请参阅JNA文档),您可以获得每个进程的内存使用情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19661655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档