Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.035 c
11-1065001425
Babylon5
2003-10-01 13:43
2004.04.25
Динамическое меню


7-1077650405
Pavel74
2004-02-24 22:20
2004.04.25
если ето doc то открыть его в worde а если ето pdf то в аcrob ...


6-1077882018
sucer
2004-02-27 14:40
2004.04.25
Как проверить подключен ли сейчас к сети комп c ip 192.168.x.y?


14-1081153109
Lamerr
2004-04-05 12:18
2004.04.25
Dos задача под XP


7-1077204897
L.evil
2004-02-19 18:34
2004.04.25
Запись CD-Data





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский