我在寻找到使用的Kinect玩视频游戏。 这既需要键盘和鼠标事件的仿真。 我已经想通了,与ctypes的SendInput()键盘事件工作在两个天际和我的世界。 我还发现,ctypes的mouse_event()两个天际和工作的Minecraft用于模拟鼠标按键。 这些是到目前为止,我已经找到了解决方案,似乎两个天际和的Minecraft工作。
我遇到的主要问题是与天际内走动玩家的相机。 我能够使用ctypes的SetUserPos(),也ctypes的mouse_event()左右移动相机的Minecraft。 但无论是解决方案的天际工作。 我一直在使用SendInput()移动玩家的相机在天际也尝试过,但每次光标获取与SendInput()(外连天际)移动时,我的显示器了一会儿那张空白,相机仍然不动(我不知道为什么这样的事情发生了......)
那么,有没有反正我可能能够模拟内天际或其他游戏的摄影机运动,可能处理他们的鼠标输入相似? 我愿意用C / C ++完成这个任务,但简单的Python会更理想。 感谢您的任何你可能有所有的建议!
我还打算要离开我曾经让我的显示器变成空白的代码。 我想SendInput()可能不会为内天际相机移动工作,但也许我只是做了一些可怕的错误。 (我也得到了大部分从线程的众多下面的代码在网上。)
import ctypes
import time
# C struct redefinitions
PUL = ctypes.POINTER(ctypes.c_ulong)
class KeyBdInput(ctypes.Structure):
_fields_ = [("wVk", ctypes.c_ushort),
("wScan", ctypes.c_ushort),
("dwFlags", ctypes.c_ulong),
("time", ctypes.c_ulong),
("dwExtraInfo", PUL)]
class HardwareInput(ctypes.Structure):
_fields_ = [("uMsg", ctypes.c_ulong),
("wParamL", ctypes.c_short),
("wParamH", ctypes.c_ushort)]
class MouseInput(ctypes.Structure):
_fields_ = [("dx", ctypes.c_long),
("dy", ctypes.c_long),
("mouseData", ctypes.c_ulong),
("dwFlags", ctypes.c_ulong),
("time", ctypes.c_ulong),
("dwExtraInfo", PUL)]
class POINT(ctypes.Structure):
_fields_ = [("x", ctypes.c_ulong),
("y", ctypes.c_ulong)]
class Input_I(ctypes.Union):
_fields_ = [("ki", KeyBdInput),
("mi", MouseInput),
("hi", HardwareInput)]
class Input(ctypes.Structure):
_fields_ = [("type", ctypes.c_ulong),
("ii", Input_I)]
# Actuals Functions
def PressKey(hexKeyCode):
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.ki = KeyBdInput(0, hexKeyCode, 0x0008, 0, ctypes.pointer(extra))
x = Input(ctypes.c_ulong(1), ii_)
ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
def ReleaseKey(hexKeyCode):
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.ki = KeyBdInput(0, hexKeyCode, 0x0008 | 0x0002, 0, ctypes.pointer(extra)) # lint:ok
x = Input(ctypes.c_ulong(1), ii_)
ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
def MoveMouse(x, y):
extra = ctypes.c_ulong(0)
ii_ = Input_I()
x = int(x*(65536/ctypes.windll.user32.GetSystemMetrics(0))+1)
y = int(y*(65536/ctypes.windll.user32.GetSystemMetrics(1))+1)
ii_.mi = MouseInput(x, y, 0, 0x0001 | 0x8000, 1, ctypes.pointer(extra))
x = Input(ctypes.c_ulong(0), ii_)
ctypes.windll.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))
def main():
mouse = Mouse()
time.sleep(3)
MoveMouse(100, 100)
main()