|
Submitted by , posted on 11 November 2004
|
|
Image Description, by
These are screen shots of an application I have been working on for some
years in my spare time. The goal was to create a 3D desktop so I could make
a more dynamic desktop environment. Its along the same lines as Sphere XP or
Cube Server but I took a bottom up approach. So rather than have a cool
environment with static windows I have focused on having fully interactive
windows that update as fast as possible and require little extra processing
time.
Its written in C++ and uses DirectX9.0b and uses a variety of hooks (
Message hooks, API hooks and Low level input hooks ). The hooks capture all
drawing activity in a window and store the it in a shared memory area. When
the viewer updates it enumerates all the drawing activity in the shared
memory and will create/destroy a mesh and texture for each window that is
hooked. Each windows representation chopped up in 256x256 chunks to accomate
the full size of the window and be compatible with low end hardware.
There are still a few programs that elude proper capturing but most programs
work, I am shooting for 100% functionality for all apps before moving onto a
working enviroment. On my site I detail some ideas I am exploring for future
development, feel free to post some of your own. Oh ya, also feel free to
let me know what you think, but please read the site first as I have tried
to address some of the "concerns" I have come across in the past.
Major features
Very fast updating( before I got media player 9 I could capture video and
it would play back at fullspeed, it looked amazing )
Full mouse/keyboard interaction
CPU utilization limiter, wont bog your computer down.. too much
Non rectangular windows supported
Works on even the oldest hardware, assuming it will run with DirectX 9.0b
Has a ini file to specify applications to hook
Windows are placed in 3D in the same relative positions in 2D
Some of the major problems I encountered
Shared memory was very slow until I found MeteredSections, its like a Mutex
but doesnt incur a kernel swap hit.
Hidden system drawing, things like scroll bars, borders and captions are
drawn in the bowels of windows and their drawing could only be infered from
certain conditions I could watch for in user mode.
Menus were also handled in the kernel and were harder to capture, my
solution.. An entirely new menu system that cirumvents the kernel entirely.
Its hard to even tell that its not the real windows menu system ;)
Initially I had a major problem with capturing kernel drawing, fortunately I
sorted it out. Unfortunatly I spent months on a highly dubious kernel level
service decriptor table hook ( interrupt calls ) which I eventually ripped
out.
Future development:
Like I said I have a list of possible projects I'd like to attempt on my
website. I'd like to stress that I dont intend to have people looking and
working with windows at oblique angles. This is mostly to facilitate adding
cool new feature ala expose, REAL virtual desktops and some pretty ( perhaps
gimmicky ) environmental effects ( along the lines of "Peep: The Network
Auralizer" but visual.)
http://www.logiccubed.com
|
|