/
drv.Winspool.go
59 lines (50 loc) · 1.42 KB
/
drv.Winspool.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package windowsapi
import (
"syscall"
"unsafe"
)
var (
dWinspool = syscall.NewLazyDLL("Winspool.drv")
pGetPrintProcessorDirectoryW = dWinspool.NewProc("GetPrintProcessorDirectoryW")
pGetPrinterDriverDirectoryW = dWinspool.NewProc("GetPrinterDriverDirectoryW")
)
// GetPrintProcessorDirectory is used for get print processor directory
func GetPrintProcessorDirectory(platform string) (path string, err error) {
if err = pGetPrintProcessorDirectoryW.Find(); err != nil {
return "", err
}
pt := make([]uint16, syscall.MAX_PATH)
num := 0
ptrPlatform, _ := syscall.UTF16PtrFromString(platform)
ret, _, err := pGetPrintProcessorDirectoryW.Call(
uintptr(0),
uintptr(unsafe.Pointer(ptrPlatform)),
uintptr(1),
uintptr(unsafe.Pointer(&pt[0])),
uintptr(256),
uintptr(unsafe.Pointer(&num)))
if ret != 0 {
err = nil
}
return syscall.UTF16ToString(pt), err
}
// GetPrinterDriverDirectory ...
func GetPrinterDriverDirectory(platform string) (path string, err error) {
if err = pGetPrinterDriverDirectoryW.Find(); err != nil {
return "", err
}
pt := make([]uint16, syscall.MAX_PATH)
num := 0
ptrPlatform, _ := syscall.UTF16PtrFromString(platform)
ret, _, err := pGetPrinterDriverDirectoryW.Call(
uintptr(0),
uintptr(unsafe.Pointer(ptrPlatform)),
uintptr(1),
uintptr(unsafe.Pointer(&pt[0])),
uintptr(256),
uintptr(unsafe.Pointer(&num)))
if ret != 0 {
err = nil
}
return syscall.UTF16ToString(pt), err
}