2016-07-16 2 views
1

Почему это только печатает один символ для названия и внутри поля. Как я могу убедиться, что он все это печатает?MessageBox отображает только один символ

import ctypes 
ctypes.windll.user32.MessageBoxA(0, "info", "title", 3) 

только «i» печатается и печатается только «t» для названия, в чем проблема?

ответ

2

Если тест

ctypes.windll.user32.MessageBoxW(0, "info", "title", 3) 

должно быть "информация" и "название". Также, если вы проверите

ctypes.windll.user32.MessageBoxA(0, "info".encode('ascii'), 
           "title".encode('ascii'), 3) 

Так что это похоже на проблему с кодировкой текста. По умолчанию строки, кодированные UTF-16-le, передаются по умолчанию.

>>> 'info'.encode('utf-16-le') 
b'i\x00n\x00f\x00o\x00' 
>>> 'title'.encode('utf-16-le') 
b't\x00i\x00t\x00l\x00e\x00' 

Поскольку MessageBoxANULL ожидает, оканчивающиеся строки C, только два символа с самого начала, т.е. 'i\0' и 't\0', были приняты во внимание.

+1

'ctypes.windll.user32.MessageBoxA (0, b'info ', b'title', 3)' также отлично –

Смежные вопросы