|
@@ -51,6 +51,12 @@ var (
|
|
|
procEndDoc = winspool.NewProc("EndDocPrinter")
|
|
procEndDoc = winspool.NewProc("EndDocPrinter")
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
+type PRINTER_DEFAULTS struct {
|
|
|
|
|
+ pDatatype *uint16
|
|
|
|
|
+ pDevMode uintptr
|
|
|
|
|
+ DesiredAccess uint32
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
type DOC_INFO_1 struct {
|
|
type DOC_INFO_1 struct {
|
|
|
pDocName *uint16
|
|
pDocName *uint16
|
|
|
pOutputFile *uint16
|
|
pOutputFile *uint16
|
|
@@ -59,18 +65,24 @@ type DOC_INFO_1 struct {
|
|
|
|
|
|
|
|
func PrintRaw(printerName string, data []byte) error {
|
|
func PrintRaw(printerName string, data []byte) error {
|
|
|
namePtr, _ := syscall.UTF16PtrFromString(printerName)
|
|
namePtr, _ := syscall.UTF16PtrFromString(printerName)
|
|
|
|
|
+ rawType, _ := syscall.UTF16PtrFromString("RAW")
|
|
|
|
|
+
|
|
|
|
|
+ pd := PRINTER_DEFAULTS{
|
|
|
|
|
+ pDatatype: rawType,
|
|
|
|
|
+ pDevMode: 0,
|
|
|
|
|
+ DesiredAccess: 0x000F0000 | 0x00000008, // PRINTER_ACCESS_USE | PRINTER_ACCESS_ADMINISTER
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
var handle syscall.Handle
|
|
var handle syscall.Handle
|
|
|
ret, _, _ := procOpenPrinter.Call(uintptr(unsafe.Pointer(namePtr)),
|
|
ret, _, _ := procOpenPrinter.Call(uintptr(unsafe.Pointer(namePtr)),
|
|
|
- uintptr(unsafe.Pointer(&handle)), 0)
|
|
|
|
|
|
|
+ uintptr(unsafe.Pointer(&handle)), uintptr(unsafe.Pointer(&pd)))
|
|
|
if ret == 0 {
|
|
if ret == 0 {
|
|
|
return fmt.Errorf("OpenPrinter 失败: %s", printerName)
|
|
return fmt.Errorf("OpenPrinter 失败: %s", printerName)
|
|
|
}
|
|
}
|
|
|
defer procClosePrinter.Call(uintptr(handle))
|
|
defer procClosePrinter.Call(uintptr(handle))
|
|
|
|
|
|
|
|
docName, _ := syscall.UTF16PtrFromString("Parking Ticket")
|
|
docName, _ := syscall.UTF16PtrFromString("Parking Ticket")
|
|
|
- dataType, _ := syscall.UTF16PtrFromString("RAW")
|
|
|
|
|
- di := DOC_INFO_1{pDocName: docName, pDataType: dataType}
|
|
|
|
|
|
|
+ di := DOC_INFO_1{pDocName: docName, pDataType: rawType}
|
|
|
|
|
|
|
|
procStartDoc.Call(uintptr(handle), 1, uintptr(unsafe.Pointer(&di)))
|
|
procStartDoc.Call(uintptr(handle), 1, uintptr(unsafe.Pointer(&di)))
|
|
|
procStartPage.Call(uintptr(handle))
|
|
procStartPage.Call(uintptr(handle))
|