webForumDet fria alternativet

Full kontroll av skrivarport

Programmering

1 svar · 1 276 visningar · startad av Fireh

Medlem sedan jan. 2003173 inlägg
Frågan#1

Jag jobbar på ett webbaserat POS-system (Point Of Sale = kassasystem). Hela systemet är klart så när som på kvittoutskrifterna. Som kvittoskrivare används Micronics Star TSP100.

Utskrifter kan ske på två olika sätt, antingen som en vanlig skrivare i Windows. Då fungerar den även om den sitter som nätverksskrivare på annan dator. För att kunna använda sig av utskrifterna i applikationer, där man bl.a. skickar kommandon till skrivaren, skapar man OPOS-namn. Informationen för detta lagras i registret.

[HKEY_LOCAL_MACHINE\SOFTWARE\OLEforRetail\ServiceOPOS\POSPrinter\Kvitto]
@="Star.TSP100.POSPrinterSO"
"Service"="TSP100PrinterSO.dll"
"Description"="TSP100 OPOS POSPrinter Service Object"
"Version"="1.8.42"
"StarIOPort.Name"="5&3ad6b64d&0&2"
"StarIOPort.Setting"=""
"DeviceClass"="1"
"Timeout"="1000"
"DoCheckedBlock"="0"

Jag har skrivit en ActiveX-dll i VB6 som används för utskriften. Med skrivaren ansluten direkt till webbservern kommer kvittona ut utan problem. Vad jag ser händer är att när man aktiverar utskriften så tar den helt kontroll av skrivaren. Tittar man i Skrivare och fax i Windows, så pausas skrivaren tills man släppt den i applikationen. Om jag nu sätter skrivaren på kassadatorn, delar ut den och skapar en "lokal port" mot \\kassa1\star (som den är utdelad som), så fungerar Windows utskrifter som vanligt, men applikationen kan inte ta kontroll över skrivaren längre vilket resulterar i att det inte kommer kvitton. Har givit fullständiga rättigheter på skrivaren, men det hjälper inte.

Jag tänkte att det kanske var så att den inte alls gick via skrivaren i Windows, utan letade upp OPOS-namnet Kvitto på annat sätt. Finns ju en registernyckel som heter StarIOPort.Name med värdet 5&3ad6b64d&0&2. Testade därför att byta port från USB001 till LPT1 i Windows på skrivaren. Även då slutade utskrifterna via OPOS fungera, alltså används den port som man installerat Windows-skrivaren på. Men via nätverk fungerar det alltså inte.

Jag tror inte att någon här har så stor erfarenhet av just detta, men kanske någon vet ett program eller något sätt att få skrivarporten på klienten att helt bli kontrollerad av annan dator i nätet. Att det på webbservern framstår som en helt lokal skrivare och att allt som skickas till den även skickas till klienten där motsvarande händer med skrivarporten.

Några kommandon som används för att skriva ut är:

Form1.POSPrinter1.Open ("Kvitto")
Form1.POSPrinter1.ClaimDevice (0)
Form1.POSPrinter1.PowerNotify = 1
Form1.POSPrinter1.DeviceEnabled = True

Det är på DeviceEnabled = True som det inte går. Det kommandot resulterar inte i att den blir enabled. Det är även i det läget som Windows-skrivaren hamnar i paus-läge när skriveren sitter lokalt.

Medlem sedan jan. 2003173 inlägg
#2

En fundering som jag kom på, men som jag inte vet om det finns. Kanske någon här vet? Finns det program som åstadkommer en "USB-förlängning" över nätverk? Skrivaren är nämligen ansluten via USB.

Man installerar ett program på både server och klient. På klienten pekar man ut en USB-port som ska "förlängas" till servern. På servern skapas en virtuell USB-port. På så sätt blir skrivaren, som är fysiskt ansluten till klienten, "fysiskt" ansluten till servern. Då bör man ju lura drivrutinen att skriveren är på servern...?

Kanske ett önsketänkande, men någon som vet?

266 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)