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)