Newsgroup: it.comp.programmare.win32
Titolo: Scrittura su porta stampante

In un programma ho provato a scrivere direttamente su porta stampante con
l'API CreateFile(), tipo:
        HANDLE hComm = CreateFile("LPT1", GENERIC_WRITE, 0,
                            0, OPEN_EXISTING, 0, 0);
        if(hComm == INVALID_HANDLE_VALUE)
        {
            file://errore
     ...
            return;
        }
e quindi con WriteFile(), tipo:
 DWORD dwBytesWrited;
 WriteFile(hComm, "Ciao", 5, &dwBytesWrited, NULL);
ma la stampante non stampa nulla, nonostante la WriteFile() mi restituisca
true.
Non ho molta familiarità con le API. Qualcuno potrebbe dirmi dove sbaglio,
magari con qualche esempio di codice funzionante?
Grazie in anticipo.

Ciao,
ci sono diversi problemi!!!
Se vorresti scrivere e leggere sulla porta seriale, potresti usare
semplicemente WriteFile e ReadFile.
Ma visto che tu vuoi accedere alla porta parallela la storia cambia. In più
dipende dal OS che hai. Se hai NT non puoi accedere al porta // come vuoi
te, e dovresti creare un driver. Niente panico, posso aiutarti!!!
Se vai al sito 
http://www.eivd.ch/iai/projet/mmp.htm
 potrai scaricare
(GRATIS) un driver universale che ti permetterà di accedere al mondo
hardware sotto NT (e anche 9x). Questo driver ti permette di leggere e
scrivere a qualsiasi indirizzo grazie alle funzioni int MMPInp(int addr) et
MMPOut(int addr, int Data) e in più troverai altre funzioni interessanti
come per esempio, chiamare una tua funzione a ogni interruzione IRQx (x e il
numero della tua interruzione).
In più troverai qualche esempio come utlizzare questo driver, ma ti assicuro
di partenza che é VERAMENTE FACILE.
Se hai domande non esitare a porle...
Bye
Matteo


La CreateFile che hai utilizzato tu ha creato un file "LPT1" nella 
directory corrente!
Se devi solamente inviare dati su LPT1 (senza modificarne il alcun modo la 
configurazione della porta o utilizzare segnali particolari) basta 
utilizzare \\.\LPT1 come path passato a CreateFile. 
Se devi utilizzare la parallela controllando i vari segnali etc.. devi 
scrivere un driver.
Tieni inoltre presente che non tutte le stampanti stampano direttamente il 
testo che gli viene passato via parallela. Alcune stampanti (le 
"winprinters" lasciano che sia il driver ad eseguire il grosso delle 
elaborazioni in fase di stampa ed utilizzano un protocollo a basso livello 
(singoli punti, credo) per la stampa e non sono quindi in grado di 
interpretare il testo.
Per poter stampare su qualunque tipo di stampante supportato da win devi 
utilizzare GDI per creare un device-context relativo alla stampante e poi 
utilizzare le API grafiche (con alcuni accorgimenti e API particolari per 
gestire la paginazione e lo spooling della stampa).
-- 
Valter Minute
min...@inwind.it
 (the reply address of this message is invalid)

 WriteFile(hComm, "Ciao", 5, &dwBytesWrited, NULL);
Ho qualche dubbio che le stampanti al giorno d'oggi siano "pronte" per
stampare dei dati non formattati spediti cosi` alla carlona. Prova a fare
questa prova: apri un qualsiasi programma in grado di stampare, stampa un
documento su file e poi prova a spedire quest'ultimo con WriteFile().
Probabilmente cosi` funzionera`; se funziona, il punto adesso e` quello di
trovare il formato 'raw' usato dalla tua stampante.
---
Bye! Lorenzo Lutti
http://antani.virtualave.net/