Segue exemplo:
cImpressora := Impressoras_SMF()
#include "common.ch"
#include "hwgui.ch"
#include "hbclass.ch"
#include "hbthread.ch"
THREAD STATIC aImpressorasSMF := {}
THREAD STATIC oThisformImp
FUNCTION Impressoras_SMF()
LOCAL cImpressora := ""
LOCAL oElemento, oDlg, nListImp:=1, oIconPrint, oLabel1, oButtonex1
oIconPrint := HIcon():AddFile("P:\GERAL\HARBOUR\IPRINTER2.ICO")
IF hb_FileExists( hb_GetEnv("TEMP") + [\] + "INIPRINTER.INI" )
cImpressora := hwg_GetIni( 'CONFIGURACAO', 'Impressora' , '', hb_GetEnv("TEMP") + [\] + "INIPRINTER.INI" )
ENDIF
aPrn := Win_PrinterList(.T., .F.)
IF Len( aImpressorasSMF ) = 0
FOR EACH oElemento IN aPrn
IF Empty( cImpressora )
IF oElemento[1] = Win_PrinterGetDefault()
nListImp := oElemento:__enumIndex()
ENDIF
ELSE
IF oElemento[1] = cImpressora
nListImp := oElemento:__enumIndex()
ENDIF
ENDIF
aAdd( aImpressorasSMF, oElemento[1] )
hwg_DoEvents()
NEXT
ELSE
FOR EACH oElemento IN aImpressorasSMF
IF oElemento = cImpressora
nListImp := oElemento:__enumIndex()
ENDIF
NEXT
ENDIF
IF ! Empty( cImpressora )
IF hb_aScan( aImpressorasSMF, cImpressora ) = 0
nListImp := hb_aScan( aImpressorasSMF, Win_PrinterGetDefault() )
ENDIF
ENDIF
INIT DIALOG oDlg TITLE "Seleção das Impressoras" ;
AT 0, 0 ;
SIZE 643,330 ;
FONT HFont():Add( 'Tahoma',0,-13,400,1252,,) ;
ICON oIconPrint ;
CLIPPER ;
NOEXIT ;
STYLE WS_POPUP + WS_CAPTION + WS_SYSMENU + DS_CENTER ;
ON INIT {|| oListImp:SetFocus()}
oThisformImp := oDlg
* SET KEY 0,VK_ESCAPE TO hwg_EndDialog()
@ 014,017 SAY oLabel1 CAPTION "Impressoras Instaladas (Informe a impressora para imprimir)" SIZE oDlg:nWidth,18
@ 012,042 GET LISTBOX oListImp ;
VAR nListImp ;
ITEMS aImpressorasSMF ;
SIZE 618,228 ;
ON DBLCLICK {|| SelecionaImpSMF( @cImpressora ) }
@ 014,280 BUTTONEX oButtonex1 ;
CAPTION "Imprimir" ;
SIZE 110,40 ;
ICON oIconPrint:handle ;
STYLE BS_CENTER + WS_TABSTOP ;
ON CLICK {|| SelecionaImpSMF( @cImpressora )}
@ 137,287 SAY oLabel2 CAPTION "Impressora padrão:" SIZE 116,18
@ 258,287 SAY oLabel3 CAPTION Win_PrinterGetDefault() ;
SIZE oDlg:nWidth,18
ACTIVATE DIALOG oDlg
oIconPrint:Release()
IF Empty( cImpressora )
cImpressora := Win_PrinterGetDefault()
ENDIF
IF ! Hb_FileExists( hb_GetEnv("TEMP") + [\] + "INIPRINTER.INI" )
hwg_WriteIni( 'MAIN' , 'Descricao' , 'IniPrint', hb_GetEnv("TEMP") + [\] + "INIPRINTER.INI" )
hwg_WriteIni( 'MAIN' , 'Versao' , "1.0", hb_GetEnv("TEMP") + [\] + "INIPRINTER.INI" )
hwg_WriteIni( 'CONFIGURACAO', 'Impressora' , cImpressora, hb_GetEnv("TEMP") + [\] + "INIPRINTER.INI" )
ELSE
hwg_WriteIni( 'CONFIGURACAO', 'Impressora' , cImpressora, hb_GetEnv("TEMP") + [\] + "INIPRINTER.INI" )
ENDIF
RETURN cImpressora
FUNCTION SelecionaImpSMF( cImpressora )
LOCAL nPos
nPos := oThisformImp:oListImp:Value
cImpressora := oThisformImp:oListImp:aItems[nPos]
oThisformImp:Close()
RETURN cImpressora