WinXPx32 では問題なく動作する次のコードを使用しますが、Win7x64 では 0 を返します。psutil ライブラリもそれを返すことはわかっていますが、追加の依存関係なしで実行できるものが必要です。ctypes と win32api は問題ありません。Kernel32.K32GetProcessMemoryInfo も同じ結果で試しました。
import ctypes
psapi = ctypes.windll.psapi
Kernel32 = ctypes.windll.Kernel32
class PROCESS_MEMORY_COUNTERS_EX(ctypes.Structure):
_fields_ = [("cb", ctypes.c_ulong),
("PageFaultCount", ctypes.c_ulong),
("PeakWorkingSetSize", ctypes.c_size_t),
("WorkingSetSize", ctypes.c_size_t),
("QuotaPeakPagedPoolUsage", ctypes.c_size_t),
("QuotaPagedPoolUsage", ctypes.c_size_t),
("QuotaPeakNonPagedPoolUsage", ctypes.c_size_t),
("QuotaNonPagedPoolUsage", ctypes.c_size_t),
("PagefileUsage", ctypes.c_size_t),
("PeakPagefileUsage", ctypes.c_size_t),
("PrivateUsage", ctypes.c_size_t),
]
def GetProcessPrivateUsage():
mem_struct = PROCESS_MEMORY_COUNTERS_EX()
p_handle = Kernel32.GetCurrentProcess()
b = psapi.GetProcessMemoryInfo(p_handle, ctypes.byref(mem_struct), ctypes.sizeof(mem_struct))
print(b)
return mem_struct.PrivateUsage
print(GetProcessPrivateUsage())