Newsgroup: it.comp.lang.delphi
Titolo: Individuare tipo device di stampa

Un saluto a tutti.
Stampando da un'applicazione Delphi (D5 nel caso del troglodita 
scrivente) avrei necessità di poter individuare su che tipo di 
periferica si sta inviando il documento per distinguere se si tratta di 
una vera stampante o un'altro tipo di dispositivo come l'output di su 
file piuttosto che un convertitore pdf e amenita' di questo genere.
Lo scopo sarebbe di introdurre un watermark se l'output non e' la carta 
per cercare di limitare, rendendola piu' difficoltosa, la diffusione 
indesiderata di taluni documenti.
Qualcuno ha idee su come riconoscere il tipo di device su cui vado a 
stampare?
Grazie.

Che bella richiesta tosta....
Suggerisco di iniziare da:
The DeviceCapabilities function retrieves the capabilities of a printer
device driver.
DWORD DeviceCapabilities(
    LPCTSTR pDevice,	// pointer to a printer-name string
    LPCTSTR pPort,	// pointer to a port-name string
    WORD fwCapability,	// device capability to query
    LPTSTR pOutput,	// pointer to the output
    CONST DEVMODE *pDevMode 	// pointer to structure with device data
   );
Magari se la usi su un driver di stampante ottiieni uno o piu' valore
diversi rispetto a quanto restituito da un driver che manda su pdf etc.
Occhio, è solo una ipotesi buttata li, eh?
AS

 Occhio, č solo una ipotesi buttata li, eh?
Infatti ci sto pensando anche io e non ho ancora risposto proprio perche'
non riesco a trovare un qualcosa che faccia la differenza. Questo perche'
ci si trova proprio davanti all'architettura tipica di un O.S., dove il
programma non "vede" la stampante diretta ma un driver della stessa.
Questo fa si che e' impossibile capire se dall'altra parte ci sta una vera
stampante fisica oppure un ghostscript che crea un pdf.
Forse, se la cosa e' davvero difficile da distinguere, conviene ribaltare
il problema in questo senso: io proprietario del programma registro nel mio
db le stampanti fisiche, e tutte le altre le considero fake o fittizie.
L'operazione di autenticazione delle stampanti fisiche ovviamente dovra'
essere fatta da chi installa il software.
A questo proposito mi chiedo quale sia il dato (sia esso un parametro della
deviscecapability), un numero di serie tipo mac address ad esempio, che mi
permetta di indicizzare univocamente una stampante. Il nome non credo che
basti, perche' si puo' tranquillamente clonare.
Aspettiamo il feedback dell' OP.
ciao
-- 
Morde. 
ICLDweb: 
http://www2.samatel.com/icld/

 Aspettiamo il feedback dell' OP.
Intanto ho cercato per la rete maggiore documentazione:
http://www.efg2.com/Lab/Library/Delphi/Printing/index.html#DeviceCapabilities
e google groups ovviamente
http://groups.google.it/groups?hl=it&q=delphi%20DeviceCapabilities&btnG=Cerca+con+Google&sa=N&tab=wg


 Occhio, è solo una ipotesi buttata li, eh?
Infatti, è dura...noi abbiamo sviluppato un printer driver che poi converte
in pdf e non è facile capire che non si tratta di una stampante fisica: è
collegata alla lpt1 e il nome del driver non è indicativo. Non si può
nemmeno discriminare tramite il processore di stampa perchè non è detto che
ne utilizzi uno diverso dal normale WinPrint.
-- 
Lis        
www.alessandroghezzi.it
O'Telma:   
http://snipurl.com/otelma
Ogni uomo mente, ma dategli una maschera e sarà sincero (Oscar Wilde)

 Occhio, č solo una ipotesi buttata li, eh?
In effetti sembra un compito non banale, e dalle prime prove non mi pare 
che ci siano indicazioni univoche.
Potrebbe essere utile DC_MANUFACTURER che costringe a mantenere 
un'elenco di produttori (che pero' ormai sono sempre i soliti noti) ed 
e' facilmente aggirabile.
Terrovvi aggiornati non appena avro' modo di affrontare il problema con 
piu' dedizione.
Intanto grazie grazie a tutti per avermi pensato durante la mia latenza.