[
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 m2nlight\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# AHKShortcutLikeMac\n\nAn AHK Script for using keyboard shortcuts like MacOS on your Windows\n\nAbout **AutoHotKey** [_HomePage_](https://www.autohotkey.com/) [_Github_](https://github.com/Lexikos/AutoHotkey_L/)\n\n```txt\nAutoHotKey v2 is alpha-release. Suggest use v1.1.*\n```\n\nv1.1.33.02 downloads\n\n* [AutoHotkey Portable](https://www.autohotkey.com/download/1.1/AutoHotkey_1.1.33.02.zip)\n\nScript Features:\n\n* Hot string (e.g. `]date`, `]time`, `]now`, `]longdate`)\n* Shortcuts table:\n\n | HotKeys                                                                                | Desc                                              |\n | -------------------------------------------------------------------------------------- | ------------------------------------------------- |\n | _MacOS shortcuts_                                                                      |                                                   |\n | <kbd>Win</kbd> <kbd>`</kbd>                                                            | Active next same class window                     |\n | <kbd>Win</kbd> <kbd>H</kbd>                                                            | Hide(minimize) current window                     |\n | <kbd>Win</kbd> <kbd>Alt</kbd> <kbd>H</kbd>                                             | Hide(minimize) other windows                      |\n | <kbd>Win</kbd> <kbd>M</kbd>                                                            | Hide(minimize) current windows                    |\n | <kbd>Win</kbd> <kbd>Alt</kbd> <kbd>M</kbd>                                             | Hide(minimize) all windows                        |\n | <kbd>Win</kbd> <kbd>Q</kbd>                                                            | Quit current application                          |\n | <kbd>Win</kbd> <kbd>T</kbd>                                                            | New tab (Ctrl+T)                                  |\n | <kbd>Win</kbd> <kbd>Shift</kbd> <kbd>T</kbd>                                           | Reload last tab (Ctrl+Shift+T)                    |\n | <kbd>Win</kbd> <kbd>N</kbd>                                                            | New...                                            |\n | <kbd>Win</kbd> <kbd>O</kbd>                                                            | Open...                                           |\n | <kbd>Win</kbd> <kbd>W</kbd>                                                            | Close the table                                   |\n | <kbd>Win</kbd> <kbd>S</kbd>                                                            | Save                                              |\n | <kbd>Win</kbd> <kbd>P</kbd>                                                            | Print (Ctrl+P)                                    |\n | <kbd>Win</kbd> <kbd>Z</kbd>                                                            | Undo                                              |\n | <kbd>Win</kbd> <kbd>Shift</kbd> <kbd>Z</kbd>                                           | Redo                                              |\n | <kbd>Win</kbd> <kbd>X</kbd>                                                            | Cut                                               |\n | <kbd>Win</kbd> <kbd>C</kbd>                                                            | Copy                                              |\n | <kbd>Win</kbd> <kbd>V</kbd>                                                            | Paste                                             |\n | <kbd>Win</kbd> <kbd>Alt</kbd> <kbd>V</kbd>                                             | Move files from clipboard to current location     |\n | <kbd>Win</kbd> <kbd>Shift</kbd> <kbd>Alt</kbd> <kbd>V</kbd>                            | Paste as text                                     |\n | <kbd>Win</kbd> <kbd>A</kbd>                                                            | Select all                                        |\n | <kbd>Win</kbd> <kbd>F</kbd>                                                            | Find (Ctrl+F)                                     |\n | <kbd>Win</kbd> <kbd>G</kbd>                                                            | Find (F3)                                         |\n | <kbd>Win</kbd> <kbd>Shift</kbd> <kbd>G</kbd>                                           | Find previous (Shift+F3)                          |\n | <kbd>Win</kbd> <kbd>Alt</kbd> <kbd>F</kbd>                                             | Replace (Ctrl+H)                                  |\n | <kbd>Win</kbd> <kbd>Left</kbd> or <kbd>Right</kbd> or <kbd>Up</kbd> or <kbd>Down</kbd> | (Home/End/PgUp/PgDown)                            |\n | <kbd>Alt</kbd> <kbd>Left</kbd> or <kbd>Right</kbd>                                     | (Ctrl+Left/Right)                                 |\n | <kbd>Win</kbd> <kbd>Alt</kbd> <kbd>F</kbd>                                             | Full screen (F11)                                 |\n | <kbd>Win</kbd> <kbd>=</kbd>                                                            | Zoom in                                           |\n | <kbd>Win</kbd> <kbd>-</kbd>                                                            | Zoom out                                          |\n | <kbd>Win</kbd> <kbd>0</kbd>                                                            | Resize zoom (Ctrl+0)                              |\n | <kbd>Win</kbd> <kbd>R</kbd>                                                            | Refresh                                           |\n | <kbd>Win</kbd> <kbd>Backspace</kbd>                                                    | Delete                                            |\n | <kbd>Win</kbd> <kbd>Shift</kbd> <kbd>3</kbd>                                           | Capture screen to clipboard                       |\n | <kbd>Win</kbd> <kbd>Shift</kbd> <kbd>4</kbd>                                           | Capture screen with region (Win10)                |\n | <kbd>Win</kbd> <kbd>Shift</kbd> <kbd>5</kbd>                                           | Start Snipping Tool (Win10)                       |\n | <kbd>Win</kbd> <kbd>F3</kbd>                                                           | Show desktop                                      |\n | <kbd>Win</kbd> <kbd>I</kbd>                                                            | Show file/folder property dialog (Alt+Enter)      |\n | <kbd>Win</kbd> <kbd>F10</kbd>                                                          | Mute                                              |\n | <kbd>Win</kbd> <kbd>F11</kbd>                                                          | Volume down                                       |\n | <kbd>Win</kbd> <kbd>F12</kbd>                                                          | Volume up                                         |\n | <kbd>Win</kbd> <kbd>Shift</kbd> <kbd>Backspace</kbd>                                   | Empty Recycle Bin                                 |\n | <kbd>Win</kbd> <kbd>Shift</kbd> <kbd>Alt</kbd> <kbd>Backspace</kbd>                    | Empty Recycle Bin without prompt                  |\n | <kbd>Win</kbd> <kbd>Alt</kbd> <kbd>Esc</kbd>                                           | Run task manager                                  |\n | <kbd>Win</kbd> <kbd>Shift</kbd> <kbd>Alt</kbd> <kbd>Esc</kbd>                          | Kill current process                              |\n | <kbd>Win</kbd> <kbd>Shift</kbd> <kbd>Alt</kbd> <kbd>Ctrl</kbd> <kbd>Esc</kbd>          | Kill all image name processes                     |\n | __Explorer shortcuts__                                                                 |                                                   |\n | <kbd>Win</kbd> <kbd>Enter</kbd>                                                        | Rename (F2)                                       |\n | <kbd>Win</kbd> <kbd>O</kbd>                                                            | Open (Enter)                                      |\n | <kbd>Win</kbd> <kbd>Up</kbd>                                                           | Up to                                             |\n | <kbd>Win</kbd> <kbd>Down</kbd>                                                         | Open (Enter) same to `Win+O`                      |\n | <kbd>Win</kbd> <kbd>Shift</kbd> <kbd>N</kbd>                                           | New folder                                        |  |\n | <kbd>Win</kbd> <kbd>Shift</kbd> <kbd>.</kbd>                                           | Show or hide hidden files                         |  |\n | _CapsLock+ shortcuts_                                                                  |                                                   |\n | <kbd>CapsLock</kbd> <kbd>Space</kbd>                                                   | `Ctrl+Space`                                      |\n | <kbd>CapsLock</kbd> <kbd>Backspace</kbd>                                               | Delete to line head                               |\n | <kbd>CapsLock</kbd> <kbd>Delete</kbd>                                                  | Delete to line end                                |\n | <kbd>CapsLock</kbd> <kbd>Enter</kbd>                                                   | New line                                          |\n | <kbd>CapsLock</kbd> <kbd>RShift</kbd>                                                  | Line split                                        |\n | <kbd>CapsLock</kbd> <kbd>D</kbd>                                                       | Duplicate line                                    |\n | <kbd>CapsLock</kbd> <kbd>W</kbd>                                                       | Selected current line                             |\n | <kbd>CapsLock</kbd> <kbd>C</kbd> or <kbd>X</kbd> or <kbd>V</kbd>                       | Copy/Cut/PasteAt current line                     |\n | <kbd>CapsLock</kbd> <kbd>Insert</kbd>                                                  | Paste as text                                     |\n | <kbd>CapsLock</kbd> <kbd>Alt/Shift</kbd> <kbd>8</kbd>                                  | Input a random password                           |\n | <kbd>CapsLock</kbd> <kbd>(Shift)</kbd> <kbd>B</kbd>                                    | Move left                                         |\n | <kbd>CapsLock</kbd> <kbd>(Shift)</kbd> <kbd>F</kbd>                                    | Move right                                        |\n | <kbd>CapsLock</kbd> <kbd>(Shift)</kbd> <kbd>P</kbd>                                    | Move up                                           |\n | <kbd>CapsLock</kbd> <kbd>(Shift)</kbd> <kbd>N</kbd>                                    | Move down                                         |\n | <kbd>CapsLock</kbd> <kbd>(Shift)</kbd> <kbd>A</kbd>                                    | Move line start                                   |\n | <kbd>CapsLock</kbd> <kbd>(Shift)</kbd> <kbd>E</kbd>                                    | Move line end                                     |\n | <kbd>CapsLock</kbd> <kbd>`1234567890</kbd>                                             | Set current window transparent to 0% ~ 100%       |\n | _LAlt+ shortcuts_                                                                      | _LAlt means left alt key_                         |\n | <kbd>LAlt</kbd> <kbd>C</kbd> or <kbd>X</kbd>                                           | Copy/Cut to line end                              |\n | <kbd>LAlt</kbd> <kbd>V</kbd>                                                           | paste and go/enter                                |\n | _Function Key_                                                                         |                                                   |\n | <kbd>CapsLock</kbd> <kbd>Esc</kbd>                                                     | Homepage                                          |\n | <kbd>CapsLock</kbd> <kbd>F1</kbd>                                                      | Show Help                                         |\n | <kbd>CapsLock</kbd> <kbd>F2</kbd>                                                      | Toggle current window to topmost                  |\n | <kbd>CapsLock</kbd> <kbd>Alt/Shift</kbd> <kbd>F2</kbd>                                 | Turn off/on current window to topmost             |\n | <kbd>CapsLock</kbd> <kbd>F3</kbd>                                                      | Run Listary                                       |\n | <kbd>CapsLock</kbd> <kbd>(Shift)</kbd> <kbd>F4</kbd>                                   | Run Everything (as administrator)                 |\n | <kbd>CapsLock</kbd> <kbd>F5</kbd>                                                      | Run pageant ([PuTTY][1])                          |\n | <kbd>CapsLock</kbd> <kbd>F6</kbd>                                                      | Run puttygen ([PuTTY][1])                         |\n | <kbd>CapsLock</kbd> <kbd>(Shift)</kbd> <kbd>F7</kbd>                                   | Run psftp (as administrator) ([PuTTY][1])         |\n | <kbd>CapsLock</kbd> <kbd>F8</kbd>                                                      | Run putty ([PuTTY][1])                            |\n | <kbd>CapsLock</kbd> <kbd>(Shift)</kbd> <kbd>F9</kbd>                                   | Windows Terminal or PowerShell (as administrator) |\n | <kbd>CapsLock</kbd> <kbd>(Shift)</kbd> <kbd>F10</kbd>                                  | CMD (as administrator)                            |\n | <kbd>CapsLock</kbd> <kbd>F11</kbd>                                                     | Bash (Win10 WSL)                                  |\n | <kbd>CapsLock</kbd> <kbd>(Shift)</kbd> <kbd>F12</kbd>                                  | [Git-bash][2] (as administrator)                  |\n | _Special Key_                                                                          |                                                   |\n | <kbd>Win</kbd> <kbd>F1</kbd>                                                           | Show Windows WinX Menus                           |\n | <kbd>Win</kbd> <kbd>F2</kbd>                                                           | Show Windows run dialog                           |\n | <kbd>Win</kbd> <kbd>F3</kbd>                                                           | Show Desktop                                      |\n | <kbd>Win</kbd> <kbd>F10</kbd>                                                          | Mute                                              |\n | <kbd>Win</kbd> <kbd>F11</kbd>                                                          | Volume down                                       |\n | <kbd>Win</kbd> <kbd>F12</kbd>                                                          | Volume up                                         |\n | and more...                                                                            |                                                   |\n\n[1]: https://www.chiark.greenend.org.uk/~sgtatham/putty/\n[2]: http://www.git-scm.com/download/win\n\nThanks:\n\n* [@g1084164986](https://github.com/g1084164986) - Mouse direction support.\n* [@liuyukuan](http://blog.csdn.net/liuyukuan/article/details/53885184) - Explorer rename support by his `ActiveControlIsOfClass` code.\n\nTips:\n\n* Auto run when logon: You can complied it to an execute file by **Ahk2Exe**, then create a shortcut file into Startup Menu(Win10: `%appdata%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup`)\n  or create a schedule task:\n\n  Copy `register_schedule_task.bat` with `machotkey.exe` in a folder, then run\n\n  ```cmd\n  register_schedule_task.bat\n  ```\n\n* Shortcuts mapping at Virtual Machine (XP~win10) on mac.\n* [QuickLook](https://github.com/xupefei/QuickLook) is alike MacOS Quick-Look tool, press <kbd>Space</kbd> to preview some file in the Explorer.\n* Switch <kbd>Win</kbd> and <kbd>Alt</kbd> by registry (win7 ~ win10):\n\n  ```ini\n  Windows Registry Editor Version 5.00\n\n  [HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\Keyboard Layout]\n  \"Scancode Map\"=hex:00,00,00,00,00,00,00,00,05,00,00,00,5b,e0,38,00,38,00,5b,e0,\\\n  5c,e0,38,e0,38,e0,5c,e0,00,00,00,00\n\n  ```\n\n  Restore key switch:\n\n  ```ini\n  Windows Registry Editor Version 5.00\n\n  [HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\Keyboard Layout]\n  \"Scancode Map\"=-\n\n  ```\n\n  A GUI tool name is [sharpkeys](https://github.com/randyrants/sharpkeys) can do this.\n"
  },
  {
    "path": "machotkey.ahk",
    "content": "; Shortcuts like mac\r\n; Written by m2nlight\r\n; https://github.com/m2nlight/AHKShortcutLikeMac\r\n\r\n#SingleInstance Off\r\n#HotkeyInterval 2000\r\n#HotkeyModifierTimeout 100\r\nSetWorkingDir, %A_ScriptDir%\r\n\r\nglobal my_name := \"MacHotKey\"\r\nglobal my_version := \"v0.3.1\"\r\nglobal my_bit := A_PtrSize * 8\r\nglobal my_website := \"https://github.com/m2nlight/AHKShortcutLikeMac\"\r\n\r\nif A_Args.Length() > 0 {\r\n  #NoEnv\r\n  #Persistent\r\n  try {\r\n    cmd := A_Args[1]\r\n    if (cmd = \"movefiles\") {\r\n      ShellMoveFile()\r\n    } else if (cmd = \"emptybin\") {\r\n      EmptyBin()\r\n    } else if (cmd = \"silentemptybin\") {\r\n      EmptyBin(true)\r\n    } else if (cmd = \"SwitchHiddenFiles\") {\r\n      SwitchHiddenFiles()\r\n      Send {F5}\r\n    } else if (cmd = \"help\" or cmd = \"version\") {\r\n      ShowHelp()\r\n    } else {\r\n      ExitApp, 1\r\n    }\r\n  }\r\n  ExitApp\r\n}\r\n\r\n; ## Special Key ##\r\n#F1::Send #x ; Show WinX menu in win10\r\n#F2::Send #r ; Show run dialog\r\n#`::NextWindow()\r\n\r\n; ## Menu ##\r\n#H::WinMinimize, A\r\n!#H::HideOtherWindow()\r\n#M::WinMinimize, A\r\n!#M::WinMinimizeAll\r\n#Q::Send !{F4}\r\n; File\r\n#T::Send ^t\r\n+#T::Send +^t\r\n#N::Send ^n\r\n+#N::Send +^n\r\n#O::Send ^o\r\n#W::Send ^w\r\n#+W::Send #w\r\n#S::Send ^s\r\n#P::Send ^p\r\n#+P::Send #p\r\n; Edit\r\n#Z::Send ^z\r\n+#Z::Send ^y\r\n#X::Send ^x\r\n#C::Send ^c\r\n#V::Send ^v\r\n!+#V::\r\n  clipboard = %clipboard%\r\n  Send ^v\r\nreturn\r\n#A::Send ^a\r\n#F::Send ^f\r\n#G::Send {F3}\r\n+#G::Send +{F3}\r\n!#F::Send ^h\r\n#Left::Send {Home}\r\n#Right::Send {End}\r\n#Up::Send {PgUp}\r\n#Down::Send {PgDn}\r\n<!Left::Send ^{Left}\r\n<!Right::Send ^{Right}\r\n#+Left::Send +{Home}\r\n#+Right::Send +{End}\r\n#+Up::Send +{PgUp}\r\n#+Down::Send +{PgDn}\r\n!+Left::Send +^{Left}\r\n!+Right::Send +^{Right}\r\n; View\r\n^#F::Send {F11}\r\n#=::Send ^{WheelUp}\r\n#-::Send ^{WheelDown}\r\n#0::Send ^0\r\n#R::Send {F5}\r\n; Finder\r\n#Backspace::Send {Del}\r\n+#3::Send {PrintScreen}\r\n+#4::Send +#s\r\n+#5::\r\n  try {\r\n    Run, \"C:\\Windows\\System32\\SnippingTool.exe\"\r\n  }\r\nReturn\r\n#F3::Send #d\r\n#F10::Send {Volume_Mute}\r\n#F11::Send {Volume_Down}\r\n#F12::Send {Volume_Up}\r\n#+Backspace::RunNewInstance(\"emptybin\")\r\n#+!Backspace::RunNewInstance(\"silentemptybin\")\r\n#!Escape::\r\n  try {\r\n    Run, \"C:\\Windows\\System32\\Taskmgr.exe\"\r\n  }\r\nReturn\r\n#+!Escape::KillProcess()\r\n#+!^Escape::KillProcess(true)\r\n; Explorer\r\n#IfWinActive ahk_exe Explorer.EXE\r\n!#V::\r\n  if CheckMoveFile() {\r\n    RunNewInstance(\"movefiles\")\r\n  }\r\nReturn\r\n#+.::RunNewInstance(\"SwitchHiddenFiles\", true)\r\n#If ActiveControlIsOfClass(\"SysListView32\") or ActiveControlIsOfClass(\"DirectUIHWND\")\r\n  #Backspace::Send {Del}\r\n#I::Send !{Enter}\r\n#O::Send {Enter}\r\n#Up::Send !{Up}\r\n#Down::Send {Enter}\r\n#Enter::Send {F2}\r\n#If\r\n#IfWinActive\r\n\r\n; ## custom ##\r\n; left alt + key\r\n<!V::Send ^v{Enter} ; paste and go\r\n<!C::Send +{End}^c ; copy to line end\r\n<!X::Send +{End}^x ; cut to line end\r\n\r\n; CapsLock + key\r\nCapsLock & Escape::\r\n  Run %my_website%\r\nReturn\r\nCapsLock & `::SetTransparent(0)\r\nCapsLock & 1::SetTransparent(10)\r\nCapsLock & 2::SetTransparent(20)\r\nCapsLock & 3::SetTransparent(30)\r\nCapsLock & 4::SetTransparent(40)\r\nCapsLock & 5::SetTransparent(50)\r\nCapsLock & 6::SetTransparent(60)\r\nCapsLock & 7::SetTransparent(70)\r\nCapsLock & 8::\r\n  if GetKeyState(\"Alt\") {\r\n    GeneratePassword(20)\r\n    return\r\n  }\r\n  if GetKeyState(\"Shift\") {\r\n    GeneratePassword(20, true)\r\n    return\r\n  }\r\n  SetTransparent(80)\r\nReturn\r\nCapsLock & 9::SetTransparent(90)\r\nCapsLock & 0::SetTransparent(100)\r\n\r\nCapsLock & Left::Send #{Left} ; WIN+LEFT\r\nCapsLock & Down::Send #{Down} ; WIN+DOWN\r\nCapsLock & Up::Send #{Up} ; WIN+UP\r\nCapsLock & Right::Send #{Right} ; WIN+RIGHT\r\n; capslock + key\r\nCapsLock & Space::Send ^{Space}\r\nCapsLock & B::\r\n  if GetKeyState(\"Shift\") {\r\n    Send +{Left}\r\n    return\r\n  }\r\n  Send {Left} ; Move back (Emacs: CTRL+B)\r\nReturn\r\nCapsLock & F::\r\n  if GetKeyState(\"Shift\") {\r\n    Send +{Right}\r\n    return\r\n  }\r\n  Send {Right} ; Move front (Emacs: CTRL+F)\r\nReturn\r\nCapsLock & N::\r\n  if GetKeyState(\"Shift\") {\r\n    Send +{Down}\r\n    return\r\n  }\r\n  Send {Down} ; Move next (Emacs: CTRL+N)\r\nReturn\r\nCapsLock & P::\r\n  if GetKeyState(\"Shift\") {\r\n    Send +{Up}\r\n    return\r\n  }\r\n  Send {Up} ; Move previous (Emacs: CTRL+P)\r\nReturn\r\nCapsLock & A::\r\n  if GetKeyState(\"Shift\") {\r\n    Send +{Home}\r\n    return\r\n  }\r\n  Send {Home} ; Move ahead (Emacs: CTRL+A)\r\nReturn\r\nCapsLock & E::\r\n  if GetKeyState(\"Shift\") {\r\n    Send +{End}\r\n    return\r\n  }\r\n  Send {End} ; Move end (Emacs: CTRL+E)\r\nReturn\r\nCapsLock & Enter::Send {End}{Enter} ; Start new line\r\nCapsLock & \\::Send {Home}{Enter}{Up} ; Start new line at previous line\r\nCapsLock & RShift::Send {Enter}{Left} ; Line split\r\nCapsLock & Backspace::Send +{Home}{Backspace} ; Delete to line begin\r\nCapsLock & Delete::Send +{End}{Backspace} ; Delete to line end\r\nCapsLock & D::Send {Home}+{End}^c{End}{Enter}^v{Home 2} ; Duplicate line\r\nCapsLock & W::Send {End}+{Home} ; Selected current line\r\nCapsLock & C::Send {End}+{Home}^c ; Selected and Copy current line\r\nCapsLock & X::Send {End}+{Home}^x+{Home}{Delete 2} ; Cut current line\r\nCapsLock & V::Send {Home}{Enter}{Up}^v ; Paste to current line\r\nCapsLock & Insert:: ; Paste plain text\r\n  clipboard = %clipboard%\r\n  Send ^v\r\nReturn\r\n; function key\r\nCapsLock & F1::RunNewInstance(\"help\")\r\nCapsLock & F2::\r\n  if GetKeyState(\"Shift\") {\r\n    WinSet, AlwaysOnTop, On, A\r\n    return\r\n  }\r\n  if GetKeyState(\"Alt\") {\r\n    WinSet, AlwaysOnTop, Off, A\r\n    return\r\n  }\r\n  WinSet, AlwaysOnTop, Toggle, A ; bring current window to TopMost\r\nReturn\r\nCapsLock & F3::RunAdvanced(\"C:\\Program Files\\Listary\\Listary.exe\") ; Run Listary\r\nCapsLock & F4::RunAdvanced(\"C:\\Tools\\Everything.exe\") ; Run Everything\r\nCapsLock & F5::RunAdvanced(\"pageant.exe\")\r\nCapsLock & F6::RunAdvanced(\"puttygen.exe\")\r\nCapsLock & F7::RunCmdAndCloseAdvanced(\"psftp.exe\")\r\nCapsLock & F8::RunAdvanced(\"putty.exe\")\r\nCapsLock & F9::RunWtOrPowerShell() ; Run PowerShell\r\nCapsLock & F10::RunCmdAdvanced(\"ver\") ; Run cmd\r\nCapsLock & F11::RunBash()\r\nCapsLock & F12::RunGit() ; Run git-bash\r\n\r\n; ## Hotstrings ##\r\n:*:]date::\r\n  FormatTime, CurrentDateTime,, yyyy-M-d\r\n  SendInput %CurrentDateTime%\r\nreturn\r\n:*:]time::\r\n  FormatTime, CurrentDateTime,, HH:mm:ss\r\n  SendInput %CurrentDateTime%\r\nreturn\r\n:*:]now::\r\n  FormatTime, CurrentDateTime,, yyyy-M-d HH:mm:ss\r\n  SendInput %CurrentDateTime%\r\nreturn\r\n:*:]longdate::\r\n  FormatTime, CurrentDateTime,, LongDate\r\n  SendInput %CurrentDateTime%\r\nreturn\r\n\r\n; ## Mouse ##\r\n/*\r\nWheelUP::\r\nSend {WheelDown}\r\nReturn\r\n\r\nWheelDown::\r\nSend {WheelUp}\r\nReturn\r\n\r\nWheelLeft::\r\nSend {WheelRight}\r\nReturn\r\n\r\nWheelRight::\r\nSend {WheelLeft}\r\nReturn\r\n*/\r\n\r\n; ## functions ##\r\nShowHelp() {\r\n  title=%my_name% %my_version% %my_bit%bit\r\n  msg=CapsLock+Esc Goto homepage.`nCapsLock+[``1234567890] Set current window tranparent to 0`%-100`%.`n`nCapsLock+Shift+F1~F12 Run xxx as administrator.`n`nCapsLock+F1 Show this.`nCapsLock+F2 Toggle window to topmost. +Alt/Shift turn off/on.`nCapsLock+F3 Run Listary.`nCapsLock+F4 Run Everything.`n`nCapsLock+F5 Run pageant.`nCapsLock+F6 Run puttygen.`nCapsLock+F7 Run psftp.`nCapsLock+F8 Run putty.`n`nCapsLock+F9 Run Windows Terminal or Powershell.`nCapsLock+F10 Run CMD.`nCapsLock+F11 Run Bash shell(WSL).`nCapsLock+F12 Run Git shell.`n`nWin+F1 Show WinX menu.`nWin+F2 Show Run dialog.`nWin+F3 Show Desktop.`nWin+F10 Mute.`nWin+F11 Volume down.`nWin+F12 Volume up.`n`nHot strings`n]now`t]time`t]date`t]longdate`t\r\n  MsgBox ,,%title%,%msg%,\r\n}\r\n\r\nRunAdvanced(command)\r\n{\r\n  try {\r\n    if GetKeyState(\"Shift\") && not A_IsAdmin {\r\n      Run *RunAs %command%\r\n      Return\r\n    }\r\n    Run %command%\r\n  }\r\n}\r\n\r\nRunCmdAdvanced(command)\r\n{\r\n  try {\r\n    curPath := CurrentPath()\r\n    if GetKeyState(\"Shift\") {\r\n      RunCmd(command, true)\r\n      Return\r\n    }\r\n    RunCmd(command)\r\n  }\r\n}\r\n\r\nRunCmdAndCloseAdvanced(command)\r\n{\r\n  try {\r\n    curPath := CurrentPath()\r\n    if GetKeyState(\"Shift\") {\r\n      RunCmdAndClose(command, true)\r\n      Return\r\n    }\r\n    RunCmdAndClose(command)\r\n  }\r\n}\r\n\r\nRunPowershell()\r\n{\r\n  try {\r\n    curPath := CurrentPath()\r\n    if GetKeyState(\"Shift\") {\r\n      Run *RunAs powershell.exe -NoExit \"cd \\\"%curPath%\\\"\"\r\n      Return\r\n    }\r\n    Run powershell.exe -NoExit \"cd \\\"%curPath%\\\"\"\r\n  }\r\n}\r\n\r\nRunWtOrPowerShell()\r\n{\r\n  try{\r\n    curPath := CurrentPath()\r\n    EnvGet, OutputVar, UserProfile\r\n    OutputVar = %OutputVar%\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe\r\n    if FileExist(OutputVar){\r\n      if GetKeyState(\"Shift\") {\r\n        Run *RunAs %OutputVar%, %curPath%\r\n        Return\r\n      }\r\n      Run %OutputVar%, %curPath%\r\n      Return\r\n    }\r\n  }\r\n  RunPowershell()\r\n}\r\n\r\nRunGit()\r\n{\r\n  try{\r\n    EnvGet, OutputVar, ProgramFiles\r\n    OutputVar = %OutputVar%\\Git\\git-bash.exe\r\n    if FileExist(OutputVar)\r\n    {\r\n      RunAdvanced(\"\"\"\" . OutputVar \"\"\" --cd=\"\"\" . CurrentPath() . \"\"\"\")\r\n    }\r\n    else\r\n    {\r\n      MsgBox ,,AHK,Sorry`, git-bash.exe don't exist.,3\r\n    }\r\n  }\r\n}\r\n\r\nRunBash()\r\n{\r\n  if FileExist(\"C:\\Windows\\System32\\bash.exe\")\r\n  {\r\n    RunCmdAndClose(\"\"\"C:\\Windows\\System32\\bash.exe\"\" --login\") ; Run bash shell in win10 amd64\r\n  }\r\n  else if FileExist(\"C:\\Windows\\sysnative\\bash.exe\")\r\n  {\r\n    RunCmdAndClose(\"\"\"C:\\Windows\\sysnative\\bash.exe\"\" --login\") ; Run bash shell in win10 x86\r\n  }\r\n  else\r\n  {\r\n    MsgBox ,,AHK,Sorry`, bash.exe or mintty.exe don't exist.,3\r\n  }\r\n}\r\n\r\nRunCmd(command, runAsAdmin=false)\r\n{\r\n  curPath := CurrentPath()\r\n  if runAsAdmin && not A_IsAdmin {\r\n    Run *RunAs %comspec% /K \"cd /d \"%curPath%\" & %command%\"\r\n  } else {\r\n    Run %comspec% /K \"cd /d \"%curPath%\" & %command%\"\r\n  }\r\n}\r\n\r\nRunCmdAndClose(command, runAsAdmin=false)\r\n{\r\n  curPath := CurrentPath()\r\n  if runAsAdmin && not A_IsAdmin {\r\n    Run *RunAs %comspec% /C \"cd /d \"%curPath%\" & %command%\"\r\n  } else {\r\n    Run %comspec% /C \"cd /d \"%curPath%\" & %command%\"\r\n  }\r\n}\r\n\r\nRunMSYS2(mintty, mingw, runAsAdmin=false)\r\n{\r\n  curPath := CurrentPath()\r\n  if (SubStr(curPath, -1) == \":\\\") {\r\n    curPath .= \"\\\" ; like C:\\\\\r\n  }\r\n  parameter = \"-i /msys2.ico --dir `\"%curPath%`\" /bin/env MSYSTEM=%mingw% CHERE_INVOKING=1 /usr/bin/bash -l\"\r\n  if runAsAdmin && not A_IsAdmin {\r\n    Run *RunAs \"%mintty%\" \"%parameter%\"\r\n  } else {\r\n    Run \"%mintty%\" \"%parameter%\"\r\n  }\r\n}\r\n\r\nEmptyBin(isNoConfirm=false)\r\n{\r\n  ;SHERB_NOCONFIRMATION = 0x000001;\r\n  ;SHERB_NOPROGRESSUI = 0x000002;\r\n  ;SHERB_NOSOUND = 0x000004;\r\n  dwFlags = 0x00\r\n  if(isNoConfirm) {\r\n    dwFlags = 0x01\r\n  }\r\n  DllCall(\"Shell32\\SHEmptyRecycleBin\", \"Ptr\", hwnd, \"Ptr\", NULL, \"UInt\", dwFlags)\r\n}\r\n\r\nKillProcess(byname=false) \r\n{\r\n  WinGet, cur_pid, PID, A\r\n  WinGet, process_name, ProcessName, A\r\n  if (process_name = \"Explorer.EXE\") {\r\n    return\r\n  }\r\n  try {\r\n    if not A_IsAdmin {\r\n      if byname {\r\n        Run *RunAs taskkill.exe /F /IM %process_name%,,Hide\r\n        return\r\n      }\r\n      Run *RunAs taskkill.exe /F /PID %cur_pid%,,Hide\r\n      return\r\n    }\r\n    if byname {\r\n      Run taskkill.exe /F /IM %process_name%,,Hide\r\n      return\r\n    }\r\n    Run taskkill.exe /F /PID %cur_pid%,,Hide\r\n  }\r\n}\r\n\r\nHideOtherWindow()\r\n{\r\n  WinGetClass, cur_class, A\r\n  DetectHiddenText, Off\r\n  WinGet, id, list,,, Program Manager\r\n  Loop, %id%\r\n  {\r\n    this_id := id%A_Index%\r\n    WinGetClass, this_class, ahk_id %this_id%\r\n    if (this_class = cur_class or this_class = \"Progman\" or this_class = \"WorkerW\" or this_class = \"Shell_TrayWnd\" or this_class = \"Internet Explorer_Hidden\") {\r\n      continue\r\n    }\r\n    WinMinimize, ahk_id %this_id%\r\n  }\r\n}\r\n\r\nNextWindow()\r\n{\r\n  WinGetClass, cur_class, A\r\n  acitve_id := 0\r\n  DetectHiddenText, On\r\n  WinGet, id, list,,, Program Manager\r\n  ; don't break the loop\r\n  Loop, %id%\r\n  {\r\n    this_id := id%A_Index% \r\n    WinGetClass, this_class, ahk_id %this_id%\r\n    if (this_class != cur_class) {\r\n      continue\r\n    }\r\n    if (acitve_id = 0) {\r\n      active_id := this_id\r\n    }\r\n  }\r\n  if (active_id != 0) {\r\n    WinActivate, ahk_id %active_id%\r\n  }\r\n}\r\n\r\nRealCurrentPath() {\r\n  WinGetClass, cur_class, A\r\n  WinGet, process_name, ProcessName, A\r\n  if ((cur_class = \"WorkerW\" or cur_class = \"Progman\") and process_name = \"Explorer.EXE\") {\r\n    return A_Desktop\r\n  }\r\nreturn CurrentPath(false, false)\r\n}\r\n\r\nCurrentPath(last = true, fallbackToDesktop = true)\r\n{\r\n  url := GetCurrentExplorerURL(last)\r\n  if (url) {\r\n    return ConvertExplorerURLToPath(url)\r\n  }\r\n  if (fallbackToDesktop) {\r\n    return A_Desktop\r\n  }\r\nreturn \"\"\r\n}\r\n\r\nGetCurrentExplorerURL(getLastWhenNoFound=false)\r\n{\r\n  WinGet, curhwnd, ID, A\r\n  for pExp in ComObjCreate(\"Shell.Application\").Windows\r\n  {\r\n    try\r\n    {\r\n      if (pExp.FullName = \"C:\\WINDOWS\\EXPLORER.EXE\") {\r\n        if (pExp.hwnd = curhwnd) {\r\n          return pExp.LocationURL\r\n        }\r\n        if(StrLen(pExp.LocationURL)> 0) {\r\n          last := pExp.LocationURL\r\n        }\r\n      }\r\n    }\r\n  }\r\n  if(getLastWhenNoFound and last) {\r\n    return last\r\n  }\r\n}\r\n\r\nConvertExplorerURLToPath(url)\r\n{\r\n  If !url\r\n    Return \"\"\r\n  path := url\r\n  path := RegExReplace(path, \"ftp://.*@\",\"ftp://\")\r\n  StringReplace, path, path, file:///\r\n  StringReplace, path, path, /, \\, All\r\n  Loop\r\n    If RegExMatch(path, \"i)(?<=%)[\\da-f]{1,2}\", hex)\r\n    StringReplace, path, path, `%%hex%, % Chr(\"0x\" . hex), All\r\n  Else Break\r\n    Return path \r\n}\r\n\r\nActiveControlIs(Control) { \r\n  ControlGetFocus, FocusedControl, A \r\nreturn (FocusedControl=Control) \r\n} \r\n\r\nActiveControlIsOfClass(Class) { \r\n  ControlGetFocus, FocusedControl, A \r\n  ControlGet, FocusedControlHwnd, Hwnd,, %FocusedControl%, A \r\n  WinGetClass, FocusedControlClass, ahk_id %FocusedControlHwnd% \r\nreturn (FocusedControlClass=Class) \r\n}\r\n\r\nGeneratePassword(length, withSpecialChars=false) {\r\n  Characters = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890\r\n  if withSpecialChars {\r\n    Characters .= \"``~!@#$`%^&*()_+-=[]{}\\|`;:'\"\"`,.<>/?\"\r\n  }\r\n  Loop %length% {\r\n    Random, r, 1, % StrLen(Characters)\r\n    Passwords .= SubStr(Characters, r, 1)\r\n  }\r\n  SendInput {Raw}%Passwords%\r\n}\r\n\r\nSetTransparent(value) {\r\n  if (value is not integer) {\r\n    return\r\n  }\r\n  if (value >= 100 or value < 0) {\r\n    WinSet, Transparent, 255, A\r\n    return\r\n  }\r\n  value := value*255//100\r\n  WinSet, Transparent, %value%, A\r\n}\r\n\r\nRunNewInstance(cmd, runAsAdmin = false) {\r\n  If A_IsCompiled {\r\n    if (runAsAdmin && not A_IsAdmin) {\r\n      try {\r\n        Run *RunAs %A_ScriptFullPath% %cmd%\r\n      }\r\n      return\r\n    }\r\n    Run %A_ScriptFullPath% %cmd%\r\n    return\r\n  }\r\n  if (runAsAdmin && not A_IsAdmin) {\r\n    try {\r\n      Run *RunAs %A_AhkPath% %A_ScriptFullPath% %cmd%\r\n    }\r\n    return\r\n  }\r\n  Run %A_AhkPath% %A_ScriptFullPath% %cmd%\r\n}\r\n\r\nSwitchHiddenFiles() {\r\n  SetRegView %my_bit%\r\n  try {\r\n    RegRead, OutputVar, HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced, ShowSuperHidden\r\n  }\r\n  catch {\r\n    OutputVar = 0\r\n  }\r\n  if (OutputVar and OutputVar = 1) {\r\n    RegWrite, REG_DWORD, HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced, ShowSuperHidden, 0\r\n    RegWrite, REG_DWORD, HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced, Hidden, 2\r\n  } else {\r\n    RegWrite, REG_DWORD, HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced, ShowSuperHidden, 1\r\n    RegWrite, REG_DWORD, HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced, Hidden, 1\r\n  }\r\n}\r\n\r\nCheckMoveFile() {\r\n  target_dir := RealCurrentPath()\r\n  if StrLen(target_dir) = 0 {\r\n    return false\r\n  }\r\n  source_files := \"\"\r\n  Loop, parse, clipboard, `n, `r\r\n  {\r\n    IfNotExist, %A_LoopField%, continue\r\n      source_files = %source_files%%A_LoopField%|\r\n  }\r\n  if StrLen(source_files) = 0 {\r\n    return false\r\n  }\r\nreturn true\r\n}\r\n\r\nShellMoveFile() {\r\n  target_dir := RealCurrentPath()\r\n  if StrLen(target_dir) = 0 {\r\n    return\r\n  }\r\n  ; fix network path \"file://ipaddress/path\" to \"\\\\ipaddress\\path\"\r\n  StringReplace, target_dir, target_dir, file:, , All\r\n  StringReplace, target_dir, target_dir, /, \\, All\r\n\r\n  source_files := \"\"\r\n  Loop, parse, clipboard, `n, `r\r\n  {\r\n    IfNotExist, %A_LoopField%, continue\r\n      source_files = %source_files%%A_LoopField%|\r\n  }\r\n  if StrLen(source_files) = 0 {\r\n    return\r\n  }\r\n  ;msgbox Will to move %source_files% to %target_dir%\r\n  ShellFileOperation(\"FO_MOVE\", source_files, target_dir,\"FOF_ALLOWUNDO|FOF_SIMPLEPROGRESS|FOF_NOCONFIRMMKDIR\") \r\n}\r\n\r\n; https://autohotkey.com/board/topic/51486-shellfileoperation-library/\r\n; https://github.com/7plus/7plus/blob/f3b270f7b182d2ad023efb00f51e6f77b3029520/Shell.ahk\r\n; https://msdn.microsoft.com/en-us/library/windows/desktop/bb759795(v=vs.85).aspx\r\n; ShellFileOperation(\"FO_MOVE\", \"::::\", \"::::\",\"FOF_ALLOWUNDO|FOF_SIMPLEPROGRESS|FOF_NOCONFIRMMKDIR\")     \r\n; MsgBox % ErrorLevel\r\nShellFileOperation( fileO=0x0, fSource=\"\", fTarget=\"\", flags=0x0, ghwnd=0x0 ) \r\n{\r\n  ;dout_f(A_ThisFunc)\r\n  FO_MOVE := 0x1\r\n  FO_COPY := 0x2\r\n  FO_DELETE := 0x3\r\n  FO_RENAME := 0x4\r\n\r\n  FOF_MULTIDESTFILES := 0x1 ; Indicates that the to member specifies multiple destination files (one for each source file) rather than one directory where all source files are to be deposited.\r\n  FOF_SILENT := 0x4 ; Does not display a progress dialog box.\r\n  FOF_RENAMEONCOLLISION := 0x8 ; Gives the file being operated on a new name (such as \"Copy #1 of...\") in a move, copy, or rename operation if a file of the target name already exists.\r\n  FOF_NOCONFIRMATION := 0x10 ; Responds with \"yes to all\" for any dialog box that is displayed.\r\n  FOF_ALLOWUNDO := 0x40 ; Preserves undo information, if possible. With del, uses recycle bin.\r\n  FOF_FILESONLY := 0x80 ; Performs the operation only on files if a wildcard filename (*.*) is specified.\r\n  FOF_SIMPLEPROGRESS := 0x100 ; Displays a progress dialog box, but does not show the filenames.\r\n  FOF_NOCONFIRMMKDIR := 0x200 ; Does not confirm the creation of a new directory if the operation requires one to be created.\r\n  FOF_NOERRORUI := 0x400 ; don't put up error UI\r\n  FOF_NOCOPYSECURITYATTRIBS := 0x800 ; dont copy file security attributes\r\n  FOF_NORECURSION := 0x1000 ; Only operate in the specified directory. Don't operate recursively into subdirectories.\r\n  FOF_NO_CONNECTED_ELEMENTS := 0x2000 ; Do not move connected files as a group (e.g. html file together with images). Only move the specified files.\r\n  FOF_WANTNUKEWARNING := 0x4000 ; Send a warning if a file is being destroyed during a delete operation rather than recycled. This flag partially overrides FOF_NOCONFIRMATION.\r\n\r\n  ; no more annoying numbers to deal with (but they should still work, if you really want them to)\r\n  fileO := %fileO% ? %fileO% : fileO\r\n\r\n  ; the double ternary was too fun to pass up\r\n  _flags := 0\r\n  Loop Parse, flags, |\r\n    _flags |= %A_LoopField% \r\n  flags := _flags ? _flags : (%flags% ? %flags% : flags)\r\n\r\n  If ( SubStr(fSource,0) != \"|\" )\r\n    fSource := fSource . \"|\"\r\n\r\n  If ( SubStr(fTarget,0) != \"|\" )\r\n    fTarget := fTarget . \"|\"\r\n\r\n  char_size := A_IsUnicode ? 2 : 1\r\nchar_type := A_IsUnicode ? \"UShort\" : \"Char\"\r\n\r\n  fsPtr := &fSource\r\n  Loop % StrLen(fSource)\r\n    if NumGet(fSource, (A_Index-1)*char_size, char_type) = 124\r\n    NumPut(0, fSource, (A_Index-1)*char_size, char_type)\r\n\r\n  ftPtr := &fTarget\r\n  Loop % StrLen(fTarget)\r\n    if NumGet(fTarget, (A_Index-1)*char_size, char_type) = 124\r\n    NumPut(0, fTarget, (A_Index-1)*char_size, char_type)\r\n    /*\r\n    typedef struct _SHFILEOPSTRUCT {\r\n      HWND         hwnd; A_PtrSize\r\n      UINT         wFunc; 4\r\n      PCZZTSTR     pFrom; <-- LPCWSTR, A_PtrSize\r\n      PCZZTSTR     pTo; A_PtrSize\r\n      FILEOP_FLAGS fFlags; <-- WORD, 2\r\n      BOOL         fAnyOperationsAborted;, 4\r\n      LPVOID       hNameMappings; A_PtrSize\r\n      PCTSTR       lpszProgressTitle; A_PtrSize\r\n    } SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;\r\n    Total:\r\n    A_PtrSize + 4 (+ 4 Padding) Padding + A_PtrSize + A_PtrSize + 2 + 2 Padding + 4 + A_PtrSize + A_PtrSize = 12 (+4) + 5 x A_PtrSize\r\n  */\r\n  VarSetCapacity( SHFILEOPSTRUCT, 12 + 5 * A_PtrSize, 0) ; Encoding SHFILEOPSTRUCT\r\n  NumPut( ghwnd, &SHFILEOPSTRUCT, \"PTR\") ; hWnd of calling GUI\r\n  NumPut( fileO, SHFILEOPSTRUCT, A_PtrSize, \"UINT\") ; File operation\r\n  NumPut( fsPtr, SHFILEOPSTRUCT, 2 * A_PtrSize, \"PTR\") ; Source file / pattern\r\n  NumPut( ftPtr, SHFILEOPSTRUCT, 3 * A_PtrSize, \"PTR\" ) ; Target file / folder\r\n  NumPut( flags, SHFILEOPSTRUCT, 4 * A_PtrSize, \"Short\" ) ; options\r\n\r\n  DllCall( \"Shell32\\SHFileOperation\" . (A_IsUnicode ? \"W\" : \"A\"), Ptr, &SHFILEOPSTRUCT )\r\n  SHFILEOPSTRUCT := \"\"\r\nReturn\r\n}\r\n"
  },
  {
    "path": "register_schedule_task.bat",
    "content": "@echo off\r\nSETLOCAL ENABLEEXTENSIONS\r\npushd %~dp0\r\n\r\nset machotkey=\"machotkey.exe\"\r\nset taskname=\"machotkey\"\r\n\r\n:: escape double quotes and expand paths\r\nfor /f \"delims=\" %%v in (\"%machotkey%\") do set machotkey=%%~fv\r\nfor /f \"delims=\" %%v in (\"%taskname%\") do set taskname=%%~v\r\n\r\necho Register or unregister a schedule task to\r\necho automatic launch when your login.\r\necho.\r\necho Tip: You should run this as the administrator.\r\necho.\r\necho The mackhotkey file is %machotkey%\r\necho The taskname is %taskname%\r\necho.\r\n\r\nif not exist \"%machotkey%\" (\r\n    echo File %machotkey% is not existed.\r\n    goto :err\r\n)\r\nif exist \"%machotkey%\\*\" (\r\n    echo %machotkey% is not a file.\r\n    goto :err\r\n)\r\ngoto :check\r\n\r\n:check\r\nschtasks.exe /Query /TN %taskname%>nul 2>nul\r\nif ERRORLEVEL 1 goto :reg\r\ngoto :unreg\r\n\r\n:reg\r\necho Register a schedule task: %taskname%\r\nset /p tmpInput=Are you ready? (Y/N):^ \r\nif /i \"%tmpInput%\" neq \"y\" goto :cancel\r\nschtasks.exe /Create /TN %taskname% /RU Users /SC ONLOGON /TR %machotkey%\r\nif ERRORLEVEL 1 goto :err\r\necho OK\r\ngoto :end\r\n\r\n:unreg\r\necho Unregister schedule task: %taskname%\r\nset /p tmpInput=Are you ready? (Y/N):^ \r\nif /i \"%tmpInput%\" neq \"y\" goto :cancel\r\nschtasks.exe /Delete /TN %taskname% /F\r\nif ERRORLEVEL 1 goto :err\r\necho OK\r\ngoto :end\r\n\r\n:cancel\r\necho Cancelled.\r\ngoto :over\r\n\r\n:err\r\necho Failed.\r\ngoto :end\r\n\r\n:end\r\necho Press any key to EXIT...\r\npause>nul\r\n\r\n:over\r\npopd\r\n"
  }
]