Many cad programs (AutoCAD, Solidworks, Pro/E,etc) allow for zooming in and out of a project with the standard mouse scroll wheel.

This is so handy for some that instead of panning in a file (moving left/right/up/down), many users scroll out of one area and into another area. I am one such user.

Unfortunately,
Americans and Europeans seem to differ as to which direction should move the drawing in which way.
For instance, in both the default Autocad setup as well as google maps/earth, scrolling the top of the wheel away from your wrist sends the user "into the document", making it bigger, or zooming in.
In Solidworks, however, the default (and it was only recently (2006) that a reverse button was introduced) behavior for the same motion is to "push the document away", or zoom out.

Both methods "make sense", but it is (for me, at least) extremely difficult to switch back and forth between the two.

AutoCAD was the first to allow swapping the direction, but was also the first program i learned with, so I was forced to realign all the neurons in my brain to the solidworks directions. To this day, i still occasionally screw up and go the wrong way, and i frequently have to "think" about it more than i used to.

Since not all software (google maps/earth) allow for swapping the wheel direction, I propose a set of mouse drivers which will, based on what is under the pointer along with other various programmable context, swap or not swap the direction of the wheel.

It can't be done strictly by application, because while you may want solidworks to reverse zooming, you don't want solidwork's file open/save dialog to scroll backwards.

The driver would have a list of the open windows on your computer, and you could differentiate between different parts of any program which would have the wheel reversed or not.

This may be tricky, as some programs have non common parts to them that such software might not be able to recognize (like solidwork's feature manager, which gets a scroll bar if it grows long enough). In this case, the program should allow for the user to determine the functionality by percentage of screen space/location.

for instance: the leftmost 10% of a solidworks screen, assuming no file dialogs are open, will scroll properly, while the right 90% will scroll invertedly.

Similarly applying to web browsers (in the case of google maps):

if firefox is open and the website starts with http://maps.google.com and the mouse is over a flash or java box (or whatever they're doing the map thing in these days), invert the scroll, otherwise, leave it normal.