Blog. Just Blog

Образ мышления: Assembler

То, что не удается запрограммировать на Ассемблере, приходится паять
Образ мышления: Assembler - RSS-канал Образ мышления: Assembler - Карта сайта

Особенности работы с контролом SysMonthCal32

07.09.2018 | Категория: Образ мышления: Assembler | Автор: ManHunter

Различная ширина SysMonthCal32 в разных локалях

При разработке одной из своих программ я столкнулся с интересной ситуацией. Никаких ракетных технологий, просто в диалоговом окне выводится стандартный виджет календарика через контрол SysMonthCal32. Я работаю в русской версии Windows и наивно предположил, что размеры виджета календарика всегда должны как-то вписываться в те границы, которые я ему определил. Но, как вы можете видеть на этих скриншотах, ширина контрола с календариком заметно отличается в зависимости от установленной в системе локали, на что мне указал один из пользователей (Mufasa, спасибо!). Вариантов нет, пришлось изучить этот вопрос.

Читать статью целиком »
Просмотров: 498 | Комментариев: 2

Как узнать загруженность процессора

24.08.2018 | Категория: Образ мышления: Assembler | Автор: ManHunter

Как узнать загруженность процессора

Очередная интересная задача для программирования - узнать загруженность центрального процессора компьютера в процентах. Проблема в том, что система ни через какие API не предоставляет такого значения, как "загруженность", его просто нет. Зато есть хорошая функция GetSystemTimes, которая возвращает три значения: время, которое система бездействовала, время работы системы в режиме ядра и время работы системы в пользовательском режиме. Узнав разницу значений между этими таймингами за определенный интервал, можно определить загруженность процессора за этот интервал. На многоядерных системах эта функция возвращает суммарные значения по всем ядрам.

Читать статью целиком »
Просмотров: 818 | Комментариев: 7

Как получить название производителя и версию BIOS

12.08.2018 | Категория: Образ мышления: Assembler | Автор: ManHunter

Версия и производитель BIOS в реестре

Получение версии и названия производителя BIOS - не самая частая задача, но если эта тема вам все-таки интересна, то я расскажу, как это сделать. Для приложения самый простой способ, не требующий углубляться в дебри системы, это прочитать соответствующие данные из системного реестра. Нужная нам информация хранится в виде обычных текстовых строк в ключе HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS. При каждой перезагрузке системы данные в них перезаписываются актуальными значениями, а сами параметры закрыты от записи админскими правами доступа. А вот для чтения этих данных достаточно обычных пользовательских прав. Этим мы и воспользуемся.

Читать статью целиком »
Просмотров: 536 | Комментариев: 2

Перетаскивание окна за любое место правой кнопкой мыши

24.07.2018 | Категория: Образ мышления: Assembler | Автор: ManHunter
В одной из первых статей на этом блоге я рассказывал, как легко сделать перетаскивание окна за любое место левой кнопкой мыши. А тут что-то мне захотелось странного, а именно реализовать перетаскивание окна точно так же за любое место, но только правой кнопкой мыши. Как оказалось, простым пробросом сообщения от мышки на заголовок окна сделать это нельзя. После некоторых раздумий у меня получился вот такой вариант. При клике мышкой по окну оно захватывает события мыши при помощи функции SetCapture и сохраняет начальные координаты окна, при перемещении курсора принудительно перемещает окно вслед за ним, а при отпускании кнопки мышки освобождает перехват событий мыши функцией ReleaseCapture. Начнем с обработчика сообщений окна.
  1.         ; Установка обработчика перетаскивания правой кнопкой
  2.         ; мыши и колесиком
  3.         cmp     [msg],WM_RBUTTONDOWN
  4.         je      .drag_window_set
  5.         cmp     [msg],WM_MBUTTONDOWN
  6.         je      .drag_window_set
  7.  
  8.         ; Снятие обработчика перетаскивания правой кнопкой
  9.         ; мыши и колесиком
  10.         cmp     [msg],WM_RBUTTONUP
  11.         je      .drag_window_release
  12.         cmp     [msg],WM_MBUTTONUP
  13.         je      .drag_window_release
  14.  
  15.         ; Обработчик перемещения мыши
  16.         cmp     [msg],WM_MOUSEMOVE
  17.         je      .drag_window_ex
Чтобы не мелочиться, я сделал перетаскивание окна не только правой кнопкой мыши, но и колесиком. При комбинированном клике на окне одновременно и колесиком и правой кнопкой мыши, оно тоже будет перетаскиваться, но если отпустить одну из кнопок, то обработчик перемещения сбросится и перетаскивание остановится. Конечно, можно учесть и корректно обработать даже такую хитрую ситуацию, но я оставлю это вам.

Читать статью целиком »
Просмотров: 460 | Комментариев: 0

Ассоциация файлов с программой

12.07.2018 | Категория: Образ мышления: Assembler | Автор: ManHunter
Сегодня разберем пример ассоциации файлов с программой. В Windows это один из краеугольных камней работы системы. С определенным расширением файлов связана та или иная программа. При клике на документе открывается Word, при открытии html-документа запускается браузер, картинки открываются в просмотрщике, а файлы проектов различных программ открываются в этих программах. Это хорошо и правильно.

Для установки связки определенного расширения файлов со своей программой, сперва надо придумать название типа. Для примера, пусть это будет "MyApplication". Затем в ветке реестра HKEY_CLASSES_ROOT надо создать ключ, соответствующий нужному расширению и присвоить значение параметра по умолчанию, равное придуманному имени.

[HKEY_CLASSES_ROOT\.pcl]
@="MyApplication"

Если программа работает с несколькими расширениями файлов, то для каждого из них точно так же надо прописать ассоциацию с типом "MyApplication".

Теперь надо настроить программу, соответствующую типу "MyApplication". Сперва создается ключ в реестре "HKEY_CLASSES_ROOT\MyApplication". Затем нужно настроить иконку, которая будет отображаться в Проводнике у всех связанных файлов. За это отвечает ключ реестра "HKEY_CLASSES_ROOT\MyApplication\DefaultIcon". В этом примере файлы будут иметь иконку, которая назначена в ресурсах приложения в качестве основной.

[HKEY_CLASSES_ROOT\MyApplication\DefaultIcon]
@="D:\\DEMO\\association.exe,0"

При запуске связанной программы ей в качестве параметра должен передаваться полный путь к файлу, который открывается. Делается это настройкой ключа реестра "MyApplication\Shell\Open\command".

[HKEY_CLASSES_ROOT\MyApplication\Shell\Open\command]
@="\"D:\\DEMO\\association.exe\" \"%1\""

Для отмены ассоциаций достаточно удалить ключи "HKEY_CLASSES_ROOT\MyApplication" и "HKEY_CLASSES_ROOT\.pcl". Вот и вся премудрость.

Читать статью целиком »
Просмотров: 643 | Комментариев: 1

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2019
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 2 (0.0018 сек.) / Память: 4.75 Mb
Наверх