1
は事ですが、私は最初の引数としてコールバックfuncを必要とするWindows 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 'ではないのですか?
ありがとうございます。なぜ、ctypesがutf-16ではなくutf-8で文字列をエンコードするのですか? utf-8を使用すると便利ではないでしょうか? – Alcott
@Alcott Windows APIでは、UTF8ではなくUTF16が使用されます。 –