摸鱼是打工人对抗资本家榨取剩余价值的手段,打工人的历史就是一部摸鱼史🐶。
当我们在摸鱼时,领导来了,需要快速切屏时,需要用到快捷键,但可能一键切屏更为方便。所以我用robotgo
实现了Windows下一键切屏的功能。
由于不熟悉MacOS和Linux桌面的快捷键,这里只实现了Windows下的程序,迁移到其它系统也就改一些按键,请读者自行实现。
代码
package main
import (
"flag"
"fmt"
"os"
"runtime"
"github.com/go-vgo/robotgo"
hook "github.com/robotn/gohook"
)
var (
hookKey = flag.String("k", "space", "自定义快捷键,默认:space")
mode = flag.Int("m", 1, "运行模式,可选值:1, 2, 3;\n1.关闭应用、窗口;\n2.仅切换窗口。\n默认1")
direction = flag.String("d", "left", "切换窗口的方向,可选值:left, right。默认left")
needClose = flag.Bool("c", true, "触发快捷键后是否关闭应用。默认true")
)
func main() {
if runtime.GOOS != "windows" {
fmt.Println("不支持的操作系统")
return
}
flag.Usage = func() {
fmt.Println("用法: ./moyu -m [mode] -k [key] -d [direction] -c [close]")
fmt.Println("mode int \n\t运行模式,可选值:1, 2;\n\t1.关闭应用、窗口;\n\t2.关闭应用并切换;\n\t3.仅切换窗口。\n\t默认:1")
fmt.Println("key string \n\t自定义快捷键,默认:space")
fmt.Println("direction string \n\t切换窗口的方向,可选值:left, right。默认:left")
fmt.Println("close bool \n\t触发快捷键后是否关闭应用。默认:true")
}
flag.Parse()
hook.Register(hook.KeyDown, []string{*hookKey}, func(e hook.Event) {
triggerShortcut()
})
hook.Register(hook.KeyDown, []string{"esc"}, func(e hook.Event) {
os.Exit(0)
})
s := hook.Start()
fmt.Println("程序已启动")
<-hook.Process(s)
}
func onlyChangeWindow(direction string) {
robotgo.KeyTap(direction, "ctrl", "cmd")
}
func closeAppAndWindow() {
robotgo.KeyTap("f4", "alt")
robotgo.KeyTap("f4", "ctrl", "cmd")
}
// 触发快捷键组合
func triggerShortcut() {
robotgo.KeyUp(*hookKey)
switch *mode {
case 1:
closeAppAndWindow()
case 2:
onlyChangeWindow(*direction)
}
if *needClose {
os.Exit(0)
}
}
说明
用法
./moyu -m [mode] -k [key] -d [direction] -c [close]
mode int
运行模式,可选值:1, 2
;
- 关闭当前应用、窗口;
- 仅切换窗口。
默认:1
。
key string
自定义快捷键,默认:space
。
其他按键代码,即为robotgo
的定义:
const (
// KeyA define key "a"
KeyA = "a"
KeyB = "b"
KeyC = "c"
KeyD = "d"
KeyE = "e"
KeyF = "f"
KeyG = "g"
KeyH = "h"
KeyI = "i"
KeyJ = "j"
KeyK = "k"
KeyL = "l"
KeyM = "m"
KeyN = "n"
KeyO = "o"
KeyP = "p"
KeyQ = "q"
KeyR = "r"
KeyS = "s"
KeyT = "t"
KeyU = "u"
KeyV = "v"
KeyW = "w"
KeyX = "x"
KeyY = "y"
KeyZ = "z"
//
CapA = "A"
CapB = "B"
CapC = "C"
CapD = "D"
CapE = "E"
CapF = "F"
CapG = "G"
CapH = "H"
CapI = "I"
CapJ = "J"
CapK = "K"
CapL = "L"
CapM = "M"
CapN = "N"
CapO = "O"
CapP = "P"
CapQ = "Q"
CapR = "R"
CapS = "S"
CapT = "T"
CapU = "U"
CapV = "V"
CapW = "W"
CapX = "X"
CapY = "Y"
CapZ = "Z"
//
Key0 = "0"
Key1 = "1"
Key2 = "2"
Key3 = "3"
Key4 = "4"
Key5 = "5"
Key6 = "6"
Key7 = "7"
Key8 = "8"
Key9 = "9"
// Backspace backspace key string
Backspace = "backspace"
Delete = "delete"
Enter = "enter"
Tab = "tab"
Esc = "esc"
Escape = "escape"
Up = "up" // Up arrow key
Down = "down" // Down arrow key
Right = "right" // Right arrow key
Left = "left" // Left arrow key
Home = "home"
End = "end"
Pageup = "pageup"
Pagedown = "pagedown"
F1 = "f1"
F2 = "f2"
F3 = "f3"
F4 = "f4"
F5 = "f5"
F6 = "f6"
F7 = "f7"
F8 = "f8"
F9 = "f9"
F10 = "f10"
F11 = "f11"
F12 = "f12"
F13 = "f13"
F14 = "f14"
F15 = "f15"
F16 = "f16"
F17 = "f17"
F18 = "f18"
F19 = "f19"
F20 = "f20"
F21 = "f21"
F22 = "f22"
F23 = "f23"
F24 = "f24"
Cmd = "cmd" // is the "win" key for windows
Lcmd = "lcmd" // left command
Rcmd = "rcmd" // right command
// "command"
Alt = "alt"
Lalt = "lalt" // left alt
Ralt = "ralt" // right alt
Ctrl = "ctrl"
Lctrl = "lctrl" // left ctrl
Rctrl = "rctrl" // right ctrl
Control = "control"
Shift = "shift"
Lshift = "lshift" // left shift
Rshift = "rshift" // right shift
// "right_shift"
Capslock = "capslock"
Space = "space"
Print = "print"
Printscreen = "printscreen" // No Mac support
Insert = "insert"
Menu = "menu" // Windows only
AudioMute = "audio_mute" // Mute the volume
AudioVolDown = "audio_vol_down" // Lower the volume
AudioVolUp = "audio_vol_up" // Increase the volume
AudioPlay = "audio_play"
AudioStop = "audio_stop"
AudioPause = "audio_pause"
AudioPrev = "audio_prev" // Previous Track
AudioNext = "audio_next" // Next Track
AudioRewind = "audio_rewind" // Linux only
AudioForward = "audio_forward" // Linux only
AudioRepeat = "audio_repeat" // Linux only
AudioRandom = "audio_random" // Linux only
Num0 = "num0" // numpad 0
Num1 = "num1"
Num2 = "num2"
Num3 = "num3"
Num4 = "num4"
Num5 = "num5"
Num6 = "num6"
Num7 = "num7"
Num8 = "num8"
Num9 = "num9"
NumLock = "num_lock"
NumDecimal = "num."
NumPlus = "num+"
NumMinus = "num-"
NumMul = "num*"
NumDiv = "num/"
NumClear = "num_clear"
NumEnter = "num_enter"
NumEqual = "num_equal"
LightsMonUp = "lights_mon_up" // Turn up monitor brightness No Windows support
LightsMonDown = "lights_mon_down" // Turn down monitor brightness No Windows support
LightsKbdToggle = "lights_kbd_toggle" // Toggle keyboard backlight on/off No Windows support
LightsKbdUp = "lights_kbd_up" // Turn up keyboard backlight brightness No Windows support
LightsKbdDown = "lights_kbd_down"
)
direction string
切换窗口的方向,可选值:left, right
。默认:left
。
close bool
触发快捷键后是否关闭应用。默认:true
。
默认参数适合窗口1工作,窗口2开启一个摸鱼程序,触发快捷键后会关闭当前摸鱼程序,关闭窗口2,系统会显示窗口1。
建议
- 关闭程序只关闭了当前程序,所以尽量摸鱼窗口只执行一个摸鱼程序。如果执行多个摸鱼程序不要使用模式1,否则其他摸鱼程序会移动到主窗口。
- 模式1较为彻底,适用于长期不再具有摸鱼条件。
- 模式2适合短期后摸鱼条件恢复。
- 个人感觉,模式1关闭窗口动画和模式2的切换动画相比不那么显眼。
- 建议开启触发快捷键后关闭应用,以免领导面前工作时触发程序。
下载
点击下载链接即可下载。