1
這裏是東西,我寫了使用Windows API的EnumWindows的一個程序,它需要一個回調FUNC作爲第一個參數,我可憐的代碼如下:[python]:如何通過使用ctypes從指針獲取字符串?
User32 = WinDLL('User32.dll')
LPARAM = wintypes.LPARAM
HWND = wintypes.HWND
BOOL = wintypes.BOOL
def Proc(hwnd, lparam):
print("hwnd = {}, lparam = {}".format(hwnd, cast(lparam, c_char_p)))
return True
WNDPROCFUNC = WINFUNCTYPE(BOOL, HWND, LPARAM) #用winfunctype 比cfunctype 好
cb_proc = WNDPROCFUNC(Proc)
EnumWindows = User32.EnumWindows
EnumWindows.restype = BOOL
EnumWindows(cb_proc, 'abcd')
然後我跑的程序,但它只是打印
hwnd = 65820, lparam = c_char_p(b'a')
hwnd = 65666, lparam = c_char_p(b'a')
hwnd = 65588, lparam = c_char_p(b'a')
hwnd = 65592, lparam = c_char_p(b'a')
hwnd = 1311670, lparam = c_char_p(b'a')
hwnd = 591324, lparam = c_char_p(b'a')
hwnd = 66188, lparam = c_char_p(b'a')
hwnd = 393862, lparam = c_char_p(b'a')
爲什麼不b'abcd'?
非常感謝你,它的工作原理。順便說一句,爲什麼ctypes使用utf-16編碼字符串而不是utf-8?使用utf-8不是很方便嗎? – Alcott
@Alcott Windows API使用UTF16而不是UTF8。 –