Что на самом деле делает флаг SEE_MASK_UNICODE в ShellExecuteEx?
Это перевод What does the SEE_MASK_UNICODE flag in ShellExecuteEx actually do? Автор: Реймонд Чен.
Кое-кто с невежливым ником хотел узнать, что делает флаг SEE_MASK_UNICODE
.
А ничего он не делает.
Этот флаг был добавлен во время переноса Оболочки Windows 95 в Windows NT. Это случилось раньше, чем у меня есть доступ к базе данных исходников, но я могу предположить, как он был добавлен.
Одной из вещей, которые было необходимо сделать во время переноса, было создание Unicode-вариантов всех ANSI-функций, добавленных в Windows 95. Это можно было делать несколькими способами. Иногда создавали два варианта одной функции: с A и W суффиксами. Иногда это достигалось A и W вариантами одного интерфейса. Иногда это достигалось добавлением в запись флага, говорящего нужно ли использовать/трактовать данные как ANSI или как Unicode.
Я подозреваю, что изначально для ShellExecuteEx
планировалось использовать третью модель (с флагом). Вероятно, потом разработчики изменили решение и вместо этого сделали A и W варианты самой записи SHELLEXECUTEINFO
(SHELLEXECUTEINFOA
и SHELLEXECUTEINFOW
) и функции ShellExecuteEx
(ShellExecuteExA
и ShellExecuteExW
). Но когда они переключились к другой модели, они оставили флаг нетронутым — вероятно, с целью убрать его позднее, когда будет исправлен весь код, который уже передаёт этот флаг. Однако эта задача так и не была выполнена.
Итак, сегодня этот флаг всё ещё находится в заголовочных файлах Windows, хотя на него никто не обращает внимания.