Это перевод About Windows. Автор: MSDN.
Эта статья описывает программные элементы, которые приложения могут использовать для создания и управления окнами; управления отношениями между окнами; изменения размера, перемещения и отображения окон.
Посмотреть текст целиком...
пятница, 16 марта 2012 г.
воскресенье, 19 февраля 2012 г.
Используется ли файл?
Это перевод Is File In Use. Автор: Christian Wimmer.
На форумах DelphiPraxis задали вопрос, который обычно всплывает несколько раз в год. Однако в этот раз я мог сказать, что появился API, который решает эту проблему. Вопрос был о том, как определить, кто держит файл. Главной проблемой стало то, что я никак не мог вспомнить название API, так что Assarbad пришлось постараться и поискать его.
Посмотреть текст целиком...
На форумах DelphiPraxis задали вопрос, который обычно всплывает несколько раз в год. Однако в этот раз я мог сказать, что появился API, который решает эту проблему. Вопрос был о том, как определить, кто держит файл. Главной проблемой стало то, что я никак не мог вспомнить название API, так что Assarbad пришлось постараться и поискать его.
Посмотреть текст целиком...
суббота, 18 февраля 2012 г.
Как мне найти программу, которая держит этот файл?
Это перевод How do I find out which process has a file open? Автор: Реймонд Чен.
Исторически, нет никакого специального способа найти процесс, который держит файл. Файловый объект имеет обычный счётчик ссылок объекта ядра и когда счётчик опускается до нуля - файл закрывается. Но в системе никто не отслеживает процессы, открывшие данный описатель, и сколько именно раз они его открыли (и это упрощённое изложение даже игнорирует тот факт, что счётчик может быть увеличен вовсе не процессом, а, скажем, драйвером режима ядра; или, быть может, изначально счётчик был увеличен процессом, который теперь уже закрыт, но файл ещё держится драйвером ядра).
Это состояние вещей согласуется с концепцией не хранить информацию, которая вам не нужна. Файловую систему не заботит, кто там держит её файлы. Её задача - закрыть файл, когда уйдёт последняя ссылка.
Аналогичную ситуацию вы видите в COM. Всё, что вас заботит - когда же счётчик опустится до нуля (потому что в этот момент вам нужно удалить объект). Если позже вы обнаружите в своём процессе утечку, то у вас нет никакого волшебного запроса "Покажи мне всех, то вызывал _AddRef для моего объекта" - просто потому, что вы никогда и не вели учёт вызывающих _AddRef. Нет у вас и возможности сделать так: "Вот объект, который я хочу удалить. Покажи мне всех использующих его, так что я смогу их удалить".
По крайней мере таким был классический сценарий.
Посмотреть текст целиком...
Исторически, нет никакого специального способа найти процесс, который держит файл. Файловый объект имеет обычный счётчик ссылок объекта ядра и когда счётчик опускается до нуля - файл закрывается. Но в системе никто не отслеживает процессы, открывшие данный описатель, и сколько именно раз они его открыли (и это упрощённое изложение даже игнорирует тот факт, что счётчик может быть увеличен вовсе не процессом, а, скажем, драйвером режима ядра; или, быть может, изначально счётчик был увеличен процессом, который теперь уже закрыт, но файл ещё держится драйвером ядра).
Это состояние вещей согласуется с концепцией не хранить информацию, которая вам не нужна. Файловую систему не заботит, кто там держит её файлы. Её задача - закрыть файл, когда уйдёт последняя ссылка.
Аналогичную ситуацию вы видите в COM. Всё, что вас заботит - когда же счётчик опустится до нуля (потому что в этот момент вам нужно удалить объект). Если позже вы обнаружите в своём процессе утечку, то у вас нет никакого волшебного запроса "Покажи мне всех, то вызывал _AddRef для моего объекта" - просто потому, что вы никогда и не вели учёт вызывающих _AddRef. Нет у вас и возможности сделать так: "Вот объект, который я хочу удалить. Покажи мне всех использующих его, так что я смогу их удалить".
По крайней мере таким был классический сценарий.
Посмотреть текст целиком...
пятница, 17 февраля 2012 г.
Некоторые папки двигать нельзя - и вам придётся научиться с этим жить
Это перевод Some known folders cannot be moved, but others can, and you'll just have to accept that. Автор: Реймонд Чен.
Некоторые из "известных папок" оболочки (Shell known folders) могут быть помечены как
Эта дихотомия представляется простой и недостойной отдельного обсуждения - за исключением того, что у некоторых клиентов иногда возникают проблемы включения этого понятия в своё мировоззрение.
Посмотреть текст целиком...
Некоторые из "известных папок" оболочки (Shell known folders) могут быть помечены как
KF_CATEGORY_FIXED, что делает их неперемещаемыми. И наоборот, если папка файловой системы не является "неподвижной", то она может быть перемещена.Эта дихотомия представляется простой и недостойной отдельного обсуждения - за исключением того, что у некоторых клиентов иногда возникают проблемы включения этого понятия в своё мировоззрение.
Посмотреть текст целиком...
четверг, 8 сентября 2011 г.
Почему функция SetWindowsHookEx принимает параметр HINSTANCE?
Это перевод Why does SetWindowsHookEx take an HINSTANCE parameter? Автор: Реймонд Чен.
Анонимный комментатор спросил, почему функция
Посмотреть текст целиком...
Анонимный комментатор спросил, почему функция
SetWindowsHookEx принимает параметр HINSTANCE, если она всё равно сконвертирует это значение в имя файла.Посмотреть текст целиком...
среда, 7 сентября 2011 г.
Как злоупотребляли оконными ловушками в Win16
Это перевод One way people abused hooks in 16-bit Windows. Автор: Реймонд Чен.
В прошлый раз мы увидели, как в 16-битных Windows реализуются оконные ловушки. Даже хотя значения
Посмотреть текст целиком...
В прошлый раз мы увидели, как в 16-битных Windows реализуются оконные ловушки. Даже хотя значения
HHOOK являются не прозрачными типами данных ("чёрным ящиком"), с которыми нужно работать как с описателями, многие программы "знали слишком много, чтобы стать опасными" - и воспользовались тем фактом, что значения HHOOK были просто указателями на предыдущую процедуру ловушки.Посмотреть текст целиком...
вторник, 6 сентября 2011 г.
Как были реализованы оконные ловушки в 16-битных Windows?
Это перевод How were window hooks implemented in 16-bit Windows? Автор: Реймонд Чен.
Механизм отслеживания оконных ловушек был реализован существенно иначе в 16-битных Windows.
Посмотреть текст целиком...
Механизм отслеживания оконных ловушек был реализован существенно иначе в 16-битных Windows.
Посмотреть текст целиком...
понедельник, 5 сентября 2011 г.
Кандидат на звание самого непонятного сочетания клавиш: Shift+F8
Это перевод Candidate for most obscure keyboard shortcut: Shift+F8. Автор: Реймонд Чен.
Так получилось, что одной из самых непонятных сочетаний клавиш является Shift+F8, которая используется в listbox для несмежного расширенного выбора. Господи, сколько же слов.
Посмотреть текст целиком...
Так получилось, что одной из самых непонятных сочетаний клавиш является Shift+F8, которая используется в listbox для несмежного расширенного выбора. Господи, сколько же слов.
Посмотреть текст целиком...
воскресенье, 4 сентября 2011 г.
Как менее наивный компилятор вызывает импортируемую функцию
Это перевод How a less naive compiler calls an imported function. Автор: Реймонд Чен.
Если функция объявлена со спецификатором
Посмотреть текст целиком...
Если функция объявлена со спецификатором
dllimport, то это указывает компилятору Visual Studio C/C++, что эта функция импортируется из другого (исполняемого) модуля, а не является обычной функцией в этом же исполняемом модуле. Имея на руках эту информацию, компилятор генерирует немного другой код, поскольку теперь он осведомлён об особенностях импортируемых функций.Посмотреть текст целиком...
суббота, 3 сентября 2011 г.
Вызов импортируемой функции, наивный способ
Это перевод Calling an imported function, the naive way. Автор: Реймонд Чен.
Библиотека импорта (import library) разрешает (resolve) символы импортируемых функций, но к ней не обращаются до этапа компоновки. Давайте посмотрим на наивную реализацию, когда компилятор слепо не осведомлён о существовании импортируемых функций.
Посмотреть текст целиком...
Библиотека импорта (import library) разрешает (resolve) символы импортируемых функций, но к ней не обращаются до этапа компоновки. Давайте посмотрим на наивную реализацию, когда компилятор слепо не осведомлён о существовании импортируемых функций.
Посмотреть текст целиком...
пятница, 2 сентября 2011 г.
Смена дизайна импорта в 32-х битных Windows
Это перевод Rethinking the way DLL exports are resolved for 32-bit Windows. Автор: Реймонд Чен.
За последние дни мы узнали, как работает экспорт и импорт функций в 16-битных Windows, а также что экспорт функций в Win32 очень похож на экспорт функций в 16-битных Windows. Но 16-битный импорт был полностью переписан в мире 32-битных Windows.
Посмотреть текст целиком...
За последние дни мы узнали, как работает экспорт и импорт функций в 16-битных Windows, а также что экспорт функций в Win32 очень похож на экспорт функций в 16-битных Windows. Но 16-битный импорт был полностью переписан в мире 32-битных Windows.
Посмотреть текст целиком...
четверг, 1 сентября 2011 г.
Экспортируемые функции, являющиеся forwarder-ами
Это перевод Exported functions that are really forwarders. Автор: Реймонд Чен.
В прошлый раз мы видели как экспортируемые функции в Win32 ведут себя похоже на экспорт функций в 16-битных Windows - только сместился акцент использования с импорта по номеру на импорт по имени. Этот акцент никак не выражен в формате исполняемого файла; и 16-битные и 32-битные DLL могут экспортировать функции по номеру и имени (и обоим одновременно).
Но в Win32 появляется новый тип экспортируемых функций, известный как forwarder.
Посмотреть текст целиком...
В прошлый раз мы видели как экспортируемые функции в Win32 ведут себя похоже на экспорт функций в 16-битных Windows - только сместился акцент использования с импорта по номеру на импорт по имени. Этот акцент никак не выражен в формате исполняемого файла; и 16-битные и 32-битные DLL могут экспортировать функции по номеру и имени (и обоим одновременно).
Но в Win32 появляется новый тип экспортируемых функций, известный как forwarder.
Посмотреть текст целиком...
среда, 31 августа 2011 г.
Как экспортируются DLL функции в 32-битных Windows?
Это перевод How are DLL functions exported in 32-bit Windows? Автор: Реймонд Чен.
Дизайнерам 32-битных Windows не нужно было беспокоиться о втискивании в 256 Кб памяти. Поскольку модули в Win32 построены на загрузке по запросу, то всё, что вам нужно сделать - спроецировать весь образ в память, а затем коснуться тех частей, которые вам нужны. Поэтому нет никакого различия между резидентной и не резидентной таблицами, так что имена экспортируемых функций просто записываются в исполняемый образ вместе с указателем (вернее относительным виртуальным адресом) на имя, хранимое в таблице экспорта.
Посмотреть текст целиком...
Дизайнерам 32-битных Windows не нужно было беспокоиться о втискивании в 256 Кб памяти. Поскольку модули в Win32 построены на загрузке по запросу, то всё, что вам нужно сделать - спроецировать весь образ в память, а затем коснуться тех частей, которые вам нужны. Поэтому нет никакого различия между резидентной и не резидентной таблицами, так что имена экспортируемых функций просто записываются в исполняемый образ вместе с указателем (вернее относительным виртуальным адресом) на имя, хранимое в таблице экспорта.
Посмотреть текст целиком...
вторник, 30 августа 2011 г.
Как импортировались DLL функции в 16-битных Windows?
Это перевод How were DLL functions imported in 16-bit Windows? Автор: Реймонд Чен.
В прошлый раз я рассказал о том, как экспортировались функции в 16-битных Windows. Сегодня мы посмотрим на их импорт.
Посмотреть текст целиком...
В прошлый раз я рассказал о том, как экспортировались функции в 16-битных Windows. Сегодня мы посмотрим на их импорт.
Посмотреть текст целиком...
понедельник, 29 августа 2011 г.
Как экспортировались DLL функции в 16-битных Windows?
Это перевод How were DLL functions exported in 16-bit Windows? Автор: Реймонд Чен.
Весь смысл динамических библиотек (DLL) заключается в динамическом связывании. В то время как статические библиотеки встраиваются в конечный продукт, модуль, который использует динамическую библиотеку, просто говорит: "мне, пожалуйста, функцию X из модуля Y, спасибо". Эта техника имеет преимущества и недостатки. Одно из преимуществ - эффективное использование места на диске и в памяти, поскольку существует только одна копия модуля, вместо отдельных копий для каждого модуля. Второе преимущество - обновление DLL может быть выполнено без перекомпиляции всех программ, её использующих. С другой стороны, возможность менять функциональность также является и одним из недостатков DLL, поскольку одна программа может изменить DLL и вызвать этим каскадные эффекты в других клиентах DLL.
В любом случае, давайте начнём с того, как 16-битные Windows управляли импортом и экспортом. После этого мы посмотрим что было изменено при миграции на 32-битные Windows, а затем мы посмотрим на импорт с точки зрения компилятора.
Посмотреть текст целиком...
Весь смысл динамических библиотек (DLL) заключается в динамическом связывании. В то время как статические библиотеки встраиваются в конечный продукт, модуль, который использует динамическую библиотеку, просто говорит: "мне, пожалуйста, функцию X из модуля Y, спасибо". Эта техника имеет преимущества и недостатки. Одно из преимуществ - эффективное использование места на диске и в памяти, поскольку существует только одна копия модуля, вместо отдельных копий для каждого модуля. Второе преимущество - обновление DLL может быть выполнено без перекомпиляции всех программ, её использующих. С другой стороны, возможность менять функциональность также является и одним из недостатков DLL, поскольку одна программа может изменить DLL и вызвать этим каскадные эффекты в других клиентах DLL.
В любом случае, давайте начнём с того, как 16-битные Windows управляли импортом и экспортом. После этого мы посмотрим что было изменено при миграции на 32-битные Windows, а затем мы посмотрим на импорт с точки зрения компилятора.
Посмотреть текст целиком...
воскресенье, 28 августа 2011 г.
Pidl и моникеры делают примерно одно и то же, только по-разному
Это перевод Pidls and monikers do roughly the same thing, just backwards. Автор: Реймонд Чен.
Работая с Оболочкой (Shell) Windows, вам наверняка в какой-то момент пришлось работать с указателем на список ID элементов (pointer to item ID list), известным как "pidl" (рифмуется с "middle"). С другой стороны, работая с OLE, вы могли работать с моникерами (moniker). В каком-то смысле они делают одно и то же. Они позволяют вам ссылаться на какой-то объект внутри пространства имён (с которым вы как-то работаете), они имеют иерархическую структуру, вы можете их сериализовать и т.п.
Но почему тогда команда Оболочки Windows изобрела pidl-ы, если моникеры делали ровно это же?
Посмотреть текст целиком...
Работая с Оболочкой (Shell) Windows, вам наверняка в какой-то момент пришлось работать с указателем на список ID элементов (pointer to item ID list), известным как "pidl" (рифмуется с "middle"). С другой стороны, работая с OLE, вы могли работать с моникерами (moniker). В каком-то смысле они делают одно и то же. Они позволяют вам ссылаться на какой-то объект внутри пространства имён (с которым вы как-то работаете), они имеют иерархическую структуру, вы можете их сериализовать и т.п.
Но почему тогда команда Оболочки Windows изобрела pidl-ы, если моникеры делали ровно это же?
Посмотреть текст целиком...
суббота, 27 августа 2011 г.
Не всякий человек с не-Windows разделом является гиком
Это перевод Not everybody with a non-Windows partition type is a geek. Автор: Реймонд Чен.
В обсуждении поста "Почему установщик Windows записывает новый загрузочный сектор?" (прим.пер. имеется в виду оригинал) некоторые комментаторы предложили такое поведение: если на машине обнаруживается не-Windows раздел, то предполагать, что машина принадлежит техно-гику. Таким образом, типичный пользователь компьютера может быть спасён от лицезрения технического диалога с гик-вопросом, на которой они не смогут ответить.
Посмотреть текст целиком...
В обсуждении поста "Почему установщик Windows записывает новый загрузочный сектор?" (прим.пер. имеется в виду оригинал) некоторые комментаторы предложили такое поведение: если на машине обнаруживается не-Windows раздел, то предполагать, что машина принадлежит техно-гику. Таким образом, типичный пользователь компьютера может быть спасён от лицезрения технического диалога с гик-вопросом, на которой они не смогут ответить.
Посмотреть текст целиком...
пятница, 26 августа 2011 г.
Прежде чем учиться опознавать неправильное, вам нужно узнать, что есть правильное
Это перевод Before you can learn to recognize what's wrong, you must learn to recognize what's right. Автор: Реймонд Чен.
Иногда, когда я отлаживаю проблему, я могу проигнорировать какой-то поток, а кто-то спросит: "а что делает этот поток? Почему ты его игнорируешь?"
Мой ответ: "Я понятия не имею, что он делает, но что бы он ни делал, это - нормально".
Посмотреть текст целиком...
Иногда, когда я отлаживаю проблему, я могу проигнорировать какой-то поток, а кто-то спросит: "а что делает этот поток? Почему ты его игнорируешь?"
Мой ответ: "Я понятия не имею, что он делает, но что бы он ни делал, это - нормально".
Посмотреть текст целиком...
четверг, 25 августа 2011 г.
Нет, а почему именно 160x31?
Это перевод No, really, why is it 160x31? Автор: Реймонд Чен.
Когда я ранее пояснял, почему свёрнутые (минимизированные) окна имеют размер 160x31, я не пояснил, почему размером выбрано именно ровно 160 и 31.
Посмотреть текст целиком...
Когда я ранее пояснял, почему свёрнутые (минимизированные) окна имеют размер 160x31, я не пояснил, почему размером выбрано именно ровно 160 и 31.
Посмотреть текст целиком...
среда, 24 августа 2011 г.
Максимальный размер переменных окружения - это 32 или 64 Кб?
Это перевод Is the maximum size of the environment 32K or 64K? Автор: Реймонд Чен.
Кажется, есть некоторая путаница в максимальном размере переменных окружения: 32 Кб или 64 Кб. Какое значение правильное?
Посмотреть текст целиком...
Кажется, есть некоторая путаница в максимальном размере переменных окружения: 32 Кб или 64 Кб. Какое значение правильное?
Посмотреть текст целиком...
вторник, 23 августа 2011 г.
Безопасность: не забывайте обнулять вещи, на которые вам наплевать
Это перевод Security: Don't forget to initialize the stuff you don't care about. Автор: Реймонд Чен.
Затерянным в волнении уязвимостей повышения привилегий является простое раскрытие информации через отсутствующую инициализацию мусора (прим.пер.: понятия не имею, зачем оригинальное предложение так построено).
Посмотреть текст целиком...
Затерянным в волнении уязвимостей повышения привилегий является простое раскрытие информации через отсутствующую инициализацию мусора (прим.пер.: понятия не имею, зачем оригинальное предложение так построено).
Посмотреть текст целиком...
понедельник, 22 августа 2011 г.
Событие с авто-сбросом - это просто глупый семафор
Это перевод An auto-reset event is just a stupid semaphore. Автор: Реймонд Чен.
Когда вы создаёте событие с помощью функции
Событие с ручным сбросом прозрачно для понимания: если событие сброшено, то вы ждёте сигнального состояния; если событие установлено (в сигнальном состоянии), то ожидания не происходит (ожидание удовлетворяется сразу). Не играет значения, сколько человек ждут события; они все обрабатываются одинаково, а состояние события не зависит от числа его ожидающих.
Событие с авто-сбросом - более запутывающая штука.
Посмотреть текст целиком...
Когда вы создаёте событие с помощью функции
CreateEvent, вы указываете, хотите ли вы создать событие с авто-сбросом (auto-reset event) или с ручным сбросом (manual-reset event).Событие с ручным сбросом прозрачно для понимания: если событие сброшено, то вы ждёте сигнального состояния; если событие установлено (в сигнальном состоянии), то ожидания не происходит (ожидание удовлетворяется сразу). Не играет значения, сколько человек ждут события; они все обрабатываются одинаково, а состояние события не зависит от числа его ожидающих.
Событие с авто-сбросом - более запутывающая штука.
Посмотреть текст целиком...
воскресенье, 21 августа 2011 г.
Одноэкземплярная программа является своим собственным отказом в обслуживании
Это перевод A single-instance program is its own denial of service. Автор: Реймонд Чен.
Есть много способов, которыми программа может достичь поведения запуска в едином экземпляре; я не буду разбирать их. Но как только люди встают на путь программы с одним запущенным экземпляром, они тут же спотыкаются о другую проблему при анализе безопасности: отказ в обслуживании (denial of service attack).
Посмотреть текст целиком...
Есть много способов, которыми программа может достичь поведения запуска в едином экземпляре; я не буду разбирать их. Но как только люди встают на путь программы с одним запущенным экземпляром, они тут же спотыкаются о другую проблему при анализе безопасности: отказ в обслуживании (denial of service attack).
Мы используем мьютекс с фиксированным именем, чтобы определить, не запущена ли уже копия программы. Но это также означает, что злоумышленник может создать мьютекс с таким именем до запуска программы, блокируя, таким образом, запуск нашей программы! Как я могу предотвратить этот тип отказа в обслуживании?
Посмотреть текст целиком...
суббота, 20 августа 2011 г.
Почему нет программного способа изменить порядок элементов в меню Пуск?
Это перевод Why can't you programmatically reorder the items on the Start menu? Автор: Реймонд Чен.
Классическое меню Пуск и часть "Все программы" меню Пуск в стиле Windows XP позволяют вам изменить порядок ярлыков, показываемых в них. Вы можете использовать перетаскивание для его упорядочивания, либо же просто использовать сортировку по имени. Но почему нет никакого программного интерфейса для выполнения этих операций?
Посмотреть текст целиком...
Классическое меню Пуск и часть "Все программы" меню Пуск в стиле Windows XP позволяют вам изменить порядок ярлыков, показываемых в них. Вы можете использовать перетаскивание для его упорядочивания, либо же просто использовать сортировку по имени. Но почему нет никакого программного интерфейса для выполнения этих операций?
Посмотреть текст целиком...
пятница, 19 августа 2011 г.
Разбираемся, что на самом деле значит "значимые цифры"
Это перевод Understanding what significant digits really mean. Автор: Реймонд Чен.
Числа с плавающей запятой двойной точности (double-precision floating point number) содержат 15 значащих цифр. Что это значит на самом деле?
Посмотреть текст целиком...
Числа с плавающей запятой двойной точности (double-precision floating point number) содержат 15 значащих цифр. Что это значит на самом деле?
Я умножил 0,619207 на 10'000'000 и получил 6'192'069,999999991 вместо 6'192'070. Это же только шесть цифр; где мои обещанные пятнадцать?
Посмотреть текст целиком...
четверг, 18 августа 2011 г.
Свойства оконных классов применяются ко всем окнам этого класса
Это перевод Window class properties apply to all windows that belong to the class. Автор: Реймонд Чен.
Свойства оконных классов применяются ко всем окнам этого класса. Именно поэтому они и называются классовыми свойствами. Это выглядит как очевидная вещь, когда её облекают в слова, но я видел множество "решений", которые теряют из вида этот простой факт.
Посмотреть текст целиком...
Свойства оконных классов применяются ко всем окнам этого класса. Именно поэтому они и называются классовыми свойствами. Это выглядит как очевидная вещь, когда её облекают в слова, но я видел множество "решений", которые теряют из вида этот простой факт.
Посмотреть текст целиком...
среда, 17 августа 2011 г.
Подводные камни вывода сглаженного текста с прозрачным фоном
Это перевод Pitfalls of transparent rendering of anti-aliased fonts. Автор: Реймонд Чен.
Windows предоставляет несколько технологий рендеринга монохромного текста на цветных экранах, пользуясь преимуществами характеристик экрана для предоставления гладкого результата. Эти техники включают в себя сглаживание (grayscale anti-aliasing), а также и более продвинутую технику - ClearType. Обе техники читают фоновые пиксели, чтобы определить, что рисовать. Это означает, что рендеринг текста требует дополнительного внимания.
Посмотреть текст целиком...
Windows предоставляет несколько технологий рендеринга монохромного текста на цветных экранах, пользуясь преимуществами характеристик экрана для предоставления гладкого результата. Эти техники включают в себя сглаживание (grayscale anti-aliasing), а также и более продвинутую технику - ClearType. Обе техники читают фоновые пиксели, чтобы определить, что рисовать. Это означает, что рендеринг текста требует дополнительного внимания.
Посмотреть текст целиком...
вторник, 16 августа 2011 г.
Блуждая в темноте и спотыкаясь о неверное решение
Это перевод Fumbling around in the dark and stumbling across the wrong solution. Автор: Реймонд Чен.
Я не хотел придираться к этой серии записей, но она иллюстрирует интересный шаблон спотыкания на неверном "решении".
Эта серия пытается запустить системный триггер неактивности монитора отправкой сообщения окну рабочего стола (desktop window).
Посмотреть текст целиком...
Я не хотел придираться к этой серии записей, но она иллюстрирует интересный шаблон спотыкания на неверном "решении".
Эта серия пытается запустить системный триггер неактивности монитора отправкой сообщения окну рабочего стола (desktop window).
Посмотреть текст целиком...
понедельник, 15 августа 2011 г.
Помните, что происходит, когда вы делаете широковещательную рассылку
Это перевод Remember what happens when you broadcast a message. Автор: Реймонд Чен.
Иногда я вижу, как люди делают вещи вроде широковещательной рассылки (broadcasting) сообщения
Посмотреть текст целиком...
Иногда я вижу, как люди делают вещи вроде широковещательной рассылки (broadcasting) сообщения
WM_COMMAND всем окнам верхнего уровня (top-level windows). Это одна из вещей, которые настолько очевидно неправильные, что я не понимаю, как кому-то вообще может приходить в голову идея, что это будет работать.Посмотреть текст целиком...
воскресенье, 14 августа 2011 г.
Забытые элементы управления: функция MenuHelp
Это перевод The forgotten common controls: The MenuHelp function. Автор: Реймонд Чен.
Функция
Посмотреть текст целиком...
Функция
MenuHelp - это одна из самых запутывающих функций в библиотеке общих элементов управления. К счастью, вам почти никогда не придётся её использовать, и когда вы узнаете её историю - вы не захотите её использовать.Посмотреть текст целиком...
