Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Загрузка иконки напрямую из памяти

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

Загрузка иконки напрямую из памяти

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

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

Обмен данными между процессами с помощью WM_COPYDATA

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

Обмен данными между процессами с помощью WM_COPYDATA

Обмен данными между процессами приложений может выполняться различными способами. Это может быть shared-память, буфер обмена, COM-объекты и другие высокоуровневые способы. Но наиболее простым и понятным способом является передача данных с использованием сообщения WM_COPYDATA. В этом случае обмен происходит через ядро системы с выделением памяти в принимающем процессе. Таким образом, например, выполняется взаимодействие с окном плеера JetAudio.

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

Работа с окнами оповещений в трее на Ассемблере

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

Работа с окнами оповещений в трее на Ассемблере

Окно оповещения в системном трее, оно же System Tray Balloon Notification, - очень удобный инструмент для взаимодействия с пользователем и оповещения его о каких-либо событиях. Когда у меня возникла необходимость, в этих ваших интернетах нашлось не так много материалов по работе с такими оповещениями, а тем более на Ассемблере. Пришлось разбираться самому. Зато теперь я попробую хоть чуть-чуть восполнить этот пробел.

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

Как получить список физических дисков и узнать их размер

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

Как получить список физических дисков и узнать их размер

Как вы знаете, физические диски, установленные в системе, обозначаются символическими ссылками вида "\\.\PhysicalDrive0", "\\.\PhysicalDrive1" и так далее. Однако, в WinAPI нет простых штатных функций, чтобы получить их список. Для того, чтобы сделать это, в интернетах предлагают несколько различных способов. Например, самый дуболомный, это последовательный перебор всех значений от 0 до MAX_DRIVES. В разных компиляторах это значение может меняться от 16 до 26, также не исключено, что значение может дополнительно ограничиваться системой. Дальше в цикле формируется символическая ссылка с текущим индексом и с помощью вызова CreateFile осуществляется попытка открыть это устройство. Если функция вернула ERROR_FILE_NOT_FOUND, то такого физического диска в системе нет, если ошибки нет, то ссылка доступна для использования, в противном случае диск присутствует, но по какой-то причине у вас нет к нему доступа. В принципе, это решение имеет место на существование, но есть вариант более правильный.

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

Моргание окна на Ассемблере

12.12.2017 | Категория: Образ мышления: Assembler | Автор: ManHunter
Наверняка вы не раз сталкивались с тем, что приложение, которое свернуто или работает в фоновом режиме, но хочет привлечь внимание пользователя, использует эффект моргания окна. Это может быть оповещение об окончании длительного процесса или просто информация для пользователя, с которой ему надо как можно быстрее ознакомиться. И действительно, такой способ работает. В этой статье я вам расскажу, как такой эффект реализуется.

Самый простой способ моргнуть окном - использовать стандартную функцию FlashWindow. Для ее использования нужно только знать хэндл окна, которое должно моргнуть, вот и все. Это не обязательно должно быть окно именно вашего приложения, вы можете легко моргать любым окном, доступным в системе. Вызов простейший:
  1.         ; hwnd - хэндл окна, которое должно моргнуть
  2.         invoke  FlashWindow,[hwnd],FALSE
В качестве бонуса она возвращает статус окна, к которому была применена: нулевое значение, если окно не было активным, и ненулевое значение, если было. Это полезно, например, в том случае, когда надо продолжать привлекать внимание пользователя до тех пор, пока он не активирует нужное окно. Недостаток функции FlashWindow в том, что параметры моргания зависят от системы, мы со своей стороны никак на них повлиять не можем.

Если требуется иметь полный контроль над параметрами моргания, то надо использовать более продвинутую функцию FlashWindowEx. Но сперва придется самостоятельно описать используемые структуры и константы, так как FASM в стандартной комплектации их не знает.
  1. ; Описание структуры для моргания окна
  2. struct FLASHWINFO
  3.   cbSize    dd ?
  4.   hwnd      dd ?
  5.   dwFlags   dd ?
  6.   uCount    dd ?
  7.   dwTimeout dd ?
  8. ends
  9.  
  10. ; Флаги режимов моргания окна
  11. FLASHW_CAPTION = 0x00000001
  12. FLASHW_TRAY    = 0x00000002
  13. FLASHW_ALL     = 0x00000003
  14.  
  15. flash       FLASHWINFO ; Структура для моргания окна
Перед вызовом функции в структуре FLASHWINFO заполняются все необходимые параметры: хэндл окна, режим моргания (только заголовок окна, только кнопка окна на панели задач или все сразу), количество морганий и частота.
  1.         ; Заполнить структуру FLASHWINFO
  2.         mov     [flash.cbSize],sizeof.FLASHWINFO
  3.         ; Хэндл окна, которое должно моргнуть
  4.         mov     ecx,[hwnd]
  5.         mov     [flash.hwnd],ecx
  6.         ; Режим моргания - заголовок и кнопка окна в панели задач
  7.         mov     [flash.dwFlags],FLASHW_ALL
  8.         ; Количество морганий, в моем примере 10 итераций
  9.         mov     [flash.uCount],10
  10.         ; Частота морганий
  11.         mov     [flash.dwTimeout],80
  12.         ; Вызвать функцию 
  13.         invoke  FlashWindowEx,flash
Возвращаемое значение такое же, как и в случае с FlashWindow. Во время работы функций FlashWindow и FlashWindowEx все повторные вызовы моргания будут игнорироваться.

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

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