2014-02-08 342 views
0

我使用Windows 8,并有Windows API的模块如何模拟使用Python的字符串键盘输入?

我想创建一个方法:

TypeInput(argument) #argument is a string

与客观的说,我的方法模拟如果参数参数的类型是一个字符串。

不幸的是,

我目前使用模拟打字:

win32api.keybd_event(win32con.KEYCODE, MS KEYCODE, 0, 0)

而且我不知道如何抽象,这样我可以在任意字符插入。

我最初的猜测是做unicode转换

但似乎问题是例如

ord('f') = 102 = 66 in hex

但 'F' 的Windows代码糟糕的是

0x046

和46不是66 ...

所以我不太确定他们是如何转换的,它似乎没有等距。

在这一点上,我已经得出结论,有一个更优雅的方式来做到这一点。

会有人如此令人敬畏,让我看看并解释?

回答

2

要使用SendInput而不是keybd_event,并确保KEYBDINPUT.dwFlags字段的标记集已设置为KEYEVENTF_UNICODE。如果你不使用KEYEVENTF_UNICODE,那么你必须确保设置扫描码的关键代码;否则你会得到应用程序特定的失败。

SendInput有一个Python wrapper,所以这也有帮助。

+0

只是好奇,我用SendInput多年只有VK代码(没有扫描码)。什么样的“特定应用失败”? – manuell

+0

@manuell IIRC,如果您不指定扫描码,则远程桌面不起作用。那里有一个,还有其他的...... –