Форум программистов, компьютерный форум CyberForum.ru

Прямой доступ к видеопамяти - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
18.07.2013, 17:10     Прямой доступ к видеопамяти #1
Требуется написать программу, которая будет напрямую обращаться в видеопамяти. Описание:

Реализовать функцию, принимающую три параметра - цвет фона, цвет тона и код символа и производящую заполнение этим символом всего экрана. Реализовать функцию очистки экрана с использованием созданной функции.

Для заполнения видеопамяти воспользуйтесь указателем на беззнаковый символ.
Для присвоения ему значения 0хВ8000000 необходимо осуществить явное преобразование типов. Непосредственное значение 0хВ8000000 имеет тип int. Следует сначала привести тип этого значения к void* а затем - к unsigned char* для того, чтобы присовение стало возможным.
Для обращения к различным байтам видеопамяти воспользуйтесь этим указателем.
Видеопамять организована следующим образом: байт по адресу 0хВ8000000 содержит код символа в левом верхнем углу экрана. Следующий за ним байт содержит цвет фона и цвет тона этого символа. В старшей половине этого байта содержится цвет фона, в младшей - цвет тона.

Коды некоторых цветов: 0х0 - черный, 0х7 - серый, 0хf - белый

При выполенини работы производите периодическое сохранение программы, так как некорректная работа с памятью может привести к ошибке ЭВМ и потере данных в оперативной памяти.

КОД, КОТОРЫЙ НЕ РАБОТАЕТ:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(void)
{
    
    char *p =  (char *)((void *)0xB8000000);
        
    for(int i = 1; i <= 20; i++){
        *p = '8';
        p++;
        *p = 0;
        p++;
    }
    
 
    return 0;
}
Добавлено через 1 минуту
Доступно ли прямое обращение к памяти в Windows 7 в режиме user mode?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2013, 17:10     Прямой доступ к видеопамяти
Посмотрите здесь:

C++ вопрос по си-подключение видеопамяти
Движение прямой C++
C++ Перпендикуляр к прямой
Прямой доступ к переменным C++
Рисование прямой C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
18.07.2013, 17:12     Прямой доступ к видеопамяти #2
Что значит "не работает"?

Добавлено через 1 минуту
Цитата Сообщение от bgm123 Посмотреть сообщение
Доступно ли прямое обращение к памяти в Windows 7 в режиме user mode?
Не доступно. Используй эмулятор MSDOS - либо DosBox, либо к.-л. другую виртуальную машину.....
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
18.07.2013, 17:14  [ТС]     Прямой доступ к видеопамяти #3
Цитата Сообщение от CheshireCat Посмотреть сообщение
Не доступно. Используй эмулятор MSDOS - либо DosBox, либо к.-л. другую виртуальную машину.
А можно как то переключиться в динамическом режиме в kernel mode?

Добавлено через 1 минуту
Т.е. я правильно понял, что для того, чтобы сделать скриншот, нужен либо драйвер, либо системные вызовы?
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
18.07.2013, 17:16     Прямой доступ к видеопамяти #4
Цитата Сообщение от bgm123 Посмотреть сообщение
Доступно ли прямое обращение к памяти в Windows 7 в режиме user mode?
ты это лет так на 30 опоздал
во времена Доса такое было возможно
а теперь где она эта видеопамять ?
в видеокартах по гектару и больше может стоять
Цитата Сообщение от bgm123 Посмотреть сообщение
char *p = *(char *)((void *)0xB8000000);
этим ты старательно лезешь в систему, ну и получаешь по рукам
и откуда ты взял этот адрес?
такой помню 0xA800:0x8000 и такой 0xB000:0000
а 32битных не припомню
так что только через DirectX, и то это будет не реальная память а проекция её на твое адресное пространство

Добавлено через 48 секунд
Цитата Сообщение от bgm123 Посмотреть сообщение
Т.е. я правильно понял, что для того, чтобы сделать скриншот, нужен либо драйвер, либо системные вызовы?
BitBlt еще никто не отменял
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
18.07.2013, 17:20  [ТС]     Прямой доступ к видеопамяти #5
Где в современных ОС хранится изображение? В озу?
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
18.07.2013, 17:22     Прямой доступ к видеопамяти #6
Цитата Сообщение от bgm123 Посмотреть сообщение
Где в современных ОС хранится изображение?
что есть изображение?
Цитата Сообщение от bgm123 Посмотреть сообщение
В озу?
и в ОЗУ и в видеопамяти и на диске если место мало
конкретно изображение чего
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
18.07.2013, 17:25     Прямой доступ к видеопамяти #7
Цитата Сообщение от ValeryS Посмотреть сообщение
и откуда ты взял этот адрес?
такой помню 0xA800:0x8000 и такой 0xB000:0000
а 32битных не припомню
Во времена MSDOS, мир праху ее, именно так и нужно было адресовать 0xB000:0x0000. Компилятор (тот же Турбо Си) аккуратно преобразовывал 0xB0000000 в пару сегмент:смещение.
Но теперь да, подобные штуки остались только в истории - лет 30 назад.....
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
18.07.2013, 17:28  [ТС]     Прямой доступ к видеопамяти #8
Цитата Сообщение от ValeryS Посмотреть сообщение
конкретно изображение чего
картинки на мониторе
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,043
18.07.2013, 17:32     Прямой доступ к видеопамяти #9

Не по теме:

Цитата Сообщение от CheshireCat Посмотреть сообщение
Компилятор (тот же Турбо Си) аккуратно преобразовывал 0xB0000000 в пару сегмент:смещение.
Может быть
давно было не помню, да и писал в основном тогда на ассемблере
но я писал всегда так сегмент:смешение



Добавлено через 2 минуты
Цитата Сообщение от bgm123 Посмотреть сообщение
картинки на мониторе
ядро собирает картинки со всех программ компонует их и хранит внутри себя выдавая на видеокарту по мере необходимости, а может сразу компоновать в видеопамяти зависит от железа и драйверов
ты конкретно что хочешь сделать?
рисовать на десктопе? экран сохранить?
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
18.07.2013, 17:40  [ТС]     Прямой доступ к видеопамяти #10
То есть, если я правильно понял, надо глядеть в сторону kernel mode?
dr.curse
 Аватар для dr.curse
386 / 342 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
18.07.2013, 17:43     Прямой доступ к видеопамяти #11
Цитата Сообщение от bgm123 Посмотреть сообщение
То есть, если я правильно понял, надо глядеть в сторону kernel mode?
лучше ненадо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2013, 17:54     Прямой доступ к видеопамяти
Еще ссылки по теме:

Расстояние от точки до прямой C++
C++ Лежит ли точка А на прямой y=a+4?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Убежденный
Системный программист
 Аватар для Убежденный
14180 / 6195 / 984
Регистрация: 02.05.2013
Сообщений: 10,311
Завершенные тесты: 1
18.07.2013, 17:54     Прямой доступ к видеопамяти #12
Цитата Сообщение от bgm123 Посмотреть сообщение
То есть, если я правильно понял, надо глядеть в сторону kernel mode?
Раньше в ядре Windows были некоторые документированные возможности работать с
содержимым дисплея. Потом из-за DRM их стали целенаправлено вырезать (чтобы
нельзя было грабить защищенный медиа-контент), а в Windows 8 вообще убрали.
Yandex
Объявления
18.07.2013, 17:54     Прямой доступ к видеопамяти
Ответ Создать тему
Опции темы

Текущее время: 15:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru