Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Print Screen в DOS 
V
    Опции темы
iff
Дата 23.3.2010, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



PRTSC.COM

Программа организует запись в файл всего содержимого видеопамяти, т.е.
записывает в файл весь текст, отображённый на дисплее. Корректно выполняется в
текстовых видеорежимах 0-3 и установленной активной нулевой видеостраницей.
Объём генерируемого файла 2050 байт.

Формат команды:
   дк:пк\PRTSC диск:путь\имя_файла.расш
Пример:
   PRTSC screen.txt
Записывает в файл screen.txt текст, отображенный на дисплее.
--------------------------------------------------------------------------------

Код

        .MODEL  TINY
        .CODE
        ORG     100H
MAIN:
        MOV     BL, DS:[80H]
        CMP     BYTE PTR [BX], 0
        JE      E10
        MOV     BYTE PTR [BX+81H], 0
        MOV     AH, 3CH
        MOV     DX, 82H
        XOR     CX, CX
        INT     21H
        JC      E10
        PUSH    AX
        PUSH    DS
        MOV     AX, 0B800H
        MOV     DS, AX
        MOV     CX, 25
        LEA     DI, FILEDAT
        XOR     SI, SI
A10:    PUSH    CX
        MOV     CX, 80
A20:    MOVSB
        INC     SI
        LOOP    A20
        POP     CX
        MOV     AX, 0A0DH
        STOSW
        LOOP    A10
        POP     DS
        MOV     AH, 40H
        POP     BX
        MOV     CX, (80+2)*25
        LEA     DX, FILEDAT
        INT     21H
        JC      E10
        MOV     AH, 3EH
        INT     21H
E10:    RET
FILEDAT DB      ?
END     MAIN


Это сообщение отредактировал(а) iff - 30.5.2010, 17:42

Присоединённый файл ( Кол-во скачиваний: 16 )
Присоединённый файл  PRTSC.COM 0,07 Kb


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Mikl_
Дата 25.3.2010, 04:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 8
Всего: 14



iff, 
это был вопрос или реклама? В свое время я делал вывод содержимого видеопамяти в графическом режиме на принтер. В принципе мало отличалось от твоей программы только вывод шел не с адреса 0B800h (текстовый режим) а с 0A000h "зеленой" компоненты экрана и учитывалось что в видеопамяти изображение хранится построчно, а на принтер выводилось повернутые на 90 градусов по ширине печатающей головки smile 
PM MAIL   Вверх
iff
Дата 25.3.2010, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Цитата

а с 0A000h "зеленой" компоненты экрана 

На счёт этого можно по-подробней?
Что0то я не пойму. Там хранятся дескрипторы шрифтов?


Цитата

это был вопрос или реклама?

Статья. FAQ. Исходник.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
oskarmt
Дата 30.5.2010, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



а если я допустим работаю в volkov commander.....
как мне вывести тогда содержимое видеопамяти?
PM MAIL   Вверх
iff
Дата 30.5.2010, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



так-же.
Просто volkov commander выгружается из видеопамяти, когда запускает программу...

Добавлено через 1 минуту и 48 секунд
Можно сделать так: при нажатии на клавишу print screen вызывается прерывание 05h. Можно поменять вектор этого прерывания так чтобы при его запуске выполнялась программа, приведенныя выше.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
oskarmt
Дата 30.5.2010, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



