由于该联合从未在INPUT 之外正确使用,因此您可以将其创建为嵌套类:
class INPUT(Structure):
class _I(Union):
_fields_ = [
('mi', MOUSEINPUT),
('ki', KEYBDINPUT),
('hi', HARDWAREINPUT),
]
_anonymous_ = ('i', )
_fields_ = [
('type', DWORD),
('i', _I),
]
即使您没有使用匿名,也可以使用 input.i.hi.uMsg 来完成。
from ctypes import *
from ctypes.wintypes import *
class MOUSEINPUT(Structure):
_fields_ = [
('dx', LONG),
('dy', LONG),
('mouseData', DWORD),
('dwFlags', DWORD),
('time', DWORD),
('dwExtraInfo', POINTER(ULONG)),
]
class KEYBDINPUT(Structure):
_fields_ = [
('wVk', WORD),
('wScan', WORD),
('dwFlags', DWORD),
('time', DWORD),
('dwExtraInfo', POINTER(ULONG)),
]
class HARDWAREINPUT(Structure):
_fields_ = [
('uMsg', DWORD),
('wParamL', WORD),
('wParamH', DWORD)
]
class INPUT(Structure):
class _I(Union):
_fields_ = [
('mi', MOUSEINPUT),
('ki', KEYBDINPUT),
('hi', HARDWAREINPUT),
]
_anonymous_ = ('i', )
_fields_ = [
('type', DWORD),
('i', _I),
]