I always go to the coin-op car wash to do mine. I get 2-3 cans of Gunk "Engine Brite" degreaser. It's the best stuff I have found. I spray the Gunk on first, then close the hood, and wet the truck down while the Gunk is soaking in. Then I set the dial to the engine (or wheel) cleaner setting.
I don't blast the engine at first, I just spray it without pulling the trigger. This puts a small amount of pressure on the really dirty areas.
When it's all clean, I turn the dial to soap, and blast it down good, then soap the entire truck too. After that I rinse everything down good, and head for the house.
Normally when I get home, I wash the exterior again, and hand dry it. This may seem like over kill, but I don't want to leave any trace of the engine cleaner on my paint....