Newsgroup: it.comp.lang.visual-basic
Titolo: Come intercettare avvio stampa ?

Situazione: programma tipo ristorazione che avvia le stampe su stampantina 
termica in cucina
La cucina e' distante dalla postazione cassa ed il cliente vorrebbe attivare 
un cicalino in zona cucina per ogni stampa inviata dal pc
La stampantina, una Custom Kube 2, pilotata via rs232, dispone di un'uscita 
per l'apertura di un eventuale cassetto contanti, che vorrei usare per 
metterci un buzzer o lampadina o altro avvisatore
Non abbiamo accesso ai sorgenti del programma gestionale e quindi bisogna 
agire "dall'esterno"
Allora i problemi sono 2:
- number one - come intercettare le stampe che vengono 'sparate' dal 
gestionale alla stampante (ipotizziamo che passino dallo spooler di Windows) 
?
- number two - come inviare un comando (apertura cassetto) alla stampantina 
se e' gia' impegnata a 'parlare' col gestionale principalo ?
Per a uno magari ci arriviamo, per la due mi sa' che ci vuole un miragolo
Ciao e grazie
RobertoA

 RobertoA
.m
-- 
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCP
http://mvp.support.microsoft.com
blog @ 
http://milestone.topics.it
whynot [ at ] topics [ dot ] it

 stampante ma stando in mezzo può fare il bello e il cattivo tempo.
Eh si, sarebbe proprio una bella cosa....
... sapendola fare
Perche' purtroppo io non la seppi, qua si tratta di fare un driver per una 
periferica virtuale
Non e' che hai qualche spunto/link/documento da darmi per la realizzazione?
Quello che mi e' venuto in mente fin'ora e' vedere sullo spooler quando 
arrivano le stampe ed usare uno di quei bussolotti tipo Adam
http://www.advantech.com/eautomation/remote-io/
per attivare un buzzerino
Ma e' una soluzione 'altamente grezza', se trovassi qualcosa di piu' 
elegante, sfruttando quello che c'e' sarebbe meglio
Ciao e grazie
RobertoA

 se e' gia' impegnata a 'parlare' col gestionale principalo ?
Probabilmente viene fatto un print su COM1 diretto:
    Open App.Path & "\Etic.Bat" For Output As #1
    Cmd$ = "COM1"
    Print #1, "MODE " & Cmd$ & ":9600,N,8,1"
    Print #1, "TYPE " & App.Path & "\ETIC.TXT > " & Cmd$
Potresti vedere se riesci a capire dove viene generato questo file, magari
se ci riesci, puoi fare un programmino che lo monitorizza e fare quello che
ti serve.

 miragolo Ciao e grazie
I segnali  della seriale sono "alti" quando non c'e' 
trasmissione e si abbassano durante la trasmissione, se hai
dimestichezza con un saldatore a stagno puoi intercettarli
e armare un buzzer... 
se metti un led con resistenza da 1k sul pin 3 (tx +) e 5 (GND)
puoi verificare tu stesso che il led si spegne durante la 
trasmissione; un 555 e/o transistor + condensatore 
(meglio ancora se usi anche un max232 per non dare noia
alla comunicazione) puo' pilotare efficacemente il buzzer.


Non credo sia cosi', oppure e' cosi' pero' l'apertura porta seriale avviene 
ad avviamento programma e non prima di ogni stampa
Il problema sta appunto nel fatto che il gestionale quando parte apre la 
comX e non la molla piu'
E come faccio a 'spedire' alla stampantina ?


Si, sto iniziando a pensare che una soluzione di 'intrufolamento' nel 
sistema non sia possibile
Quindi non mi resta che attaccarmi...  all'hardware
Un monostabile durata un secondo che faccia andare un oscillatore che 
alimenti il buzzer

 qua si tratta di fare un driver per una periferica virtuale
non credo proprio che quella roba passi da un driver, d solito quelle 
schifezze di stampantine vengono usate proprio direttamente via 
seriale, io mi armerei di pazienza e partendo dal sito del produttore 
della stampante, o magari da un sdk, cercherei di capire come 
comunicare con la stampante e po mi metterei in mezzo. Alla fine delle 
fiera una comunicazione seriale è una robetta abbastanza banale.


 fiera una comunicazione seriale è una robetta abbastanza banale.
Quoto, e aggiungo: anche analizzando quello che passa sulla
seriale con PortMon di SysInternals, per esempio.
Bye, G.

 comunicazione seriale è una robetta abbastanza banale.
Sara' banale per te, ma personalmente qualche difficolta' la trovo
Allora, io la stampante la conosco e so come pilotarla
Il problema sta nel fatto che quando il gestionale principale apre la com1 o 
quella che e', poi non la chiude finche' non viene spento
E se non la chiude, nessun altro programma puo' usarla, ne per leggerci ne 
per scriverci
E allora come faccio a 'mettermi in mezzo' ?
Certo che a riuscirci, avrei risolto mooolto elegantemente il problema
Ciao
RobertoA

 E allora come faccio a 'mettermi in mezzo' ?
installi una COM virtuale su cui c'ï¿œ in ascolto il tuo "proxy" e 
configuri il gestionale per parlare con quella COM virtuale, poi il tuo 
proxy fa forward verso la com vera su cui c'ï¿œ la stampante.


 PortMon di SysInternals
+1, ottimo


 seriale con PortMon di SysInternals, per esempio.
Fare quello che fa PortMon e' quello che mi servirebbe, ma credo siano 
operazioni molto complesse, forse oltre le mie attuali conoscenze
Inoltre il monitoraggio risolve meta' problema, poi bisogna 'scrivere' sulla 
porta seriale (ricordo che la porta seriale in questione e' gia' aperta ed 
in uso da altra applicazione) il comando per far beepare la stampante
Ciao e grazie
RobertoA

 in uso da altra applicazione) il comando per far beepare la stampante
