-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
98 lines (84 loc) · 1.84 KB
/
main.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package main
import (
"fmt"
"os"
"github.com/go-vgo/robotgo"
"github.com/ilyakaznacheev/cleanenv"
hook "github.com/robotn/gohook"
)
const (
LEFT = 0
RIGHT = 1
)
var leftClicker Clicker
var rightClicker Clicker
var leftDeactivate []string
var rightDeactivate []string
var deactivate []string
var processTitle string
var processPid int32
func main() {
loadConfig()
setProcessPid()
clickCh := make(chan int)
go watch(clickCh)
addHooks(clickCh)
}
func loadConfig() {
var cfg Config
err := cleanenv.ReadConfig("config.yml", &cfg)
if err != nil {
fmt.Println(err)
os.Exit(2)
}
leftClicker = Clicker{delay: cfg.LeftClick.Delay, running: false, button: "left"}
rightClicker = Clicker{delay: cfg.RightClick.Delay, running: false, button: "right"}
leftDeactivate = []string{cfg.LeftClick.Deactivate}
rightDeactivate = []string{cfg.RightClick.Deactivate}
deactivate = []string{cfg.Deactivate}
processTitle = cfg.ProcessTitle
}
func setProcessPid() {
fpid, err := robotgo.FindIds(processTitle)
if err == nil {
if len(fpid) > 0 {
processPid = fpid[0]
return
}
}
fmt.Println("Process not found")
os.Exit(1)
}
func addHooks(clickCh chan<- int) {
hook.Register(hook.KeyDown, deactivate, func(e hook.Event) {
hook.End()
})
hook.Register(hook.KeyDown, leftDeactivate, func(e hook.Event) {
if robotgo.GetPID() == processPid {
clickCh <- LEFT
}
})
hook.Register(hook.KeyDown, rightDeactivate, func(e hook.Event) {
if robotgo.GetPID() == processPid {
clickCh <- RIGHT
}
})
s := hook.Start()
<-hook.Process(s)
}
func watch(clickCh <-chan int) {
for {
switch <-clickCh {
case LEFT:
leftClicker.running = !leftClicker.running
if leftClicker.running {
go leftClicker.activate()
}
case RIGHT:
rightClicker.running = !rightClicker.running
if rightClicker.running {
go rightClicker.activate()
}
}
}
}