Here's the sample code for get/set information in DEVMODE structure
*------------------ CODE TO GET THE DEVMODE
FUNCTION TEST(zcDEVMODE 'BY REFERENCE' )
DECLARE INTEGER OpenPrinter IN winspool.drv;
STRING pPrinterName, INTEGER @phPrinter, INTEGER pDefault
DECLARE SHORT PrinterProperties IN WINSPOOL.DRV;
INTEGER HWND,INTEGER hPrinter
DECLARE INTEGER GetActiveWindow IN user32
DECLARE INTEGER ClosePrinter IN winspool.drv INTEGER hPrinter
DECLARE INTEGER DocumentProperties IN winspool.drv;
INTEGER HWND, INTEGER hPrinter, STRING pDeviceName,;
STRING @pDevModeOutput, STRING pDevModeInput, INTEGER fMode
*-- zcPRINTER = The printer name as returned by GETPRINTER() or driver name
*-- Get handle of current application
znHLDW = GetActiveWindow()
znOPEN = OpenPrinter(zcPRINTER, @znHLD, 0)
IF znOPEN>=1
*-- CREATES THE BUFFER SIZE to be passed to the second call to DocumentProperties
zcNEW = REPLICATE(CHR(0),DocumentProperties(znHLDW , znHLD, zcPRINTER, 0,0,0))
IF EMPTY(zcDEVMODE)
zcDEVMODE=zcNEW
ENDIF
*-- This call to documentProperties fills the var zcNEW with printer information
znRESULT = DocumentProperties(znHLDW , znHLD, zcPRINTER, @zcNEW, zcDEVMODE,
DM_IN_BUFFER+DM_OUT_BUFFER+IIF(zlNODIALOG,0,DM_IN_PROMPT))
IF znRESULT = 1
zcDEVMODE=zcNEW
ENDIF
ClosePrinter(znHLD)
ENDIF
RETURN .T.
*------------- ADJUST THE DEVMODE STRUCTURE IN THE FRX FILE
REPLACE EXPR WITH ""
REPLACE TAG WITH ?????
???? REPRESENTE TO PRINTERPROPERTIES, FOR FAST
???? THIS PART CAME FROM THE PRINTERPROPERTIES API
???? I USE A VFP CLASS FROM
WWW.FOXPRINTER.COM TO GENERATE IT, STILL THERE ???
THE TAG/TAG2 FIELD REPRESENTE DEVMODE STRUCTURE,
SEE DOCUMENTPROPERTIES AND PRINTERPROPERTIES API
ADJUST THE INFORMATION IN THE DEVMODE STRUCTURE
LIKE SAID IN OTHER MESSAGE (SEE DEVMODE STRUCTURE)
PaperLenght=DEV2INT(SUBSTR(zcDEVMODE, 49,2))
PaperWidth=DEV2INT(SUBSTR(zcDEVMODE, 51,2))
zcDEVMODE=LEFT(zcDEVMODE,48)+INT2DEV(nNEW_LENGHT)+SUBSTR(zcDEVMODE,51)
zcDEVMODE=LEFT(zcDEVMODE,51)+INT2DEV(nNEW_LENGHT)+SUBSTR(zcDEVMODE,53)
STORE THIS NEW INFORMATION IN THE TAG2
REPLACE TAG2 WITH zcDEVMODE
REPLACE EXPR WITH ""
FUNCTION INT2DEV(znNEW)
.... CODE TO CONFERT A INT TO BINARY, I DIDN'T
.... CODE THIS PART, BECAUSE A USE THE PROMPT
.... PROPERTIES OF DOCUMENTPROPERTIES API
.... AND SAVE THOSE INFORMATIONS IN A FIELD
.... SO I CAN USE IT LATER...
.... I ONLY MAKE THE FUNCTION TO GET THE REAL
.... PAPER WIDTH/LENGTH
FUNCTION DEV2INT(zcINFO)
RETURN Asc(SUBSTR(zcINFO, 1,1)) + ;
(Asc(SUBSTR(zcINFO, 2,1)) * 256)
NOTE: SOME STRANGE THING APPEND WHEN USING THE PROMPT PROPERTIES,
THE PAPER LENGTH/WIDHT MIGHT NOT BE SET
YOU MIGHT HAVE TO CALL IT TWICE..
CHECK IN "UT", I THINK THAT GOT MORE STUFF...
Good Luck