NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

win32.py (3601B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\win32.py
      2 import ctypes
      3 from ctypes import *
      4 from ctypes.wintypes import *
      5 SIZE_T = c_size_t
      6 DWORDLONG = c_uint64
      7 CF_UNICODETEXT = 13
      8 
      9 def GetClipboardData():
     10     if not ctypes.windll.user32.OpenClipboard(0):
     11         raise ctypes.WinError()
     12     try:
     13         if not ctypes.windll.user32.IsClipboardFormatAvailable(CF_UNICODETEXT):
     14             return
     15         data = ctypes.windll.user32.GetClipboardData(CF_UNICODETEXT)
     16         if not data:
     17             raise ctypes.WinError()
     18         ld = ctypes.windll.kernel32.GlobalLock(data)
     19         if not ld:
     20             raise ctypes.WinError()
     21         try:
     22             return ctypes.c_wchar_p(ld).value
     23         finally:
     24             ctypes.windll.kernel32.GlobalUnlock(data)
     25 
     26     finally:
     27         if not ctypes.windll.user32.CloseClipboard():
     28             raise ctypes.WinError()
     29 
     30 
     31 def SetConsoleTitle(title):
     32     if not ctypes.windll.kernel32.SetConsoleTitleW(unicode(title)):
     33         raise ctypes.WinError()
     34 
     35 
     36 def GetCurrentProcessId():
     37     return ctypes.windll.kernel32.GetCurrentProcessId()
     38 
     39 
     40 def StructToKeyval(s):
     41     import utillib as util
     42     d = dict(((k, getattr(s, k)) for k, t in s._fields_))
     43     return util.KeyVal(**d)
     44 
     45 
     46 class PROCESS_MEMORY_COUNTERS_EX(Structure):
     47     _fields_ = [('cb', DWORD),
     48      ('PageFaultCount', DWORD),
     49      ('PeakWorkingSetSize', SIZE_T),
     50      ('WorkingSetSize', SIZE_T),
     51      ('QuotaPeakPagedPoolUsage', SIZE_T),
     52      ('QuotaPagedPoolUsage', SIZE_T),
     53      ('QuotaPeakNonPagedPoolUsage', SIZE_T),
     54      ('QuotaNonPagedPoolUsage', SIZE_T),
     55      ('PagefileUsage', SIZE_T),
     56      ('PeakPagefileUsage', SIZE_T),
     57      ('PrivateUsage', SIZE_T)]
     58 
     59 
     60 def GetProcessMemoryInfo():
     61     f = windll.Kernel32.GetCurrentProcess
     62     f.retval = HANDLE
     63     h = f()
     64     counters = PROCESS_MEMORY_COUNTERS_EX()
     65     windll.Psapi.GetProcessMemoryInfo(HANDLE(h), byref(counters), sizeof(counters))
     66     return StructToKeyval(counters)
     67 
     68 
     69 class MEMORYSTATUSEX(Structure):
     70     _fields_ = [('dwLength', DWORD),
     71      ('dwMemoryLoad', DWORD),
     72      ('ullTotalPhys', DWORDLONG),
     73      ('ullAvailPhys', DWORDLONG),
     74      ('ullTotalPageFile', DWORDLONG),
     75      ('ullAvailPageFile', DWORDLONG),
     76      ('ullTotalVirtual', DWORDLONG),
     77      ('ullAvailVirtual', DWORDLONG),
     78      ('ullAvailExtendedVirtual', DWORDLONG)]
     79 
     80 
     81 def GlobalMemoryStatus():
     82     counters = MEMORYSTATUSEX()
     83     counters.dwLength = sizeof(counters)
     84     windll.Kernel32.GlobalMemoryStatusEx(byref(counters))
     85     return StructToKeyval(counters)
     86 
     87 
     88 class PERFORMANCE_INFORMATION(Structure):
     89     _fields_ = [('cb', DWORD),
     90      ('CommitTotal', SIZE_T),
     91      ('CommitLimit', SIZE_T),
     92      ('CommitPeak', SIZE_T),
     93      ('PhysicalTotal', SIZE_T),
     94      ('PhysicalAvailable', SIZE_T),
     95      ('SystemCache', SIZE_T),
     96      ('KernelTotal', SIZE_T),
     97      ('KernelPaged', SIZE_T),
     98      ('KernelNonPaged', SIZE_T),
     99      ('PageSize', SIZE_T),
    100      ('HandleCount', DWORD),
    101      ('ProcessCount', DWORD),
    102      ('ThreadCount', DWORD)]
    103 
    104 
    105 def GetPerformanceInfo():
    106     counters = PERFORMANCE_INFORMATION()
    107     windll.Psapi.GetPerformanceInfo(byref(counters), sizeof(counters))
    108     return StructToKeyval(counters)
    109 
    110 
    111 def GetProcessWorkingSetSize():
    112     f = windll.Kernel32.GetCurrentProcess
    113     f.retval = HANDLE
    114     h = f()
    115     min, max = SIZE_T(), SIZE_T()
    116     flags = DWORD()
    117     try:
    118         windll.Kernel32.GetProcessWorkingSetSizeEx(HANDLE(h), byref(min), byref(max), byref(flags))
    119     except:
    120         windll.Kernel32.GetProcessWorkingSetSize(HANDLE(h), byref(min), byref(max))
    121 
    122     return (min.value, max.value, flags.value)