ToUnicodeEx() 总是 returns python 中的 0
ToUnicodeEx() always returns 0 in python
我试图在 python 中包装 C++ 函数 ToUnicodeEx(),但它无法正常工作,总是 returns 0.
在 MSDN 0 上表示:
The specified virtual key has no translation for the current state of the keyboard. Nothing was written to the buffer specified by pwszBuff.
from ctypes import *
_ToUnicodeEx = WinDLL('user32').ToUnicodeEx
_ToUnicodeEx.argtypes = [c_uint,c_uint,c_byte,c_wchar_p,c_int,c_uint,c_int]
_ToUnicodeEx.restype = c_int
def ToUn(vk,sc,kst,wfl,hkid):
#b - is as in C++ pwszBuff
b = create_unicode_buffer(5)
print(_ToUnicodeEx(vk,sc,kst,b,5,wfl,hkid))
return b.value
#It must print "a" but prints "".
print(ToUn(65,0,0,0,1033))
我是不是做错了什么,总是returns0?
P.S。在 C# 中工作,使用相同的参数...
这更符合 ToUnicodeEx 的 MSDN 文档:
_ToUnicodeEx.argtypes = [c_uint,c_uint,POINTER(c_char),POINTER(c_wchar),c_int,c_uint,c_void_p]
c_wchar_p
假定空终止并且 c_void_p
适用于句柄。第三个参数应该是一个 256 字节的数组,最后一个参数是可选的,所以我尝试了这个并得到了你想要的结果。我承认我不了解函数的复杂性,所以我不知道什么适合参数。我刚好满足类型要求。
from ctypes import *
_ToUnicodeEx = WinDLL('user32').ToUnicodeEx
_ToUnicodeEx.argtypes = [c_uint,c_uint,POINTER(c_char),POINTER(c_wchar),c_int,c_uint,c_void_p]
_ToUnicodeEx.restype = c_int
def ToUn(vk,sc,wfl,hkid):
kst = create_string_buffer(256)
b = create_unicode_buffer(5)
print(_ToUnicodeEx(vk,sc,kst,b,5,wfl,hkid))
return b.value
print(ToUn(65,0,0,None))
输出:
1
a
我试图在 python 中包装 C++ 函数 ToUnicodeEx(),但它无法正常工作,总是 returns 0.
在 MSDN 0 上表示:
The specified virtual key has no translation for the current state of the keyboard. Nothing was written to the buffer specified by pwszBuff.
from ctypes import *
_ToUnicodeEx = WinDLL('user32').ToUnicodeEx
_ToUnicodeEx.argtypes = [c_uint,c_uint,c_byte,c_wchar_p,c_int,c_uint,c_int]
_ToUnicodeEx.restype = c_int
def ToUn(vk,sc,kst,wfl,hkid):
#b - is as in C++ pwszBuff
b = create_unicode_buffer(5)
print(_ToUnicodeEx(vk,sc,kst,b,5,wfl,hkid))
return b.value
#It must print "a" but prints "".
print(ToUn(65,0,0,0,1033))
我是不是做错了什么,总是returns0?
P.S。在 C# 中工作,使用相同的参数...
这更符合 ToUnicodeEx 的 MSDN 文档:
_ToUnicodeEx.argtypes = [c_uint,c_uint,POINTER(c_char),POINTER(c_wchar),c_int,c_uint,c_void_p]
c_wchar_p
假定空终止并且 c_void_p
适用于句柄。第三个参数应该是一个 256 字节的数组,最后一个参数是可选的,所以我尝试了这个并得到了你想要的结果。我承认我不了解函数的复杂性,所以我不知道什么适合参数。我刚好满足类型要求。
from ctypes import *
_ToUnicodeEx = WinDLL('user32').ToUnicodeEx
_ToUnicodeEx.argtypes = [c_uint,c_uint,POINTER(c_char),POINTER(c_wchar),c_int,c_uint,c_void_p]
_ToUnicodeEx.restype = c_int
def ToUn(vk,sc,wfl,hkid):
kst = create_string_buffer(256)
b = create_unicode_buffer(5)
print(_ToUnicodeEx(vk,sc,kst,b,5,wfl,hkid))
return b.value
print(ToUn(65,0,0,None))
输出:
1
a