Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

Как это реализовано??   Найти похожие ветки 

 
Opilki_Inside ©   (2004-02-22 21:24) [0]

Есть такая программа, называется Dremples Desktop.
Программа формирует всевозможные интересные образы на рабочем столе работая как бы в фоновом режиме... Т.е. все иконки и окна, которые находятся на рабочем столе она не трогает, а рисует как бы на обоях раб. стола... Как это реализовано???

если что вот ссылка на программу...
http://www.geisswerks.com/drempels/index.html

если можно, ответ на e-mail


 
Игорь Шевченко ©   (2004-02-22 22:55) [1]

Так же, как и сами обои - через обработку WM_ERASEBKGND ListView рабочего стола. Для этого нужно внедряться в процесс Explorer"а.


 
Opilki_Inside ©   (2004-02-22 23:46) [2]

>Так же, как и сами обои - через обработку WM_ERASEBKGND ListView рабочего стола.

Разве?
Я могу сказать, что при запуске эта программа меняет обои рабочего стола, и красит их в цвет rgb(15,0,15)
И если в любом другом окне будет присутствовать такой цвет, то анимация будет происходит и на этом фрагменте, хотя он принадлежит совсем другому окну.
Можно попробывать прям в mspaint установить такой цвет и тут же появится анимация.


 
Opilki_Inside ©   (2004-02-23 00:03) [3]

>Так же, как и сами обои - через обработку WM_ERASEBKGND ListView рабочего стола.

А вобще Вы правы! Ведь все равно все окна "принадлежат" десктопу. Тогда такой вопрос, как обратать это самое WM_ERASEBKGND?
Или хотя бы с чего начать, где бы почитать на эту тему?


 
Cobalt ©   (2004-02-23 00:20) [4]

Попробуйте открыть справку (Win32.hlp или MSDN) и почитать описание этого сообщения,
затем рекомендую почитать раздел "Painting and Drawing".
Ещё на "Королевстве" есть статья о рисовании.


 
Opilki_Inside ©   (2004-02-23 14:06) [5]

С сообщением WM_ERASEBKGND, если его ловить в своем приложении я розабрался... Но как "внедряться в процесс Explorer"а" и там его обрабатывать?


 
DVM ©   (2004-02-24 23:19) [6]


> Но как "внедряться в процесс Explorer"а" и там его обрабатывать?


> Так же, как и сами обои - через обработку WM_ERASEBKGND
> ListView рабочего стола. Для этого нужно внедряться в процесс
> Explorer"а.

Нет эксплорер тут ни при чем ребяты. Если его убить на десктопе все продолжается как ни в чем ни бывало. Самое поразительное, что когда я запускаю свою оболочку вместо или поверх эксплорера, то фон у меня в оболочке тоже "переливается".
Но самое интересное, что моему окну (десктопу) не приходят сообщения о перерисовке фона, но сам фон меняется.

Работа похоже ведется с тем окном, на котором нанесены обои, т.е. Desktop-ом. Но почему сообщения не приходят. Как изображение то меняется?


 
DVM ©   (2004-02-24 23:27) [7]

Я кажется понял как это работает. Рисование производится поверх всего с условием: если пиксел на экране имеет тот определенный цвет, то в этом пикселе рисование производится - иначе нет. Вот только как им удалось добиться столь высокого быстродействия при столь малой загрузке процессора?


 
Игорь Шевченко ©   (2004-02-25 11:01) [8]

DVM ©   (24.02.04 23:19)


> Нет эксплорер тут ни при чем ребяты


Причем. Матчасть нужно учить.


 
DVM ©   (2004-02-25 12:04) [9]


> Игорь Шевченко ©   (25.02.04 11:01) [8]
> Причем. Матчасть нужно учить.

Не при чем! Учите сами матчасть если хотите, а лучше посмотрите как она работает, та программа, о которой автор писал. К эксплореру она не имеет никакого отношения потому как не использует НИ ОДНО ИЗ ЕГО ОКОН для своего рисования.
Без эксплорера она работает так же как из ним.


 
Игорь Шевченко ©   (2004-02-25 12:17) [10]

