Форум: "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