Newsgroup: it.comp.appl.notes-domino
Titolo: Stampe in Lotuscript con API Windows

Ciao a tutti.
Ogni tanto ci riprovo a trovare il sistema di stampare in backend...
Il seguente codice:
'INIZIO CODICE VB
 Dim lhPrinter As Long
 Dim lReturn As Long
 Dim lpcWritten As Long
 Dim lDoc As Long
 Dim sWrittenData As String
 Dim MyDocInfo As DOCINFO
 lReturn = OpenPrinter(Printer.DeviceName, lhPrinter, 0)
 If lReturn = 0 Then
    MsgBox "The Printer Name you typed wasn't recognized."
    Exit Sub
 End If
 MyDocInfo.pDocName = "AAAAAA"
 MyDocInfo.pOutputFile = vbNullString
 MyDocInfo.pDatatype = vbNullString
 lDoc = StartDocPrinter(lhPrinter, 1, MyDocInfo)
 Call StartPagePrinter(lhPrinter)
 sWrittenData = "How's that for Magic !!!!" & vbFormFeed
 lReturn = WritePrinter(lhPrinter, ByVal sWrittenData, _
     Len(sWrittenData), lpcWritten)
 lReturn = EndPagePrinter(lhPrinter)
 lReturn = EndDocPrinter(lhPrinter)
 lReturn = ClosePrinter(lhPrinter)
'FINE CODICE
.. in Visual Basic funziona benissimo (ho tralasciato per brevità le
Declarations delle API). 
Traducendolo in LotusScript (e quindi non riferendosi all'oggetto Printer
ed alle costanti VB) l'API OpenPrinter funziona, l'handle alla stampante è
inizializzato, ma la StartDocPrinter restituisce invariabilmante 0....
PERCHE'????????????
Seconda Strada:
'CODICE LOTUSCRIPT anche qui tralascio le dichiarazioni
Dim pd As PRINTDLG_TYPE 
Dim printmode As DEVMODE 
Dim printnames As DEVNAMES 
Dim pMode As Long, pNames As Long 
Dim retval As Long  
Dim NomeStampante As String
Dim NomeDriver As String
Dim NomePort As String
NomeStampante = "OKIPAGE 14ex"
NomeDriver = "OP14IGDM"
NomePort = "\\Test2000\OKIPAGE1"
printmode.dmDeviceName = NomeStampante  
printmode.dmSize = Len(printmode)  
printmode.dmFields = DM_ORIENTATION 
printmode.dmOrientation = DMORIENT_PORTRAIT  	
printnames.wDriverOffset = 8  
printnames.wDeviceOffset = printnames.wDriverOffset + 1 + Len(NomeDriver) 
printnames.wOutputOffset = printnames.wDeviceOffset + 1 + Len(NomePort)
printnames.wDefault = 0  
printnames.extra = NomeDriver & Chr$(0) & NomeStampante & Chr$(0) &
NomePort & Chr$(0)
pd.lStructSize = Len(pd)  ' size of structure
pd.hwndOwner = GetForegroundWindow  
pd.flags = PD_ALLPAGES Or PD_DISABLEPRINTTOFILE Or PD_RETURNDC
pd.nMinPage = 1  
pd.nMaxPage = 15  
pd.hDevMode = GlobalAlloc(&H2 Or &H40, Len(printmode) ) 
pMode = GlobalLock(pd.hDevMode)  	
CopyMemory Byval pMode, printmode, Len(printmode)  
retval = GlobalUnlock(pd.hDevMode)  
pd.hDevNames = GlobalAlloc(&H2 Or &H40, Len(printnames) ) 
pNames = GlobalLock(pd.hDevNames) 
CopyMemory Byval pNames, printnames, Len(printnames)  
retval = GlobalUnlock(pd.hDevNames) 
retval = PrintDlg(pd)  
If retval <> 0 Then
	pMode = GlobalLock(pd.hDevMode)
	CopyMemory printmode, Byval pMode, Len(printmode)
	retval = GlobalUnlock(pd.hDevMode)
	pNames = GlobalLock(pd.hDevNames)
	CopyMemory printnames, Byval pNames, Len(printnames)
	retval = GlobalUnlock(pd.hDevNames)
	Msgbox "Printer Name: " & printmode.dmDeviceName
	Msgbox "Number of Copies: " & pd.nCopies
end if
'FINE CODICE LOTUSCRIPT
Anche qui tutto benone, la DialogBox della stampante si apre, l'handle
alla stampante è corretto, ma quando con la CopyMemory provo a copiare
nella struttura PRINTMODE i bytes corrispondenti puntati da pMode, la
struttura contiene dati incoerenti.....
Ma esiste qualche impedimento che io non conosco nell'uso delle API di
Windoz??????
Ogni aiuto o suggerimento è ben accetto.
Baci a tutti   :-)
Ciccio
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Baci a tutti   :-)
Pervertito!
--
Juda of 3AM - juda(strudel)
despammed.com
/---------------/
Nella mia condizione di base sono piuttosto acido, ma difficilmente
rimango di sale.