[pura teoria]
Se avessi una multiseriale, potresti lasciar uscire il programma
da una facendolo entrare su un'altra gestita da te, filtrare
quello che passa come ti serve e rimandarlo fuori su una terza,
verso la stampante
[/pura teoria]
Ora, tornando al mondo reale :-), non ho la minima idea di come
si possa fare... ma non hai la minima maniera di smanettare
sulle opzioni di quella stampante ?
Magari riesci ad infilarci un Chr$(7) o quel che era il "Bell".
Vedi mai che funzioni :-).
Su una OKI 393 o qualcosa di simile c'era un buzzer che
suonava anche abbastanza forte, serviva in caso di inceppamento,
ma potevi usarlo anche da programma.
Perň sono ricordi di qundici anni fa e piů, eh...
Bye, G.

 uso da altra applicazione) il comando per far beepare la stampante
Allora, ho riletto il thread e ho visto che quello che dicevo era una
variante di quento già proposto da Mauro Servienti...
Il problema a quanto pare è che il gestionale comunica con la stampante
via RS232, se usasse la USB quasi sicuramente userebbe anche lo
spooler di stampa, e lì forse si potrebbe ragionare meglio: qualche
tempo fa avevo postato dei link o del codice, non ricordo, per interagire
con lo spooler. Andiamo avanti da qui, o per meglio dire ricominciamo
da capo.
1) Sei proprio sicuro di non poter contattare il produttore del gestionale ?
Così sarebbe sicuramente la soluzione più pulita, al momento di mandare
in stampa uno scontrino potresti chiedere di far fare [quello che vuoi] in
quel punto. Fosse anche solo scrivere un file semaforo. Poi sarebbe
banale per te fare un programmino che controlli la creazione di quel file
e faccia suonare una tromba, se necessario :-).
2) Controlla nelle directory del gestionale, è possibile (e direi più che
probabile, visto che la stampante gestisce i loghi) che ci sia uno o più
file di configurazione per l'output della stampante, un .INI, un CFG,
un .DAT o simili. Se lo trovi hai praticamente risolto, aggiungi i comandi
che vuoi a quello che chiude la pagina e poi comanda il taglio dello
scontrino.
Come dicevo in altro post dovrebbe essere un ASCII 7, magari nel file
va messo in esadecimale o simili.
2) bis: non è bello, ma visto che è una stampante seriale dovrebbe
avere un file .GPD infilato da qualche parte nel S.O., e c'è almeno
una vaga possibilità che il programma si appoggi a quello per la
configurazione, potresti smanettarci dentro... non contarci troppo,
però.
3) Hai provato a registrarti qui e vedere se c'è qualcosa di interessante,
nei manuali o nella command reference ?
http://www.custom.it/ita/products/show_product.aspx?id=PosSolutions&pid=130
Comunque, io punterei sulla 2... per prima cosa fruga nelle directory
del gestionale :-).
Bye, G. 

 
http://www.custom.it/ita/products/show_product.aspx?id=PosSolutions&pid=130
Cerca cerca ho trovato una soluzione che reputo elegante
C'e' un emulatore di porte seriali, 'sto qua
http://www.soaringpilot.org/dokuwiki/doku.php/soarpilot/mixw_bridge
che sembra cascare a fagiolo
Ti installa due porte seriali virtuali, le chiami ad esempio COM20 e COM21, 
poi al gestionale gli dici di 'sparare' verso la COM20
In ascolto sulla COM21 ci metti il tuo programmillo che appena vede arrivare 
qualcosa, la gira paro paro verso la COM1 (supposto che la stampante sia 
fisicamente collegata sulla com1)  e poi ci spara il comando per far beepare 
la stampante, fine
Ciao e grazie a tutti
RobertoA

 ha scritto nel messaggio 
news:4c1b3281$1...@newsgate.x-privat.org...


 vedi se puo toranrti utile, ciao
Grazie, ho risolto con un programma che installa due comX emulate
Vedi il 3d,  messaggio con titolo RISOLTO
Comunque anche sapere cosa c'e' nello spooler credo possa sicuramente 
essermi utile
Ciao e grazie
RobertoA

 la stampante, fine
LOL... Lui è troppo signore per fartelo notare:
Message-ID: <mn.9a647da63...@online.nospam>
:-)
Bye, G.

 Vedi il 3d,  messaggio con titolo RISOLTO
sinceramewnte no......non leggo risolto :S
 


Spiegati meglio per favore 

 proxy fa forward verso la com vera su cui c'è la stampante.
***********
Poi fra tutti quanti ci si era intrippati verso altre soluzioni.
Bye, G.

"Paperino" <non...@lo.dico.invalid> ha scritto nel messaggio 
news:hvn3ft$mr8$1...@news.eternal-september.org...

Non credo sia questione che Mauro Serventi sia troppo signore per farmelo 
notare
Fin dal giorno prima dell'invio di quel messaggio (vedi suo msg del 18/06 
ore 8.30 e mia risposta)  era chiaro che la com virtuale fosse la via 
preferibile
Il problema era trovarne una adatta e magari aggratisse, ricerca che ho 
continuato oltre che seguire le altre ipotesi di lavoro
Nulla toglie all'utilita' dei preziosi consigli di Mauro Serventi e credo 
che mai ringrazieremo abbastanza chi come lui e gli altri mvp dedica motlo 
tempo prezioso ad aiutarci
Ciao e grazie
RobertoA

 ha scritto nel messaggio 
news:4c1e5b14$0$31379$4faf...@reader1.news.tin.it...

Volevo dire SOLUZIONE TROVATA