а помоги мне пожалуйста сделать её резидентной....если тебе не сложно)
а то я очень слабо пока с этим дружу(
PM MAIL   Вверх
oskarmt
Дата 1.6.2010, 03:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



Я вот тут вообщем поколдовал...и у меня чего-то не получается....
простите за очень грубые ляпы,но в асме сильно не шарю....
помогите пожалуйста исправить ошибки...очень нужно
Код

cseg segment
assume cs:cseg, ds:cseg, ss:cseg, es:cseg
org 100h

main: jmp init
; ====================================================
Zadacha_09h proc                    
      push ax bx cx di es    
      
      in al,60h        
      cmp al,main_key                ;Это F12?
        jne No_F12                    
      mov     bl, ds:[80h]
        cmp     BYTE PTR [bx], 0
        je      @@exit
        mov     ax, 0b800h
        mov     es, ax
        mov     BYTE PTR [bx+81h], 0

        mov     ah, 3ch
        mov     dx,offset fname
        xor     cx, cx
        int     21h
        jc      @@exit
        push    ax
        mov     CX, 25                
        lea     di, Fn
        xor     si, si
A10:    push    cx                
        mov     cx, 80
A20:    mov     al, es:[si]
        mov     [di], al
        inc     di
        inc     si
        inc     si
        loop    A20
        pop     cx
        mov     WORD PTR [di], 0A0DH
        inc     di
        inc     di
        loop    A10
        mov     ah, 40h
        pop     bx
        mov     cx, (80+2)*25
        lea     dx, Fn
        int     21h
        jc      @@exit
        mov     ah, 3eh
        int     21h
@@exit: ret
No_F12:
       pop es di cx bx ax 
       jmp dword ptr cs:[Int_09h_vect]    
                
iret        

fname db 'txt2.txt',0                
fn dw ?
main_key equ 58h
Int_09h_vect dd ?

Zadacha_09h endp
; ==========================================================================================
Init:
       mov ax,3509h
       int 21h                    
       
       mov word ptr Int_09h_vect,bx    
       mov word ptr Int_09h_vect+2,es    

       mov ax,2509h
       mov dx,offset Zadacha_09h
       int 21h                    


       mov dx,offset init
       int 27h                    
cseg ends
END     MAIN 

PM MAIL   Вверх
ФедосеевПавел
Дата 1.6.2010, 06:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 4
Всего: 10



Написание такого резидента несколько сложнее...
Нужно перехватывать и обрабатывать несколько прерываний 2Fh и другие. В нескольких десятках строк и не рассказать - придётся тебе читать книги (в том числе и статьи в Internet). Примеры лучше поищи на этом и других форумах. Несколько месяцев назад на sources.ru в разделе ассемблера был подобный пример.
Приаттачу небольшой кусок статьи из книги "Техника программирования на Turbo C".

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  T7.7z 22,21 Kb
PM   Вверх
oskarmt
Дата 1.6.2010, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



я пробовал изменить вектор 5того прерывания,но нифига не вышло, 
совсем не реагирует на кнопку принтскрин
подскажите мне,реальнай ли это вариант....
в рассылке калашникова был тот же пример,там обрабатывалось 5ое прерывание
я пробовал запустить этот пример ,но реакции на принтскрин небыло.....

вот пример из калашникова

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  resid15.asm 10,37 Kb
PM MAIL   Вверх
ФедосеевПавел
Дата 1.6.2010, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 4
Всего: 10



Кажется, там нужно нажимать Shift-PrnScr.
PM   Вверх
oskarmt
Дата 1.6.2010, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



ну как бы не на столько глуп,чтобы не просмотреть код программы

Shift-PrnScr тоже не работает
как собственно и в этом примере
http://window.edu.ru/window_catalog/pdf2tx...6&p_page=13
....та же проблема(((
PM MAIL   Вверх
iff
Дата 1.6.2010, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Итак я написал программу, которая работает: при нажатии кнопки принт скрин в текущей директории создается текстовой файл SCREEN00.TXT, который содержит весь текст, отображенный на экране в данный момент.
Код

        .MODEL  TINY
        .CODE
        ORG     100H
MAIN:
.286
        MOV     AX, 2505H
        MOV     DX, OFFSET INT05
        INT     21H
        MOV     AH, 31H
        MOV     DX, OFFSET INT05END
        INT     21H
;==============================================================================
INT05:  PUSHA
        PUSH    DS
        PUSH    ES
        MOV     AX, CS
        MOV     DS, AX
        MOV     ES, AX
        MOV     AH, 3CH
        LEA     DX, FILENAM
        XOR     CX, CX
        INT     21H
        JC      E10
        PUSH    AX
        PUSH    DS
        MOV     AX, 0B800H
        MOV     DS, AX
        MOV     CX, 25
        LEA     DI, FILEDAT
        XOR     SI, SI
A10:    PUSH    CX
        MOV     CX, 80
A20:    MOVSB
        INC     SI
        LOOP    A20
        POP     CX
        MOV     AX, 0A0DH
        STOSW
        LOOP    A10
        POP     DS
        MOV     AH, 40H
        POP     BX
        MOV     CX, (80+2)*25
        LEA     DX, FILEDAT
        INT     21H
        JC      E10
        MOV     AH, 3EH
        INT     21H
        POP     ES
        POP     DS
        POPA
E10:    IRET
FILENAM DB      'SCREEN00.TXT', 0
FILEDAT DB      (80+2)*25 DUP (?)
INT05END:
;==============================================================================
        END     MAIN

Откомпилировал в СОМ-программу, она вышла размером 100 байт.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
iff
Дата 1.6.2010, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Хочу заметить, что есди такую программу запускать из-под виндовс, то работать не будет: виндовс сам анализирует состояние клавиши принт скрин.

Если нужно убидиться что всё работает, то можно отформатировать дискету как загрузочный диск мс-дос, записать на него программу, нортон командер (скрин которого вы хотите получить), затем загрузиться с неё. запустить нортон и мою прогу. теперь нажмите принт скрин и на дискете будет файл SCREEN00.TXT, который содержит весь текст, отображенный на экране в данный момент


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
oskarmt
Дата 1.6.2010, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



а с помощью эмулятора dos box это возможно сделать?
PM MAIL   Вверх
iff
Дата 1.6.2010, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



сейчас попробую

Добавлено через 2 минуты и 58 секунд
нет

Добавлено через 9 минут и 1 секунду
Но если вызвать прерывание 5 программным способом, то файл сл скрином тоже появится:
Код

C:\>prtsctsr

C:\>debug
-a 100
0CB1:0100 int 5
0CB1:0102
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0CB1  ES=0CB1  SS=0CB1  CS=0CB1  IP=0100   NV UP EI PL NZ NA PO NC
0CB1:0100 CD05          INT     05
-p

AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0CB1  ES=0CB1  SS=0CB1  CS=0CB1  IP=0102   NV UP EI PL NZ NA PO NC
0CB1:0102 9C            PUSHF
-q

C:\>_


Добавлено через 11 минут и 20 секунд
П.С. А вот если мою программу не запустить перед сеансом debug, а потом вызвать прерывание 5, то экран распечатается на принтере - как в операционной системе ДОС при нажатии на клавишу принт скрин. Т.е. получается в виндовсе программа не может обрабатывать нажатие клавиши принт скрин


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0571 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.