Microsoft KB Archive/186392

{|
 * width="100%"|

-

The information in this article applies to:


 * Microsoft FoxPro for Windows, versions 2.5, 2.5a, 2.5b, 2.6, 2.6a

-

SUMMARY
Microsoft Knowledge Base article

"Q103645 'How to Change the Default Windows Printer from FoxPro,'" describes how to programmatically change the default windows printer. However, the article correctly states that the procedures will not work for FoxPro 2.6a in Windows 95. This article demonstrates a method to use the sample code in article Q103645.

MORE INFORMATION
Save the sample code in Q103645 to a program file named Pchg.prg. You use the Pchg.prg file as a procedure file in the code example that follows. The following sample code demonstrates how to change the default printer and print test print jobs after each printer change:

Sample Code
  * #DEFINES used to match WinSDK message definitions #DEFINE HWND_BROADCAST 65535 #DEFINE WM_WININICHANGE 26

SET LIBRARY TO HOME+"FoxTools.fll" ADDITIVE

*-- Init the PostMessage function so we can force Fox to  *-- reread the WIN.INI PostMsg = regfn('POSTMESSAGE', "IICC", "I")

SET PROCEDURE TO pchg

DIMENSION laPrinters(1,1) && Array that holds the printer information. liNumber = 0              && The number of printers available. lcCurrentPrint = ""       && The current default printer.

*-- Fill the variables with the printer info DO GETPRINT WITH laPrinters, liNumber, lcCurrentPrint

*-- First, print to one printer... liNewPrinter = 1 && Select the first printer in the list DO putprint WITH laPrinters, liNumber, liNewPrinter

*-- Now make the PostMessage call to ensure that the *-- [Windows] section of WIN.INI is re-read by all running apps. =callfn(PostMsg, HWND_BROADCAST, WM_WININICHANGE, 0, "Windows")

*-- CLEAR PROGRAM has to be here or it won't work. CLEAR PROGRAM

*-- Print something to test DISPLAY STATUS TO PRINTER

*-- Now print to a different printer... liNewPrinter = 2 && Select the second printer in the list DO putprint WITH laPrinters, liNumber, liNewPrinter

*-- Now make the PostMessage call to ensure that the *-- [Windows] section of WIN.INI is re-read by all running apps. =callfn(PostMsg, HWND_BROADCAST, WM_WININICHANGE, 0, "Windows")

SET TALK OFF

*-- Do this again so it works. CLEAR PROGRAM

*-- Print something to test DISPLAY STATUS TO PRINTER