跳过导航
返回

程序实现快速切屏,可用于摸鱼

编辑页面

摸鱼是打工人对抗资本家榨取剩余价值的手段,打工人的历史就是一部摸鱼史🐶。

当我们在摸鱼时,领导来了,需要快速切屏时,需要用到快捷键,但可能一键切屏更为方便。所以我用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. 关闭当前应用、窗口;
  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较为彻底,适用于长期不再具有摸鱼条件。
  3. 模式2适合短期后摸鱼条件恢复。
  4. 个人感觉,模式1关闭窗口动画和模式2的切换动画相比不那么显眼。
  5. 建议开启触发快捷键后关闭应用,以免领导面前工作时触发程序。

下载

点击下载链接即可下载。


编辑页面
分享到:

上一篇
阿加莎作品阅读记
下一篇
安装Windows 11 LTSC系统