Показать полную графическую версию : [решено] Вывод на монитор (через АПИ, порты или ассемблер)
hackroute
10-11-2009, 12:32
подскажите ссылочку на информацию каким образом можно через порты или ассемблер или АПИ выводит сразу на монитор: мне необходимо дорисовать быстро сменяющиеся кадры к десктопу, чтобы небыла заметна перерисовка, ибо это оч сильно глаз мучает,
помниться была такая прога по изучению английского называлась что-то типо "быстрое изучение английского - 25й кадр", там конечно никакого 25го кадра небыло, и программа рисовала кадры на своей форме, мне же надо сделать примерно тоже самое только чтобы рисовала на экране(десктопе) и был фактическим 25м кадром то есть мне надо заменять каждый 25й-30й или еще какой-нить кадр на собственный, при использовании например Tcanvas.handle = getdc(0); перерисовка довольно долгая и постоянное мерцание рабочего стола довольно таки раздражительная вещь, поэтому и подумалось о возможности напрямую заменять кадр выводимый на монитор через порты асм и АПИ
как правило высокая скорость смены кадров достигается использованием наиболее удобной для отрисовки памяти, а затем просто копированием результата на экран во время перехода сканирующего луча экрана от последнего пикселя к первому. В это время изменений на экране нет, а операция копирования происходит достаточно быстро. При этом рисовать на скрытом экране можно хоть час.
А вот с 25 или 30 кадром может не получиться. Дело в том, что на обычном ЖК мониторе недостаточно скорости переключения пикселей для эффекта 25 кадра. Всё равно текст будет заметен. В быстром изучении английского используется другой эффект - бинауреальные ритмы, когда за счёт внешнего периодического воздействия на зрительный нерв определённой частоты пытаются достигнуть резонансного ответа ЭКГ мозга, соответсвующей состоянию сосредоточенности. А слово 25 - чисто маркетинговый ход.
BlackEric
10-11-2009, 22:16
Смотрите в сторону технологий применяемых в играх.
hackroute
11-11-2009, 00:52
как правило высокая скорость смены кадров достигается использованием наиболее удобной для отрисовки памяти » проблема именно в том что смещение видео-буфера в памяти я и незнаю, и вот ищу может кт ознает где он есть (если в доc было что то типо в ES, 0B800h)
я в досе не знаю, но в сейчас в directX принято понятие swap chain, последовательность видеобуферов, которые будут отображаться на экран во время сигнала вертикальной синхронизации на экране (этот флаг устанавливается при инициализации адаптера).
И ещё: вот у вас какая видюха? у меня аппаратно поддерживает много полезных функций рисования и отображения текста. Кроме того поддерживается линейная модель памяти. В общем, я склоняю в сторону DX
hackroute
12-11-2009, 16:44
мне и нужно-то что то подобное смены буферов, однако есть одна проблемка, мне ненужно постоянно открытое приложение здесь требуется лишь замена одного из кадров (буферов) выводимых на экран при работе с рабочим столом, если будет висеть окно (даже прозрачное) то я несмогу с рабочим столом ничего делать, ибо все сообщения будет принимать именно моё приложение с директХ
BlackEric
12-11-2009, 23:48
Стандартными средствами вы такое не сделаете. Это только если пытаться перехватывать вывод драйвера видеокарты...
если будет висеть окно (даже прозрачное) то я несмогу с рабочим столом ничего делать »
Если оно будет лишь прозрачным - то нет, но если сделать ещё и сквозным, то можно будет работать и с окнами расположенными за ним
Создание "сквозной" формы средствами WinAPI (http://forum.oszone.net/thread-138725.html)
hackroute
14-11-2009, 19:16
спасибо за подсказку, возможно сквозное окно поможет, сча опробую... (просто думал что есть какие то другие способы, но который раз убеждаюсь что без АПИ невозможно писать) ,а насчет перехвата потока на видео карту это интересно, возможно знаешь ссылки какие нить на подобную инфу?
hackroute, с железом на таком уровне не приходилось работать.
На счёт ссылок, то вот недавно наткнулся в MSDN на такое - Direct2D (http://msdn.microsoft.com/en-us/library/dd370990(VS.85).aspx)
Сам не пробовал.
hackroute
16-11-2009, 01:39
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, их отсылать не надо. В программе надо организовать цикл их приёма в главной функции
while(GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
»
А обрабатывать в оконной функции
LRESULT CALLBACK WindowFunc(HWND hWnd,UINT message,
WPARAM wParam,LPARAM lParam)
{
switch (message)
{
//...
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc (hWnd, message, wParam, lParam);
}
return 0;
}»
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.