Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, Ivan Afonin! Вот Вам программа в формате COM.
Код:
.model tiny .code .startup
mov ax,0003h ;1)необходимо для прямой записи в память под ХР int 10h ;2)очистим экран
mov cx,
2000h ;скроем курсор mov ah, 1 int 10h
;заполним экран текстом mov ax, 0b800h ;сегмент видео mov es, ax xor di,di ;с начала 0 страницы экрана
mov al, 'A' ;в каждой строке свой символ mov ah, attr ;атрибут начинаем с 0eh mov cx, 25 ;25 строк PrintLoop: push cx mov cx, 80 ;в строке 80 символов rep stosw ;пишем pop cx inc al ;инкремент символа loop PrintLoop ;по всем строкам
mov ax, 3505h ;прочитаем адрес вектора 05 int 21h mov seg_05, es ;сохраним сегмент mov off_05, bx ;смещение
lea dx, new_05 ;установим новый вектор 05 в ds:dx mov ax, 2505h int 21h wait_esc: mov ah, 0 ;ждем клавишу int 16h cmp ah, 37h ;PrintScreen? je wait_esc ;все кроме PrintScreen - выход
lds dx, old_05 ;восстановим старый вектор 05 mov ax, 2505h int 21h
.exit 0
new_05: ;PrintScreen push ds cx di ;сохраним используемые
регистры mov cx, 0b800h mov ds, cx ;будем использовать видеосегмент mov di, 1 ;смещение атрибута первого символа
mov cx, 25*80 ;число симаолов на экране
mov al, cs:attr ;атрибут inc al ;инкремент and al, 0fh ;attr должен быть <= 15 jnz SaveAttr ; и не равен 0 inc al ;если = 0, то 1 SaveAttr: mov cs:attr, al ;сохраним атрибут IncAttrLoop: ;пропишем новый атрибут по всем позициям mov [di], al i
nc di inc di loop IncAttrLoop pop di cx ds iret
.data old_05 label dword ;адрес вектора для использования в lds off_05 dw ? ;смещение seg_05 dw ? ;сегмент attr db 0eh ;атрибут
end
Под чистым ДОС-ом будет работать на ура А вот под XP не сработает... Дело в том, что ОС перехватывает некоторые клавиши и сочетания клавиш и до программы под ДОС они
просто не доходят. Но не все потеряно... Есть выход! Необходимо создать в папке с COM-программой PIF-файл! Надеюсь, Вы знаете, как это делать... А вот в свойствах этого PIF-файла на вкладке "Разное" (см. изображение) необходимо убрать "птичку" около PrtSc, Т.о., кнопка PrintScreen станет доступной в нашей программе
----- Люби своего ближнего, как самого себя
Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 05.12.2010, 16:25
Номер ответа: 264533 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Оценка ответа: 5 Комментарий к оценке: Спасибо! =)
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 264533
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.