
Быстрый поиск
Введите фрагмент названия статьи для поиска
Как узнать состояние лотка CD-ROM
26.09.2013 | Категория: Образ мышления: Assembler | Автор: ManHunter

Как узнать состояние лотка CD-ROM
В комментариях к моей статье про управление лотком CD-ROM был задан правильный вопрос про то, как узнать состояние лотка CD-ROM, открыт он или закрыт. Обычно все программы, управляющие лотками CD-ROM, хранили эту информацию на основании своих последних действий. То есть, если программа открыла лоток привода, то в своем внутреннем массиве данных она ставит признак "открыто" и наоборот. Причем этот статус вполне мог не соответствовать реальному положению дел, если после этого лоток был закрыт или открыт вручную. Долгое время других способов определения статуса лотка CD-ROM не было. Но программист Александр (Rouse_) Багель в одной из своих разработок предложил хитрый способ определять реальное состояние лотка CD-ROM. Он заключается в том, чтобы отправить команду SCSIOP_MECHANISM_STATUS в запросе IOCTL_SCSI_PASS_THROUGH через функцию DeviceIoControl. Исходный пример был написан на Delphi, мне осталось его только перевести на Ассемблер.
Читать статью целиком »
Просмотров: 5997 | Комментариев: 5
Перехват буфера обмена на Ассемблере
24.08.2013 | Категория: Образ мышления: Assembler | Автор: ManHunter

Перехват буфера обмена на Ассемблере
Сегодня разберем интересную тему - перехват буфера обмена. Применений этому перехвату можно найти много: менеджеры буфера обмена, хранящие последние несколько скопированных текстов; программы, выполняющие заданные действия, если в буфере обмена появилось кодовое слово; кейлоггеры, перехватывающие пароли и тексты пользователя; одно время были популярны трояны, подменяющие в буфере обмена номера электронных кошельков на свои собственные. Область применения любой технологии, как обычно, ограничивается только вашей фантазией. Но это все лирика, пора переходить к программированию.
Читать статью целиком »
Просмотров: 7504 | Комментариев: 5
Extreme Reboot & Shutdown 1.1
06.05.2013 | Категория: Мои программы | Автор: ManHunter

Скриншот программы Extreme Reboot & Shutdown
Комплект небольших программ, предназначенных для принудительного выключения и перезагрузки компьютера, гибернации и перевода системы в спящий режим. Программы extreme_off.exe и force_off.exe схожи по функционалу, разница только в используемых функциях. Мгновенно выключают компьютер без сохранения данных, никаких предупреждений не выдается. Программы extreme_reboot.exe и force_reboot.exe - программный аналог кнопки Reset. Никаких предупреждений не выдается, все процессы завершаются мгновенно и без сохранения данных, компьютер перезагружается. Используйте эти программы осторожно, не стоит злоупотреблять некорректным завершением работы системы! Программы safe_off.exe и safe_reboot.exe корректно завершают работу системы, а затем, соответственно, выключают или перезагружают компьютер. Аналог обычного "Пуск" - "Завершение работы". Программа hibernate.exe переводит систему в режим гибернации, а sleep.exe - в спящий режим. Все эти программы можно запускать из пакетных файлов или из заданий планировщиков.
Читать статью целиком »
Просмотров: 15474 | Комментариев: 28
Как узнать название шрифта в диалоговом окне приложения
14.03.2013 | Категория: Образ мышления: Assembler | Автор: ManHunter
Для того, чтобы получить информацию о шрифте, используемом в окне или его отдельном элементе, можно применить следующий код.Code (Assembler) : Убрать нумерацию
- ; Отправить окну запрос на получение информации о шрифте
- invoke SendMessage,[hWindow],WM_GETFONT,NULL,NULL
- or eax,eax
- ; Данные о шрифте получить не удалось
- jz cant_get_font
- ; Получить объект с описанием шрифта
- invoke GetObject,eax,sizeof.LOGFONT,font
- ; Теперь в font.lfFaceName строка названия шрифта
Читать статью целиком »
Просмотров: 9712 | Комментариев: 7
Получение иконки из окна чужого приложения
23.07.2012 | Категория: Образ мышления: Assembler | Автор: ManHunter
В некоторых приложениях, например, в различных таскменеджерах, возникает задача получить иконку окна другого приложения, чтобы затем использовать ее в своем контексте. Делается это очень просто. Окну посылается сообщение WM_GETICON с параметром ICON_SMALL или ICON_BIG, в зависимости от того, маленькую или большую иконку надо получить. Если это не срабатывает, то можно попробовать получить иконку при помощи функции GetClassLong, соответственно, с параметром GCL_HICONSM или GCL_HICON. Если и в этом случае хэндл иконки получить не удалось, то значит не судьба. Или приложение, которому принадлежит окно, не отвечает, или же окно просто не имеет иконки. Для облегчения задачи я написал следующую функцию:Code (Assembler) : Убрать нумерацию
- ;--------------------------------------------------------------
- ; Функция получения иконки окна
- ; by ManHunter / PCL
- ; http://www.manhunter.ru
- ;--------------------------------------------------------------
- ; Параметры:
- ; hwnd - хэндл окна
- ; dType - тип иконки (0 - 16x16, 1 - 32x32)
- ; На выходе:
- ; EAX - хэндл иконки или -1 если окна не существует
- ;--------------------------------------------------------------
- proc GetIcon hwnd:DWORD, dType:DWORD
- pusha
- ; Такое окно существует?
- invoke IsWindow,[hwnd]
- or eax,eax
- jnz @f
- ; Окно не найдено
- mov eax,-1
- jmp .loc_ret
- @@:
- ; Какую иконку надо получить?
- cmp [dType],0
- jne .get_big_icon
- ; Получить хэндл маленькой иконки
- .get_small_icon:
- invoke SendMessage,[hwnd],WM_GETICON,ICON_SMALL,0
- or eax,eax
- jnz .loc_ret
- invoke GetClassLong,[hwnd],GCL_HICONSM
- or eax,eax
- jnz .loc_ret
- jmp .load_def
- ; Получить хэндл большой иконки
- .get_big_icon:
- invoke SendMessage,[hwnd],WM_GETICON,ICON_BIG,0
- or eax,eax
- jnz .loc_ret
- invoke GetClassLong,[hwnd],GCL_HICON
- or eax,eax
- jnz .loc_ret
- ; Получить хэндл иконки по умолчанию
- .load_def:
- invoke LoadIcon,NULL,IDI_WINLOGO
- .loc_ret:
- mov [dType],eax
- popa
- ; Вернуть результат
- mov eax,[dType]
- ret
- endp
Читать статью целиком »
Просмотров: 5072 | Комментариев: 3