DVM ©   (25.02.04 12:04)

А что говорит SPY++ ?


> К эксплореру она не имеет никакого отношения потому как
> не использует НИ ОДНО ИЗ ЕГО ОКОН для своего рисования


А, я конечно извиняюсь, окна Progman и ShellDLL_DefView и SysListView32, на котором собственно говоря, иконки рисуются, они чьи ?

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


 
DVM ©   (2004-02-25 12:31) [11]


> А, я конечно извиняюсь, окна Progman и ShellDLL_DefView
> и SysListView32, на котором собственно говоря, иконки рисуются,
> они чьи ?

Да она не использует их для рисования говорю же! И Spy++ говорит, что не приходят им сообщения рисования.
Она меняет фон десктопа на какой-то грязный, редко используемый цвет, затем ориентируясь по этому цвету и рисует. Все что на экране имеет этот цвет она и изменяет. Если взять какое либо окно и залить его этим цветом, то анимация начнется и в нем. Причем неважно, что это за окно - десктоп, окна эксплорера или кусок рисунка в Paint-е. Похоже эта программа пробегает по всем пикселям экрана и те которые имеют тот цвет она изменяет. Рисует похоже поверх всего. Просто в наглую поверх. Но очень быстро. Скорость заливки в несколько раз (на глаз раз в 20) превышает скорость BitBlt (о паре GetPixel/SetPixel я и не говорю даже). Похоже DirectX используется.
Потому я и заинтересовался, из-за скорости рисования.


 
Игорь Шевченко ©   (2004-02-25 12:40) [12]


> Похоже DirectX используется.


REQUIREMENTS
------------------------------------------
   -DirectX 5.0 or greater
   -Your CPU (processor) must support the MMX instruction set.

One additional thing you might have to do is to
TURN ACTIVE DESKTOP OFF (if it"s on); Active Desktop
will prevent Drempels from drawing to your background

Приношу извинения за резкость, разумеется.


 
Opilki_Inside ©   (2004-02-25 22:42) [13]

>Похоже DirectX используется.

Угу. Это называется оверлеем. Когда поверх всех окон рисуется что-то, при этом не создавая "помех" другим окнам и создается эффект, что рисование происодит на фоне.
Только каким образом происходит рисование именно на этом "определенном" цвете? С помощью стандартных API делается что-то наподобие скриншота и потом анализируется... или это уже на уровне Direct X?


 
DVM ©   (2004-02-25 23:17) [14]


> С помощью стандартных API делается что-то наподобие скриншота

нет, на API можно было бы двумя циклами пробежаться по пикселам, брать их цвет GetPixel, анализировать и рисовать другой SetPixel. Только медленно это. Мерцать будет и загрузка проца будет на уровне 100%.
В DirectX должны быть аналоги этого, скорость работы которых в десятки раз выше. Для рисования используется контекст полученный GetDC(0) очевидно.


 
Opilki_Inside ©   (2004-02-26 00:01) [15]

> на API можно было бы двумя циклами пробежаться по пикселам, брать их цвет GetPixel, анализировать и рисовать другой SetPixel.  Только медленно это

если быстро получать снимок экрана как TBitmap, то там есть
scanline... скорость работы с таким битмэпом становится сравнима со скоростью работы с двумерным массивом...


 
GrayFace ©   (2004-02-26 13:05) [16]

Opilki_Inside
Круто! Спасибо за ScanLine.



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.027 c
1-1081315977
[BAD]Angel
2004-04-07 09:32
2004.04.25
Справка


1-1081543614
Lelik_R
2004-04-10 00:46
2004.04.25
Опять макросы


6-1077166867
@ac
2004-02-19 08:01
2004.04.25
Как побайтово скачать файл c помощью NMHTTP? Можно скачать часть


1-1081358420
Volodya_
2004-04-07 21:20
2004.04.25
label


14-1080793291
Gero
2004-04-01 08:21
2004.04.25
Основателю Microsoft очень стыдно за Windows