gpt4 book ai didi

Python ctypes - 使用 GetVersionEx 函数获取 0

转载 作者:可可西里 更新时间:2023-11-01 11:27:13 26 4
gpt4 key购买 nike

说明:我正在尝试获取函数 GetVersionEx 的结果,但输出始终为“0”:

class op_info(Structure):
_fields_ = [
('dwOSVersionInfoSize', DWORD),
('dwMajorVersion', DWORD),
('dwMinorVersion', DWORD),
('dwBuildNumber', DWORD),
('dwPlatformId', DWORD),
('szCSDVersion', DWORD)
]

def info():
op = op_info()
ctypes.windll.Kernel32.GetVersion(byref(op))
return op.dwMajorVersion

print info()

问题:如何让这个功能发挥作用并得到真正的结果?

编辑:@eryksun 我在调用 GetVersionExW 函数之前做了这个:

 import sys
op.dwOSVersionInfoSize = sys.getsizeof(op_info)

输出为:452

但是info()的最终结果还是0

最佳答案

这是调用 GetVersionExW 的示例设置填写 OSVERSIONINFOOSVERSIONINFOEX记录。

import ctypes
from ctypes.wintypes import BYTE, WORD, DWORD, WCHAR

kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)

class OSVERSIONINFO(ctypes.Structure):
_fields_ = (('dwOSVersionInfoSize', DWORD),
('dwMajorVersion', DWORD),
('dwMinorVersion', DWORD),
('dwBuildNumber', DWORD),
('dwPlatformId', DWORD),
('szCSDVersion', WCHAR * 128))
def __init__(self, *args, **kwds):
super(OSVERSIONINFO, self).__init__(*args, **kwds)
self.dwOSVersionInfoSize = ctypes.sizeof(self)
kernel32.GetVersionExW(ctypes.byref(self))

class OSVERSIONINFOEX(OSVERSIONINFO):
_fields_ = (('wServicePackMajor', WORD),
('wServicePackMinor', WORD),
('wSuiteMask', WORD),
('wProductType', BYTE),
('wReserved', BYTE))

def errcheck_bool(result, func, args):
if not result:
raise ctypes.WinError(ctypes.get_last_error())
return args

kernel32.GetVersionExW.errcheck = errcheck_bool
kernel32.GetVersionExW.argtypes = (ctypes.POINTER(OSVERSIONINFO),)

def get_os_major_version():
info = OSVERSIONINFO()
return info.dwMajorVersion
if __name__ == '__main__':
print get_os_major_version()

关于Python ctypes - 使用 GetVersionEx 函数获取 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32300004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com