![]() |
Вывод на монитор (через АПИ, порты или ассемблер)
подскажите ссылочку на информацию каким образом можно через порты или ассемблер или АПИ выводит сразу на монитор: мне необходимо дорисовать быстро сменяющиеся кадры к десктопу, чтобы небыла заметна перерисовка, ибо это оч сильно глаз мучает,
помниться была такая прога по изучению английского называлась что-то типо "быстрое изучение английского - 25й кадр", там конечно никакого 25го кадра небыло, и программа рисовала кадры на своей форме, мне же надо сделать примерно тоже самое только чтобы рисовала на экране(десктопе) и был фактическим 25м кадром то есть мне надо заменять каждый 25й-30й или еще какой-нить кадр на собственный, при использовании например Tcanvas.handle = getdc(0); перерисовка довольно долгая и постоянное мерцание рабочего стола довольно таки раздражительная вещь, поэтому и подумалось о возможности напрямую заменять кадр выводимый на монитор через порты асм и АПИ |
как правило высокая скорость смены кадров достигается использованием наиболее удобной для отрисовки памяти, а затем просто копированием результата на экран во время перехода сканирующего луча экрана от последнего пикселя к первому. В это время изменений на экране нет, а операция копирования происходит достаточно быстро. При этом рисовать на скрытом экране можно хоть час.
А вот с 25 или 30 кадром может не получиться. Дело в том, что на обычном ЖК мониторе недостаточно скорости переключения пикселей для эффекта 25 кадра. Всё равно текст будет заметен. В быстром изучении английского используется другой эффект - бинауреальные ритмы, когда за счёт внешнего периодического воздействия на зрительный нерв определённой частоты пытаются достигнуть резонансного ответа ЭКГ мозга, соответсвующей состоянию сосредоточенности. А слово 25 - чисто маркетинговый ход. |
Смотрите в сторону технологий применяемых в играх.
|
Цитата:
|
я в досе не знаю, но в сейчас в directX принято понятие swap chain, последовательность видеобуферов, которые будут отображаться на экран во время сигнала вертикальной синхронизации на экране (этот флаг устанавливается при инициализации адаптера).
И ещё: вот у вас какая видюха? у меня аппаратно поддерживает много полезных функций рисования и отображения текста. Кроме того поддерживается линейная модель памяти. В общем, я склоняю в сторону DX |
мне и нужно-то что то подобное смены буферов, однако есть одна проблемка, мне ненужно постоянно открытое приложение здесь требуется лишь замена одного из кадров (буферов) выводимых на экран при работе с рабочим столом, если будет висеть окно (даже прозрачное) то я несмогу с рабочим столом ничего делать, ибо все сообщения будет принимать именно моё приложение с директХ
|
Стандартными средствами вы такое не сделаете. Это только если пытаться перехватывать вывод драйвера видеокарты...
|
Цитата:
Создание "сквозной" формы средствами WinAPI |
спасибо за подсказку, возможно сквозное окно поможет, сча опробую... (просто думал что есть какие то другие способы, но который раз убеждаюсь что без АПИ невозможно писать) ,а насчет перехвата потока на видео карту это интересно, возможно знаешь ссылки какие нить на подобную инфу?
|
hackroute, с железом на таком уровне не приходилось работать.
На счёт ссылок, то вот недавно наткнулся в MSDN на такое - Direct2D Сам не пробовал. |
Цитата:
сквозное окно неполучается , есть проблема с пересылкой сообщений, SendMessage PostMessage DefwindowProc CallWindowProc не пересылают сообщения либо я неправильно их остылаю подскажите как тут быть, делаю так: postmessage(wnd,msg,wp,lp); / Sendmessage(wnd,msg,wp,lp); / defwindowproc(wnd,msg,wp,lp); / callwindowproc(pointer(getwindowlong(wnd,GWL_WNDPROC)),wnd,msg,wp,lp); может быть надо писать сразу в пул сообщений или еще что... |
hackroute, их отсылать не надо. В программе надо организовать цикл их приёма в главной функции
А обрабатывать в оконной функции Код:
LRESULT CALLBACK WindowFunc(HWND hWnd,UINT message, |
Время: 07:10. |
Время: 07:10.
© OSzone.net 2001-