среда, 11 марта 2020 г.

Печальная, но короткая история значения реестра SM_AccessoriesName

Это перевод The sad but short story of the SM_AccessoriesName registry value. Автор: Реймонд Чен.

SM_AccessoriesName - ещё одна жертва программ, влезающих в недокументированные разделы реестра.

Однажды генеральный директор компании пожаловался в Конгресс на расширения файлов Windows

Это перевод That time the CEO of a company complained to Congress about Windows file extensions. Автор: Реймонд Чен.

В те времена, когда ненавидеть Microsoft было ещё более модно, чем сегодня (да, некоторые вещи никогда не выходят из моды), я помню, как генеральный директор одной технологической компании свидетельствовал перед Конгрессом, чтобы пожаловаться на файловые расширения Windows.

вторник, 25 февраля 2020 г.

Почему существуют тривиальные функции типа CopyRect и EqualRect?

Это перевод Why are there trivial functions like Copy­Rect and Equal­Rect? Автор: Реймонд Чен.

Если вы покопаетесь внутри user32, вы увидите там некоторые, казалось бы, тривиальные функции - такие как CopyRect и EqualRect. Зачем нам вообще нужны целые функции для того, что можно сделать с помощью операторов := и =?

Один байт = один доллар

Это перевод One byte used to cost a dollar. Автор: Реймонд Чен.

В те времена, когда программное обеспечение распространялось на дискетах (помните дискеты?), для Windows было правило: один байт стоит один доллар.

пятница, 17 января 2020 г.

Подводный камень: размещение окна под TopMost окном сделает окно TopMost

Это перевод Nasty gotcha: Positioning your window beneath a topmost window makes it topmost. Автор: Реймонд Чен.

У функции DeferWindowPos (и, следовательно, любой функции на её основе, типа SetWindowPos) есть неприятный подводный камень: если вы укажете hwndInsertAfter, а окно insert-after будет самым верхним (TopMost), то позиционируемое окно будет размещено сразу после этого окна.

Пока всё идёт нормально.

Почему я не могу переместить FOLDERID_LocalAppData с помощью SHSetKnownFolderPath?

Это перевод Why can’t I use SHSetKnownFolderPath to change the location of FOLDERID_LocalAppData? Автор: Реймонд Чен.

Заказчик заметил, что его модульный тест начал давать сбой в Windows 10 версии 1803. В частности, он не прошел здесь:
SHSetKnownFolderPath(FOLDERID_LocalAppData, 0, 0, temporaryDirectory);
с ошибкой E_INVALIDARG. Что изменилось в Windows 10 версии 1803, из-за чего этот вызов стал недействительным?

четверг, 16 января 2020 г.

Почему последний выбранный файл появляется первым, когда я выбираю несколько файлов в диалоге открытия файла?

Это перевод When I select multiple files in the File Open dialog, why does the last item come first? Автор: Реймонд Чен.

Если у вас есть диалог открытия файла, который поддерживает множественный выбор, и вы выбираете несколько файлов, вы можете заметить, что файл, выбранный последним, указывается первым. Это раздражает, если порядок файлов при выборе является важным (прим. пер.: например, при добавлении фото в альбом). Почему последний выбранный элемент становится первым в списке?

Историческая важность ресторана Burgermaster

Это перевод The historical significance of the Burgermaster drive-in restaurant. Автор: Реймонд Чен.

С 1981 по 1986 год штаб-квартира Microsoft находилась в здании, которое тогда было известно как Northup Building, 10700 Northup Way в Белвью. Давным-давно я рассказал историю об отеле La Quinta рядом с этим зданием. Здание на другой стороне также играет значительную роль в истории Microsoft. Это здание - ресторан Burgermaster.

В Windows 3.0 сегмент данных, в котором записывались местоположения всех других сегментов данных, назывался BurgerMaster¹. Почему?

понедельник, 9 сентября 2019 г.

Суеверие: почему старожилы предпочитают GetFileAttributes для проверки существования файла?

Это перевод Superstition: Why is GetFileAttributes the way old-timers test file existence? Автор: Реймонд Чен.

Если вы спросите старого пердуна: "Как проверить наличие файла?", он наверняка ответит: "Используй GetFileAttributes". Это и сегодня, вероятно, самый быстрый способ проверки существования файла, поскольку он требует только одного вызова. Другие методы (такие как FindFirstFile или CreateFile) требуют дополнительного вызова FindClose или CloseHandle - что приведёт к дополнительным запросам по сети, увеличивая стоимость проверки.

Но в прежние времена выбор GetFileAttributes был не просто оптимизацией производительности. Если вместо этого вы попытаетесь открыть файл для проверки его существования, вы можете и вовсе получить неправильный ответ!

четверг, 5 сентября 2019 г.

Что такое __wchar_t (с двумя ведущими подчёркиваниями) и почему у меня вылезают связанные с ним ошибки?

Это перевод What is __wchar_t (with the leading double underscores) and why am I getting errors about it? Автор: Реймонд Чен.

Компилятор Microsoft Visual C++ имеет параметр компилятора с названием /Zc:wchar_t, который позволяет вам контролировать, что же означает тип wchar_t.

Согласно стандарту C++, wchar_t - это отдельный родной (встроенный, нативный) тип, и именно так по умолчанию считает компилятор Visual C++. Тем не менее, вы можете передать /Zc:wchar_t-, и это отключит встроенное определение типа wchar_t, позволяя вам определить тип так, как вам нравится. А для Windows это исторически означает:
typedef unsigned short wchar_t;
потому что Windows предшествует версиям стандартов C и C++, которые представили wchar_t как собственный тип.

Так что теперь у вас есть проблема, если вы пишете библиотеку, которая будет использоваться как кодом старой школы, написанным с wchar_t, определённым как псевдоним для unsigned short, так и кодом новой школы, написанным с wchar_t как отдельным внутренним типом. Какой тип данных вам нужно использовать для строковых параметров?