>Word97 gets around this by using its own.
>
>Can this be extracted and used?
If you mean as a general replacement for the standard Windows dialog, no. You might be able to access it within your application via Ole Automation through one of Word's several OLE interfaces; I'd start by looking at Word.Application as a means of accessing Word' dialog.
Rewriting the COMDLG32.DLL would be a daunting task, especailly since you don't have source, you probably couldn't rely on any of the common dialog API that's in part hosted in COMDLG32.DLL, and the fact that any screwups would break every WinAPp that relied on common dialogs. Well beyond what I'd undertake, at least.
It would be reasonable to construct your own form for use in your application to handle switching the printer and setting the correct page environment. The page environment can be controlled in a number of ways; there's a set of API calls that can be used to establish device modes and contexts (look at the Win32 API calls CreateDC() and ResetDC(), and the DEVMODE structure), and you can also adjust the default page settings in WIN.INI and force the changed settings to be active; you might need access to some API calls like WritePrivateProfileString(), but there are classes available here on UT that make working with the .INI files pretty straightforward.
If you want to look in detail at the API stuff, the documentation contained in the Help Files of MSDN or VIsual Studio are about as comprehensive a reference as is available. Another good source would be
Windows NT Win32 API Superbible by Richard Simon (ISBN1-57169-089-1); it devotes a couple of chapters to the related API calls, but it is targeted at C/C++ programmers.
hth