Normally, I would put a power resistor in front of the regulator, to remove power from it. Set the value so that at max current it drops most of the overhead voltage, only leaving how ever much (1.5V for 78xx) the regulator needs. Normally. But, like AG said, it will get hot and waste a lot of power as heat (better for the resistor to do it than the regulator to go into thermal shutdown). Normally... however, you can't even start to do calculations with a input voltage range that extreme. Is it like a transformer and has 45V when low to no current draw and 20V at max current??? That you could figure on, but 20-45V input randomly?
The only way out that I see is to use a switching regulator that will take a 20-45V input and give you the 12V output you're looking for.
Also, you wouldn't use a 10V zener, you'd use a 30V zener, to keep the max below the max of the regulator, and if the input voltage falls below the zener voltage, then it'll just follow it down and not be used.
Anything you put in front to drop voltage will make it less efficient. This is the exact kind of situation they invented switching power supplies for.