1
여기
는 일이, 내가 첫 번째 인수로 콜백 FUNC를 필요로 윈도우 API를 EnumWindows를 사용하여 프로그램을 작성, 다음과 같이 불쌍한 내 코드는 다음과 같습니다[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 '가 아닌가요?
대단히 감사합니다. BTW, 왜 ctypes가 utf-16이 아닌 utf-8로 문자열을 인코딩합니까? utf-8을 사용하는 것이 편리하지 않습니까? – Alcott
@Alcott Windows API는 UTF8이 아닌 UTF16을 사용합니다. –