├── .gitignore ├── LICENSE ├── README.md ├── app_data ├── conf_bak │ ├── conf.default.json │ └── conf.me.json ├── ev_sup │ ├── Everything.exe │ ├── Everything.ini │ ├── Everything.lng │ └── EverythingToolbar │ │ ├── Everything64.dll │ │ ├── EverythingToolbar.dll │ │ ├── EverythingToolbar.pdb │ │ ├── ItemTemplates │ │ ├── COMPACT_DETAILED.xaml │ │ ├── Compact (detailed).xaml │ │ ├── Compact.xaml │ │ ├── NORMAL_DETAILED.xaml │ │ ├── Normal (detailed).xaml │ │ └── Normal.xaml │ │ ├── LICENSE │ │ ├── Microsoft.Xaml.Behaviors.dll │ │ ├── Microsoft.Xaml.Behaviors.pdb │ │ ├── NHotkey.Wpf.dll │ │ ├── NHotkey.Wpf.pdb │ │ ├── NHotkey.dll │ │ ├── NHotkey.pdb │ │ ├── NLog.dll │ │ ├── README.md │ │ ├── Themes │ │ ├── Dark.xaml │ │ ├── Light.xaml │ │ └── Medium.xaml │ │ ├── af │ │ └── EverythingToolbar.resources.dll │ │ ├── ar │ │ └── EverythingToolbar.resources.dll │ │ ├── ca │ │ └── EverythingToolbar.resources.dll │ │ ├── cs │ │ └── EverythingToolbar.resources.dll │ │ ├── da │ │ └── EverythingToolbar.resources.dll │ │ ├── de │ │ └── EverythingToolbar.resources.dll │ │ ├── el │ │ └── EverythingToolbar.resources.dll │ │ ├── es │ │ └── EverythingToolbar.resources.dll │ │ ├── fi │ │ └── EverythingToolbar.resources.dll │ │ ├── fr │ │ └── EverythingToolbar.resources.dll │ │ ├── he │ │ └── EverythingToolbar.resources.dll │ │ ├── hu │ │ └── EverythingToolbar.resources.dll │ │ ├── install.cmd │ │ ├── it │ │ └── EverythingToolbar.resources.dll │ │ ├── ja │ │ └── EverythingToolbar.resources.dll │ │ ├── ko-KR │ │ └── EverythingToolbar.resources.dll │ │ ├── nl │ │ └── EverythingToolbar.resources.dll │ │ ├── no │ │ └── EverythingToolbar.resources.dll │ │ ├── pl │ │ └── EverythingToolbar.resources.dll │ │ ├── pt-BR │ │ └── EverythingToolbar.resources.dll │ │ ├── ro │ │ └── EverythingToolbar.resources.dll │ │ ├── ru │ │ └── EverythingToolbar.resources.dll │ │ ├── sr │ │ └── EverythingToolbar.resources.dll │ │ ├── sv │ │ └── EverythingToolbar.resources.dll │ │ ├── tr │ │ └── EverythingToolbar.resources.dll │ │ ├── uk │ │ └── EverythingToolbar.resources.dll │ │ ├── uninstall.cmd │ │ ├── vi │ │ └── EverythingToolbar.resources.dll │ │ └── zh-Hans │ │ └── EverythingToolbar.resources.dll ├── img │ ├── donate_alipay.png │ ├── donate_wechat.png │ ├── sux.svg │ ├── sux_default.ico │ └── sux_disable.ico ├── min_trans_style.css ├── prscrn.dll ├── ss │ ├── Config │ │ ├── BuiltInShortcutConfig.json │ │ ├── actionConfig.json │ │ ├── config.json │ │ └── markConfig.ini │ ├── KoiAnimation.dll │ ├── OwlKeyLog.dll │ ├── PandaConfiguration.dll │ ├── PixPin.exe │ ├── QIconfont.dll │ ├── QLongScreenShot.dll │ ├── QScreenshot.dll │ ├── QWindowNotify.dll │ ├── Qt5Core.dll │ ├── Qt5Gui.dll │ ├── Qt5Network.dll │ ├── Qt5Qml.dll │ ├── Qt5Sql.dll │ ├── Qt5Svg.dll │ ├── Qt5Widgets.dll │ ├── Qt5WinExtras.dll │ ├── RobinLog.dll │ ├── SalmonActions.dll │ ├── UiSpy.dll │ ├── concrt140.dll │ ├── imageformats │ │ ├── qgif.dll │ │ ├── qicns.dll │ │ ├── qico.dll │ │ ├── qjpeg.dll │ │ ├── qsvg.dll │ │ ├── qtga.dll │ │ ├── qtiff.dll │ │ ├── qwbmp.dll │ │ └── qwebp.dll │ ├── language │ │ └── zh-cn.qm │ ├── language_qt │ │ └── qt_zh-cn.qm │ ├── libcrypto-1_1-x64.dll │ ├── libssl-1_1-x64.dll │ ├── model │ │ ├── detect.caffemodel │ │ ├── detect.prototxt │ │ ├── sr.caffemodel │ │ └── sr.prototxt │ ├── msvcp140.dll │ ├── msvcp140_1.dll │ ├── pixpin.log │ ├── platforms │ │ └── qwindows.dll │ ├── qgenericbearer.dll │ ├── qxtglobalshortcut.dll │ ├── sqldrivers │ │ └── qsqlite.dll │ ├── styles │ │ └── qwindowsvistastyle.dll │ ├── ucrtbase.dll │ ├── unzip.exe │ ├── upgradeZIP.bat │ ├── vcomp140.dll │ ├── vcruntime140.dll │ ├── vcruntime140_1.dll │ └── zip.exe ├── user_extension.js └── ver.ini ├── source ├── action.ahk ├── clipboard_plus.ahk ├── common_const.ahk ├── js_eval.ahk ├── quick_entry.ahk ├── search_plus.ahk ├── snip_plus.ahk ├── sux_core.ahk ├── translate.ahk ├── tray_menu.ahk └── util.ahk └── sux.ahk /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode/ 2 | build/ 3 | temp_dir/ 4 | _ScreenshotRecord/ 5 | app_data/ss/Data/ 6 | app_data/ss/History/ 7 | 8 | conf.user.json 9 | remote_ver.ini 10 | data.ini 11 | sux.exe 12 | temp_trans_webapp_gui.html 13 | Everything.db 14 | Run History.csv 15 | .DS_Store 16 | sux.zip 17 | sux.7z 18 | build.7z 19 | build.zip 20 | LocalStorage.data 21 | -------------------------------------------------------------------------------- /app_data/conf_bak/conf.default.json: -------------------------------------------------------------------------------- 1 | { 2 | "File-Description": "你可以在custom块里覆盖所有的buildin(内置)配置或者直接修改buildin配置, 改了之后重启sux生效.You can override all the buildin conf at custom block or buildin conf itself, take effect after sux restart. ", 3 | "enable_clear_cache_on_exit": 1, 4 | "hide_tray_icons": [], 5 | "theme": { 6 | "dark": { 7 | "sux_width": 620, 8 | "sux_text_color": "ffffff", 9 | "sux_bg_color": "424242", 10 | "sux_border_shadow_type": "" 11 | }, 12 | "light": { 13 | "sux_width": 620, 14 | "sux_text_color": "000000", 15 | "sux_bg_color": "ececec", 16 | "sux_border_shadow_type": "modern_shadow_type" 17 | } 18 | }, 19 | "clipboard-plus": { 20 | "enable": 1, 21 | "ClipsTotalNum": 50 22 | }, 23 | "search-plus": { 24 | "enable": 1, 25 | "buildin": { 26 | "Default": { 27 | "space": ["https://www.baidu.com/#ie=UTF-8&wd=REPLACEME"] 28 | }, 29 | "Youdao": { 30 | "tab": ["https://www.youdao.com/w/REPLACEME"] 31 | }, 32 | "Baidu": { 33 | "a": ["https://www.baidu.com/#ie=UTF-8&wd=REPLACEME"] 34 | }, 35 | "Youtube": { 36 | "e": ["https://www.youtube.com/results?search_query=REPLACEME"] 37 | }, 38 | "Douban": { 39 | "d": ["https://www.douban.com/search?q=REPLACEME"] 40 | }, 41 | "Github": { 42 | "h": ["https://github.com/search?q=REPLACEME"] 43 | }, 44 | "Zhihu": { 45 | "z": ["https://www.zhihu.com/search?type=content&q=REPLACEME"] 46 | }, 47 | "Bilibili": { 48 | "b": ["search.bilibili.com/all?keyword=REPLACEME"] 49 | } 50 | }, 51 | "custom": {} 52 | }, 53 | "command": { 54 | "enable": 1, 55 | "buildin": { 56 | "cmd": "cmd.exe", 57 | "sux": "https://github.com/no5ix/sux" 58 | }, 59 | "custom": {} 60 | }, 61 | "replace-text": { 62 | "enable": 1, 63 | "buildin": { 64 | "h/": "http://", 65 | "hs/": "https://", 66 | "qc@": "@qq.com", 67 | "gc@": "@gmail.com", 68 | "16@": "@163.com" 69 | }, 70 | "custom": {} 71 | }, 72 | "hot-corner": { 73 | "action": { 74 | "LeftTopCorner": { 75 | "hover": "JumpToPrevTab" 76 | }, 77 | "RightTopCorner": { 78 | "hover": "JumpToNextTab" 79 | }, 80 | "LeftBottomCorner": { 81 | "hover": "Win" 82 | }, 83 | "RightBottomCorner": { 84 | "hover": "GotoPreApp" 85 | } 86 | } 87 | }, 88 | "hot-edge": { 89 | "enable": 1, 90 | "action": { 91 | "TopHalfLeftEdge": { 92 | "ctrl_8": "C:\\Program Files (x86)\\Netease\\CloudMusic\\cloudmusic.exe", 93 | "wheeldown": "GoBottom", 94 | "wheelup": "GoTop", 95 | "MButton": "MinWindow" 96 | }, 97 | "TopHalfRightEdge": { 98 | "ctrl_8": "OpenFileExplorer", 99 | "wheeldown": "PgDn", 100 | "wheelup": "PgUp", 101 | "MButton": "MaxWindow" 102 | }, 103 | "BottomHalfLeftEdge": { 104 | "ctrl_8": "ReopenLastTab", 105 | "MButton": "OpenTaskView", 106 | "wheeldown": "GotoNextDesktop", 107 | "wheelup": "GotoPreDesktop" 108 | }, 109 | "BottomHalfRightEdge": { 110 | "ctrl_8": "RefreshTab", 111 | "MButton": "OpenTaskView", 112 | "wheeldown": "GotoNextDesktop", 113 | "wheelup": "GotoPreDesktop" 114 | }, 115 | "LeftHalfBottomEdge": { 116 | "ctrl_8": "OpenTaskView", 117 | "wheeldown": "VolumeDown", 118 | "wheelup": "VolumeUp", 119 | "MButton": "MoveCurrentWindowToMouseMonitor" 120 | }, 121 | "LeftHalfTopEdge": { 122 | "ctrl_8": "MoveWindowToLeftSide", 123 | "wheeldown": "VolumeDown", 124 | "wheelup": "VolumeUp", 125 | "MButton": "MoveWindowToLeftSide" 126 | }, 127 | "RightHalfTopEdge": { 128 | "ctrl_8": "MoveWindowToRightSide", 129 | "MButton": "MoveWindowToRightSide", 130 | "wheeldown": "PgDn", 131 | "wheelup": "PgUp" 132 | }, 133 | "RightHalfBottomEdge": { 134 | "ctrl_8": "OpenActionCenter", 135 | "MButton": "MoveCurrentWindowToMouseMonitor", 136 | "wheeldown": "PgDn", 137 | "wheelup": "PgUp" 138 | } 139 | } 140 | }, 141 | "third_screenshot_app": 0, 142 | "hotkey": { 143 | "enable": 1, 144 | "capslock_disable_exe_list": [], 145 | "buildin": { 146 | "capslock": "SwitchCapsState", 147 | "capslock_q": "ScreenShot", 148 | "capslock_shift_q": "ScreenShotAndSuspend", 149 | "shift_space": "ShowSuxMenu", 150 | "doublehit_capslock": "ShowSuxMenu", 151 | "capslock_t": "QuickEntry_Translation_Menu_Click", 152 | "capslock_c": "ctrl_c", 153 | "capslock_e": "up", 154 | "capslock_alt_e": "shift_up", 155 | "capslock_s": "left", 156 | "capslock_alt_s": "shift_left", 157 | "capslock_f": "right", 158 | "capslock_alt_f": "shift_right", 159 | "capslock_d": "down", 160 | "capslock_alt_d": "shift_down", 161 | "ctrl_8": "SimulateClickDown", 162 | "ctrl_shift_alt_m": "MaxMinWindow", 163 | "capslock_alt_c": "SaveSelectedFilePathToClipboard", 164 | "capslock_w": "SelectCurrentWord", 165 | "capslock_shift_w": ["home", "shift_end"], 166 | "capslock_tab": "IndentCurrentLine", 167 | "capslock_v": "shift_ins", 168 | "capslock_shift_v": "shift_6", 169 | "capslock_g": "ctrl_y", 170 | "capslock_r": "QuickEntry_ReplaceText_Menu_Click", 171 | "capslock_enter": "InsertLineBelow", 172 | "capslock_shift_enter": "InsertLineAbove", 173 | "capslock_backspace": ["home", "shift_end", "backspace"], 174 | "capslock_y": "shift_8", 175 | "capslock_alt_y": "shift_5", 176 | "capslock_u": "shift_1", 177 | "capslock_alt_u": "shift_2", 178 | "capslock_h": "left", 179 | "capslock_alt_h": "shift_left", 180 | "capslock_j": "down", 181 | "capslock_alt_j": "shift_down", 182 | "capslock_k": "up", 183 | "capslock_alt_k": "shift_up", 184 | "capslock_l": "right", 185 | "capslock_alt_l": "shift_right", 186 | "capslock_p": "shift_7", 187 | "capslock_alt_p": "shift_3", 188 | "capslock_i": "ctrl_left", 189 | "capslock_alt_i": "shift_ctrl_left", 190 | "capslock_o": "ctrl_right", 191 | "capslock_alt_o": "shift_ctrl_right", 192 | "capslock_9": "[", 193 | "capslock_alt_9": "{", 194 | "capslock_0": "]", 195 | "capslock_alt_0": "}", 196 | "capslock_n": "ctrl_bs", 197 | "capslock_alt_n": "shift_home_del", 198 | "capslock_m": "ctrl_del", 199 | "capslock_alt_m": "shift_end_del", 200 | "capslock_,": "home", 201 | "capslock_alt_,": "shift_home", 202 | "capslock_.": "end", 203 | "capslock_alt_.": "shift_end", 204 | "capslock_;": "_", 205 | "capslock_alt_;": "-", 206 | "capslock_'": "=", 207 | "capslock_alt_'": "shift_=", 208 | "capslock_/": "\\", 209 | "capslock_alt_/": "shift_\\" 210 | }, 211 | "custom": {} 212 | }, 213 | "enable_middle_mouse_button_in_idea": 0 214 | } 215 | -------------------------------------------------------------------------------- /app_data/conf_bak/conf.me.json: -------------------------------------------------------------------------------- 1 | { 2 | "File-Description": "你可以在custom块里覆盖所有的buildin(内置)配置或者直接修改buildin配置, 改了之后重启sux生效.You can override all the buildin conf at custom block or buildin conf itself, take effect after sux restart. ", 3 | "enable_clear_cache_on_exit": 0, 4 | "hide_tray_icons": [], 5 | "theme": { 6 | "dark": { 7 | "sux_width": 620, 8 | "sux_text_color": "ffffff", 9 | "sux_bg_color": "424242", 10 | "sux_border_shadow_type": "" 11 | }, 12 | "light": { 13 | "sux_width": 620, 14 | "sux_text_color": "000000", 15 | "sux_bg_color": "ececec", 16 | "sux_border_shadow_type": "modern_shadow_type" 17 | } 18 | }, 19 | "clipboard-plus": { 20 | "enable": 1, 21 | "ClipsTotalNum": 50 22 | }, 23 | "search-plus": { 24 | "enable": 1, 25 | "buildin": { 26 | "Default": { 27 | "space": [ 28 | "https://www.google.com.hk/search?safe=off&site=&source=hp&q=REPLACEME&btnG=Search&oq=&gs_l=" 29 | ] 30 | }, 31 | "Youdao": { 32 | "tab": ["https://www.youdao.com/w/REPLACEME"] 33 | }, 34 | "Baidu": { 35 | "a": ["https://www.baidu.com/#ie=UTF-8&wd=REPLACEME"] 36 | }, 37 | "Youtube": { 38 | "e": ["https://www.youtube.com/results?search_query=REPLACEME"] 39 | }, 40 | "Douban": { 41 | "d": ["https://www.douban.com/search?q=REPLACEME"] 42 | }, 43 | "Github": { 44 | "h": ["https://github.com/search?q=REPLACEME"] 45 | }, 46 | "Zhihu": { 47 | "z": ["https://www.zhihu.com/search?type=content&q=REPLACEME"] 48 | }, 49 | "Bilibili": { 50 | "b": ["search.bilibili.com/all?keyword=REPLACEME"] 51 | } 52 | }, 53 | "custom": {} 54 | }, 55 | "command": { 56 | "enable": 1, 57 | "buildin": { 58 | "cmd": "cmd.exe", 59 | "git": "C:\\Program Files\\Git\\bin\\bash.exe", 60 | "sux": "https://github.com/no5ix/sux", 61 | "sw": "StartSuxAhkWithWin", 62 | "rd": "ReloadSux" 63 | }, 64 | "custom": { 65 | } 66 | }, 67 | "replace-text": { 68 | "enable": 1, 69 | "buildin": { 70 | "h/": "http://", 71 | "hs/": "https://", 72 | "qc@": "@qq.com", 73 | "gc@": "@gmail.com", 74 | "16@": "@163.com", 75 | "//": "美国人一般用英语咋说: ", 76 | ",,": "英语纠错: " 77 | }, 78 | "custom": {} 79 | }, 80 | "hot-corner": { 81 | "action": { 82 | "LeftTopCorner": { 83 | "hover": "JumpToPrevTab" 84 | }, 85 | "RightTopCorner": { 86 | "hover": "JumpToNextTab" 87 | }, 88 | "LeftBottomCorner": { 89 | "hover": "Win" 90 | }, 91 | "RightBottomCorner": { 92 | "hover": "GotoPreApp" 93 | } 94 | } 95 | }, 96 | "hot-edge": { 97 | "enable": 1, 98 | "action": { 99 | "TopHalfLeftEdge": { 100 | "ctrl_8": "C:\\Program Files (x86)\\Netease\\CloudMusic\\cloudmusic.exe", 101 | "wheeldown": "GoBottom", 102 | "wheelup": "GoTop" 103 | }, 104 | "TopHalfRightEdge": { 105 | "ctrl_8": "OpenFileExplorer", 106 | "wheeldown": "PgDn", 107 | "wheelup": "PgUp" 108 | }, 109 | "BottomHalfLeftEdge": { 110 | "ctrl_8": "ReopenLastTab", 111 | "MButton": "OpenTaskView", 112 | "wheeldown": "GotoNextDesktop", 113 | "wheelup": "GotoPreDesktop" 114 | }, 115 | "BottomHalfRightEdge": { 116 | "ctrl_8": "RefreshTab", 117 | "MButton": "OpenTaskView", 118 | "wheeldown": "GotoNextDesktop", 119 | "wheelup": "GotoPreDesktop" 120 | }, 121 | "LeftHalfBottomEdge": { 122 | "ctrl_8": "OpenTaskView", 123 | "wheeldown": "VolumeDown", 124 | "wheelup": "VolumeUp", 125 | "MButton": "MoveCurrentWindowToMouseMonitor" 126 | }, 127 | "LeftHalfTopEdge": { 128 | "ctrl_8": "MoveWindowToLeftSide", 129 | "wheeldown": "VolumeDown", 130 | "wheelup": "VolumeUp", 131 | "MButton": "MoveWindowToLeftSide" 132 | }, 133 | "RightHalfTopEdge": { 134 | "ctrl_8": "MoveWindowToRightSide", 135 | "MButton": "MoveWindowToRightSide", 136 | "wheeldown": "PgDn", 137 | "wheelup": "PgUp" 138 | }, 139 | "RightHalfBottomEdge": { 140 | "ctrl_8": "OpenActionCenter", 141 | "MButton": "MoveCurrentWindowToMouseMonitor", 142 | "wheeldown": "PgDn", 143 | "wheelup": "PgUp" 144 | } 145 | } 146 | }, 147 | "third_screenshot_app": 1, 148 | "hotkey": { 149 | "enable": 1, 150 | "capslock_disable_exe_list": [], 151 | "buildin": { 152 | "capslock": "nil", 153 | "alt_space": "ShowSuxMenu", 154 | "capslock_z": "GetActiveWindowAhkClassName", 155 | "capslock_q": "ScreenShot", 156 | "ctrl_shift_alt_0": "ToggleNetEaseMusicAndSetSound30", 157 | "capslock_shift_q": "ScreenShotAndSuspend", 158 | "rshift": "SwitchInputMethodAndDeleteLeft", 159 | "wheeldown": "wheelup", 160 | "wheelup": "wheeldown", 161 | "doublehit_rwin": "SwapWinCtrlShiftAlt", 162 | "capslock_c": "ctrl_/", 163 | "capslock_s": "up", 164 | "capslock_shift_s": "down", 165 | "capslock_e": "Enter", 166 | "capslock_shift_e": "SwitchWindowAlwaysOnTop", 167 | "capslock_t": "QuickEntry_Translation_Menu_Click", 168 | "ctrl_9": "QuickEntry_Translation_Menu_Click", 169 | "capslock_f": "QuickEntry_Everything_Menu_Click", 170 | "capslock_shift_f": "ctrl_shift_End", 171 | "capslock_d": "Del", 172 | "capslock_shift_d": "BS", 173 | "capslock_shift_c": "SaveSelectedFilePathToClipboard", 174 | "ctrl_8": "SimulateClickDown", 175 | "ctrl_shift_alt_m": "MaxMinWindow", 176 | "capslock_w": "SelectCurrentWord", 177 | "capslock_shift_w": ["home", "shift_end"], 178 | "capslock_`": "SwitchCapsState", 179 | "capslock_tab": "IndentCurrentLine", 180 | "capslock_v": "shift_ins", 181 | "capslock_shift_v": "shift_6", 182 | "capslock_g": "ctrl_y", 183 | "capslock_r": "ReplaceTextSlashSlash", 184 | "capslock_shift_r": "ReplaceTextCommaComma", 185 | "capslock_backspace": ["home", "shift_end", "backspace"], 186 | "capslock_y": "shift_8", 187 | "capslock_shift_y": "shift_5", 188 | "capslock_u": "shift_1", 189 | "capslock_shift_u": "shift_2", 190 | "capslock_h": "left", 191 | "capslock_shift_h": "shift_left", 192 | "capslock_j": "down", 193 | "capslock_shift_j": "shift_down", 194 | "capslock_k": "up", 195 | "capslock_shift_k": "shift_up", 196 | "capslock_l": "right", 197 | "capslock_shift_l": "shift_right", 198 | "capslock_p": "shift_7", 199 | "capslock_shift_p": "shift_3", 200 | "capslock_i": "ctrl_left", 201 | "capslock_shift_i": "shift_ctrl_left", 202 | "capslock_o": "ctrl_right", 203 | "capslock_shift_o": "shift_ctrl_right", 204 | "capslock_9": "[", 205 | "capslock_shift_9": "{", 206 | "capslock_0": "]", 207 | "capslock_shift_0": "}", 208 | "capslock_n": "ctrl_bs", 209 | "capslock_shift_n": "shift_home_del", 210 | "capslock_m": "ctrl_del", 211 | "capslock_shift_m": "shift_end_del", 212 | "capslock_,": "home", 213 | "capslock_shift_,": "shift_home", 214 | "capslock_.": "end", 215 | "capslock_shift_.": "shift_end", 216 | "capslock_;": "_", 217 | "capslock_shift_;": "-", 218 | "capslock_'": "=", 219 | "capslock_shift_'": "shift_=", 220 | "capslock_/": "\\", 221 | "capslock_shift_/": "shift_\\" 222 | }, 223 | "custom": {} 224 | }, 225 | "enable_middle_mouse_button_in_idea": 0 226 | } 227 | 228 | -------------------------------------------------------------------------------- /app_data/ev_sup/Everything.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/Everything.exe -------------------------------------------------------------------------------- /app_data/ev_sup/Everything.lng: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/Everything.lng -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/Everything64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/Everything64.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/EverythingToolbar.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/EverythingToolbar.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/EverythingToolbar.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/EverythingToolbar.pdb -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/ItemTemplates/COMPACT_DETAILED.xaml: -------------------------------------------------------------------------------- 1 |  4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 26 | 32 | 38 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/ItemTemplates/Compact (detailed).xaml: -------------------------------------------------------------------------------- 1 |  4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 26 | 32 | 38 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/ItemTemplates/Compact.xaml: -------------------------------------------------------------------------------- 1 |  4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 24 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/ItemTemplates/NORMAL_DETAILED.xaml: -------------------------------------------------------------------------------- 1 |  4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 25 | 33 | 39 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/ItemTemplates/Normal (detailed).xaml: -------------------------------------------------------------------------------- 1 |  4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 25 | 33 | 39 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/ItemTemplates/Normal.xaml: -------------------------------------------------------------------------------- 1 |  4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 25 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/LICENSE: -------------------------------------------------------------------------------- 1 | EverythingToolbar 2 | 3 | MIT License 4 | 5 | Copyright (c) 2021 Stephan Rumswinkel 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | 25 | --- 26 | 27 | CSDeskBand 28 | 29 | MIT License 30 | 31 | Copyright (c) 2017 Brandon Chong 32 | 33 | Permission is hereby granted, free of charge, to any person obtaining a copy 34 | of this software and associated documentation files (the "Software"), to deal 35 | in the Software without restriction, including without limitation the rights 36 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 37 | copies of the Software, and to permit persons to whom the Software is 38 | furnished to do so, subject to the following conditions: 39 | 40 | The above copyright notice and this permission notice shall be included in all 41 | copies or substantial portions of the Software. 42 | 43 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 44 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 45 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 46 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 47 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 48 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 49 | SOFTWARE. 50 | 51 | --- 52 | 53 | Everything 54 | 55 | Copyright (C) 2020 David Carpenter 56 | 57 | Permission is hereby granted, free of charge, to any person obtaining a 58 | copy of this software and associated documentation files (the "Software"), 59 | to deal in the Software without restriction, including without limitation 60 | the rights to use, copy, modify, merge, publish, distribute, sublicense, 61 | and/or sell copies of the Software, and to permit persons to whom the 62 | Software is furnished to do so, subject to the following conditions: 63 | 64 | The above copyright notice and this permission notice shall be included in 65 | all copies or substantial portions of the Software. 66 | 67 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 68 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 69 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 70 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 71 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 72 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 73 | DEALINGS IN THE SOFTWARE. 74 | 75 | --- 76 | 77 | Perl-Compatible Regular Expressions 78 | 79 | Copyright (c) 1997-2012 University of Cambridge 80 | 81 | Redistribution and use in source and binary forms, with or without 82 | modification, are permitted provided that the following conditions are met: 83 | 84 | * Redistributions of source code must retain the above copyright notice, 85 | this list of conditions and the following disclaimer. 86 | 87 | * Redistributions in binary form must reproduce the above copyright 88 | notice, this list of conditions and the following disclaimer in the 89 | documentation and/or other materials provided with the distribution. 90 | 91 | * Neither the name of the University of Cambridge nor the names of its 92 | contributors may be used to endorse or promote products derived from 93 | this software without specific prior written permission. 94 | 95 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 96 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 97 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 98 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 99 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 100 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 101 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 102 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 103 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 104 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 105 | POSSIBILITY OF SUCH DAMAGE. 106 | 107 | --- 108 | 109 | NLog 110 | 111 | Copyright (c) 2004-2020 Jaroslaw Kowalski , Kim Christensen, Julian Verdurmen 112 | 113 | All rights reserved. 114 | 115 | Redistribution and use in source and binary forms, with or without 116 | modification, are permitted provided that the following conditions 117 | are met: 118 | 119 | * Redistributions of source code must retain the above copyright notice, 120 | this list of conditions and the following disclaimer. 121 | 122 | * Redistributions in binary form must reproduce the above copyright notice, 123 | this list of conditions and the following disclaimer in the documentation 124 | and/or other materials provided with the distribution. 125 | 126 | * Neither the name of Jaroslaw Kowalski nor the names of its 127 | contributors may be used to endorse or promote products derived from this 128 | software without specific prior written permission. 129 | 130 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 131 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 132 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 133 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 134 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 135 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 136 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 137 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 138 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 139 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 140 | THE POSSIBILITY OF SUCH DAMAGE. 141 | 142 | --- 143 | 144 | NHotkey 145 | 146 | Apache License 147 | Version 2.0, January 2004 148 | http://www.apache.org/licenses/ 149 | 150 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 151 | 152 | 1. Definitions. 153 | 154 | "License" shall mean the terms and conditions for use, reproduction, 155 | and distribution as defined by Sections 1 through 9 of this document. 156 | 157 | "Licensor" shall mean the copyright owner or entity authorized by 158 | the copyright owner that is granting the License. 159 | 160 | "Legal Entity" shall mean the union of the acting entity and all 161 | other entities that control, are controlled by, or are under common 162 | control with that entity. For the purposes of this definition, 163 | "control" means (i) the power, direct or indirect, to cause the 164 | direction or management of such entity, whether by contract or 165 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 166 | outstanding shares, or (iii) beneficial ownership of such entity. 167 | 168 | "You" (or "Your") shall mean an individual or Legal Entity 169 | exercising permissions granted by this License. 170 | 171 | "Source" form shall mean the preferred form for making modifications, 172 | including but not limited to software source code, documentation 173 | source, and configuration files. 174 | 175 | "Object" form shall mean any form resulting from mechanical 176 | transformation or translation of a Source form, including but 177 | not limited to compiled object code, generated documentation, 178 | and conversions to other media types. 179 | 180 | "Work" shall mean the work of authorship, whether in Source or 181 | Object form, made available under the License, as indicated by a 182 | copyright notice that is included in or attached to the work 183 | (an example is provided in the Appendix below). 184 | 185 | "Derivative Works" shall mean any work, whether in Source or Object 186 | form, that is based on (or derived from) the Work and for which the 187 | editorial revisions, annotations, elaborations, or other modifications 188 | represent, as a whole, an original work of authorship. For the purposes 189 | of this License, Derivative Works shall not include works that remain 190 | separable from, or merely link (or bind by name) to the interfaces of, 191 | the Work and Derivative Works thereof. 192 | 193 | "Contribution" shall mean any work of authorship, including 194 | the original version of the Work and any modifications or additions 195 | to that Work or Derivative Works thereof, that is intentionally 196 | submitted to Licensor for inclusion in the Work by the copyright owner 197 | or by an individual or Legal Entity authorized to submit on behalf of 198 | the copyright owner. For the purposes of this definition, "submitted" 199 | means any form of electronic, verbal, or written communication sent 200 | to the Licensor or its representatives, including but not limited to 201 | communication on electronic mailing lists, source code control systems, 202 | and issue tracking systems that are managed by, or on behalf of, the 203 | Licensor for the purpose of discussing and improving the Work, but 204 | excluding communication that is conspicuously marked or otherwise 205 | designated in writing by the copyright owner as "Not a Contribution." 206 | 207 | "Contributor" shall mean Licensor and any individual or Legal Entity 208 | on behalf of whom a Contribution has been received by Licensor and 209 | subsequently incorporated within the Work. 210 | 211 | 2. Grant of Copyright License. Subject to the terms and conditions of 212 | this License, each Contributor hereby grants to You a perpetual, 213 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 214 | copyright license to reproduce, prepare Derivative Works of, 215 | publicly display, publicly perform, sublicense, and distribute the 216 | Work and such Derivative Works in Source or Object form. 217 | 218 | 3. Grant of Patent License. Subject to the terms and conditions of 219 | this License, each Contributor hereby grants to You a perpetual, 220 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 221 | (except as stated in this section) patent license to make, have made, 222 | use, offer to sell, sell, import, and otherwise transfer the Work, 223 | where such license applies only to those patent claims licensable 224 | by such Contributor that are necessarily infringed by their 225 | Contribution(s) alone or by combination of their Contribution(s) 226 | with the Work to which such Contribution(s) was submitted. If You 227 | institute patent litigation against any entity (including a 228 | cross-claim or counterclaim in a lawsuit) alleging that the Work 229 | or a Contribution incorporated within the Work constitutes direct 230 | or contributory patent infringement, then any patent licenses 231 | granted to You under this License for that Work shall terminate 232 | as of the date such litigation is filed. 233 | 234 | 4. Redistribution. You may reproduce and distribute copies of the 235 | Work or Derivative Works thereof in any medium, with or without 236 | modifications, and in Source or Object form, provided that You 237 | meet the following conditions: 238 | 239 | (a) You must give any other recipients of the Work or 240 | Derivative Works a copy of this License; and 241 | 242 | (b) You must cause any modified files to carry prominent notices 243 | stating that You changed the files; and 244 | 245 | (c) You must retain, in the Source form of any Derivative Works 246 | that You distribute, all copyright, patent, trademark, and 247 | attribution notices from the Source form of the Work, 248 | excluding those notices that do not pertain to any part of 249 | the Derivative Works; and 250 | 251 | (d) If the Work includes a "NOTICE" text file as part of its 252 | distribution, then any Derivative Works that You distribute must 253 | include a readable copy of the attribution notices contained 254 | within such NOTICE file, excluding those notices that do not 255 | pertain to any part of the Derivative Works, in at least one 256 | of the following places: within a NOTICE text file distributed 257 | as part of the Derivative Works; within the Source form or 258 | documentation, if provided along with the Derivative Works; or, 259 | within a display generated by the Derivative Works, if and 260 | wherever such third-party notices normally appear. The contents 261 | of the NOTICE file are for informational purposes only and 262 | do not modify the License. You may add Your own attribution 263 | notices within Derivative Works that You distribute, alongside 264 | or as an addendum to the NOTICE text from the Work, provided 265 | that such additional attribution notices cannot be construed 266 | as modifying the License. 267 | 268 | You may add Your own copyright statement to Your modifications and 269 | may provide additional or different license terms and conditions 270 | for use, reproduction, or distribution of Your modifications, or 271 | for any such Derivative Works as a whole, provided Your use, 272 | reproduction, and distribution of the Work otherwise complies with 273 | the conditions stated in this License. 274 | 275 | 5. Submission of Contributions. Unless You explicitly state otherwise, 276 | any Contribution intentionally submitted for inclusion in the Work 277 | by You to the Licensor shall be under the terms and conditions of 278 | this License, without any additional terms or conditions. 279 | Notwithstanding the above, nothing herein shall supersede or modify 280 | the terms of any separate license agreement you may have executed 281 | with Licensor regarding such Contributions. 282 | 283 | 6. Trademarks. This License does not grant permission to use the trade 284 | names, trademarks, service marks, or product names of the Licensor, 285 | except as required for reasonable and customary use in describing the 286 | origin of the Work and reproducing the content of the NOTICE file. 287 | 288 | 7. Disclaimer of Warranty. Unless required by applicable law or 289 | agreed to in writing, Licensor provides the Work (and each 290 | Contributor provides its Contributions) on an "AS IS" BASIS, 291 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 292 | implied, including, without limitation, any warranties or conditions 293 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 294 | PARTICULAR PURPOSE. You are solely responsible for determining the 295 | appropriateness of using or redistributing the Work and assume any 296 | risks associated with Your exercise of permissions under this License. 297 | 298 | 8. Limitation of Liability. In no event and under no legal theory, 299 | whether in tort (including negligence), contract, or otherwise, 300 | unless required by applicable law (such as deliberate and grossly 301 | negligent acts) or agreed to in writing, shall any Contributor be 302 | liable to You for damages, including any direct, indirect, special, 303 | incidental, or consequential damages of any character arising as a 304 | result of this License or out of the use or inability to use the 305 | Work (including but not limited to damages for loss of goodwill, 306 | work stoppage, computer failure or malfunction, or any and all 307 | other commercial damages or losses), even if such Contributor 308 | has been advised of the possibility of such damages. 309 | 310 | 9. Accepting Warranty or Additional Liability. While redistributing 311 | the Work or Derivative Works thereof, You may choose to offer, 312 | and charge a fee for, acceptance of support, warranty, indemnity, 313 | or other liability obligations and/or rights consistent with this 314 | License. However, in accepting such obligations, You may act only 315 | on Your own behalf and on Your sole responsibility, not on behalf 316 | of any other Contributor, and only if You agree to indemnify, 317 | defend, and hold each Contributor harmless for any liability 318 | incurred by, or claims asserted against, such Contributor by reason 319 | of your accepting any such warranty or additional liability. 320 | 321 | END OF TERMS AND CONDITIONS 322 | 323 | APPENDIX: How to apply the Apache License to your work. 324 | 325 | To apply the Apache License to your work, attach the following 326 | boilerplate notice, with the fields enclosed by brackets "{}" 327 | replaced with your own identifying information. (Don't include 328 | the brackets!) The text should be enclosed in the appropriate 329 | comment syntax for the file format. We also recommend that a 330 | file or class name and description of purpose be included on the 331 | same "printed page" as the copyright notice for easier 332 | identification within third-party archives. 333 | 334 | Copyright {yyyy} {name of copyright owner} 335 | 336 | Licensed under the Apache License, Version 2.0 (the "License"); 337 | you may not use this file except in compliance with the License. 338 | You may obtain a copy of the License at 339 | 340 | http://www.apache.org/licenses/LICENSE-2.0 341 | 342 | Unless required by applicable law or agreed to in writing, software 343 | distributed under the License is distributed on an "AS IS" BASIS, 344 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 345 | See the License for the specific language governing permissions and 346 | limitations under the License. 347 | -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/Microsoft.Xaml.Behaviors.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/Microsoft.Xaml.Behaviors.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/Microsoft.Xaml.Behaviors.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/Microsoft.Xaml.Behaviors.pdb -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/NHotkey.Wpf.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/NHotkey.Wpf.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/NHotkey.Wpf.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/NHotkey.Wpf.pdb -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/NHotkey.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/NHotkey.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/NHotkey.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/NHotkey.pdb -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/NLog.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/NLog.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/README.md: -------------------------------------------------------------------------------- 1 | EverythingToolbar 2 | ================= 3 | 4 | [![build](https://github.com/stnkl/EverythingToolbar/workflows/build/badge.svg)](https://github.com/stnkl/EverythingToolbar/actions) 5 | [![Crowdin](https://badges.crowdin.net/everythingtoolbar/localized.svg)](https://crowdin.com/project/everythingtoolbar) 6 | [![MIT license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/stnkl/EverythingToolbar/blob/master/LICENSE) 7 | [![Downloads](https://img.shields.io/github/downloads/stnkl/EverythingToolbar/total?color=blue)](https://github.com/stnkl/EverythingToolbar/releases/latest) 8 | 9 | [Everything](https://www.voidtools.com/) integration for the Windows taskbar. 10 | 11 | Features 12 | -------- 13 | 14 | - Instant search results using [Everything](https://www.voidtools.com/) 15 | - Quick navigation via keyboard shortcuts 16 | - Light and dark theme (or custom themes) 17 | - Customizable *open with* commands 18 | - Rules for opening files 19 | - Uses filters defined within Everything 20 | 21 | Demo 22 | ---- 23 | 24 | ![demo](https://user-images.githubusercontent.com/17520641/102723553-04d88f00-4309-11eb-834f-d20c1ce14a67.gif) 25 | 26 | Requirements 27 | ------------ 28 | 29 | - [.NET Framework](https://dotnet.microsoft.com/download/dotnet-framework) ≥ 4.7 ([how to check](https://user-images.githubusercontent.com/14129585/104021832-ff36e080-5206-11eb-9f5f-10e4381992f9.jpg)) 30 | - [Everything](https://www.voidtools.com/) ≥ 1.4.1 must be running (lite version not supported) 31 | - High DPI support requires at least Windows 10 Creators Update. 32 | 33 | Install 34 | ------- 35 | - Make sure [Everything](https://www.voidtools.com) is installed and running 36 | - Install EverythingToolbar using one of the following methods 37 | - Download the [EverythingToolbar](https://github.com/stnkl/EverythingToolbar/releases) installer 38 | - [Chocolatey](https://chocolatey.org/): `choco install everythingtoolbar` 39 | - [winget](https://github.com/microsoft/winget-cli/): `winget install everythingtoolbar` 40 | - Enable EverythingToolbar via the context menu of the taskbar 41 | - *Note: You will have to open the context menu twice as it doesn't show up the first time you open it.* 42 | - Adjust size and position after unlocking the taskbar ([demonstration video](https://user-images.githubusercontent.com/17520641/107118574-19a1bf80-6882-11eb-843a-7e854e5d0684.gif)) 43 | 44 | Build 45 | ----- 46 | 47 | - Open solution in Visual Studio with .NET Framework 4.7 support 48 | - Disable signing in project properties 49 | - Build the project (Windows Explorer will restart) 50 | - Install the toolbar by running `EverythingToolbar/tools/install.cmd` as admin 51 | 52 | Keyboard shortcuts 53 | ------------------ 54 | 55 | | Shortcut | Function | 56 | |-------------------------------------------------------|--------------------------------------| 57 | | / | Navigate search results | 58 | | Ctrl+/ | Navigate search history (if enabled) | 59 | | Return | Open | 60 | | Ctrl+Return/Click | Open path | 61 | | Shift+Return/Click | Open in Everything | 62 | | Alt+Return/Click | File properties | 63 | | Ctrl+Shift+Enter | Run as admin | 64 | | (Shift+)Tab | Cycle through filters | 65 | | Ctrl+0-9 | Select filter | 66 | | Ctrl+Space | Preview file in [QuickLook](https://github.com/QL-Win/QuickLook) | 67 | | Win+Alt+S | Focus search box (customizable) | 68 | 69 | Rules 70 | ----- 71 | 72 | Create custom *open with* commands by selecting Rules... from settings. By checking Automatically apply rules based on condition matching files/folders based on the type and regular expression field will execute the corresponding command when opened. 73 | 74 | Examples: 75 | 76 | | Name | Type | Regular Expression | Command | 77 | |--------------------------|------|------------------------------|-------------------------| 78 | | Open terminal here... | Any | | `cmd /K "cd %path%"` | 79 | | Total Commander (Left) | Any | | `totalcmd /O /L=%path%` | 80 | | Total Commander (Right) | Any | | `totalcmd /O /R=%path%` | 81 | | MSPaint | File | `.*\\PixelArt\\.*(bmp\|BMP)` | `mspaint %file%` | 82 | 83 | Leaving the regular expression field empty will never match. 84 | 85 | Customization 86 | ------------- 87 | 88 | - Edit an existing theme/item template or create a new one in the `Themes` / `ItemTemplates` folder 89 | - Restart Windows Explorer via the task manager 90 | - Select theme/item template from settings 91 | 92 | Contribute 93 | ---------- 94 | 95 | All kinds of contributions (questions, bug reports, pull requests) are welcome! Helping out with open issues is very much appreciated. As a basic rule, before filing issues, feature requests or anything else, take a look at the issues and check if it has already been reported by another user. If so, engage in the already existing discussion. 96 | 97 | You can also help by [translating EverythingToolbar](https://crowdin.com/project/everythingtoolbar). 98 | -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/Themes/Dark.xaml: -------------------------------------------------------------------------------- 1 |  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 | -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/Themes/Light.xaml: -------------------------------------------------------------------------------- 1 |  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 | -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/Themes/Medium.xaml: -------------------------------------------------------------------------------- 1 |  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 | -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/af/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/af/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/ar/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/ar/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/ca/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/ca/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/cs/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/cs/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/da/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/da/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/de/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/de/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/el/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/el/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/es/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/es/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/fi/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/fi/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/fr/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/fr/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/he/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/he/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/hu/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/hu/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/install.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | %SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /nologo /codebase "%~dp0EverythingToolbar.dll" 4 | 5 | pause 6 | -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/it/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/it/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/ja/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/ja/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/ko-KR/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/ko-KR/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/nl/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/nl/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/no/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/no/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/pl/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/pl/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/pt-BR/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/pt-BR/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/ro/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/ro/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/ru/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/ru/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/sr/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/sr/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/sv/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/sv/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/tr/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/tr/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/uk/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/uk/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/uninstall.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | %SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /nologo /unregister "%~dp0EverythingToolbar.dll" 4 | 5 | pause -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/vi/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/vi/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/ev_sup/EverythingToolbar/zh-Hans/EverythingToolbar.resources.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ev_sup/EverythingToolbar/zh-Hans/EverythingToolbar.resources.dll -------------------------------------------------------------------------------- /app_data/img/donate_alipay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/img/donate_alipay.png -------------------------------------------------------------------------------- /app_data/img/donate_wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/img/donate_wechat.png -------------------------------------------------------------------------------- /app_data/img/sux.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app_data/img/sux_default.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/img/sux_default.ico -------------------------------------------------------------------------------- /app_data/img/sux_disable.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/img/sux_disable.ico -------------------------------------------------------------------------------- /app_data/prscrn.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/prscrn.dll -------------------------------------------------------------------------------- /app_data/ss/Config/BuiltInShortcutConfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "builtInShortcutList": [ 3 | { 4 | "desc": "", 5 | "enable": true, 6 | "execOnPress": true, 7 | "id": 1, 8 | "name": "Close", 9 | "script": { 10 | "PinWindow": "pinwindow.close()", 11 | "ScreenShot": "shotview.close()" 12 | }, 13 | "shortcut": "" 14 | }, 15 | { 16 | "desc": "", 17 | "enable": true, 18 | "execOnPress": true, 19 | "id": 2, 20 | "name": "Copy", 21 | "script": { 22 | "PinWindow": "pinwindow.copy()", 23 | "ScreenShot": "shotview.copyImage()" 24 | }, 25 | "shortcut": "C" 26 | }, 27 | { 28 | "desc": "", 29 | "enable": true, 30 | "execOnPress": true, 31 | "id": 3, 32 | "name": "Save To File", 33 | "script": { 34 | "PinWindow": "pinwindow.saveToFile()", 35 | "ScreenShot": "shotview.saveImage(false)" 36 | }, 37 | "shortcut": "S" 38 | }, 39 | { 40 | "desc": "", 41 | "enable": true, 42 | "execOnPress": true, 43 | "id": 4, 44 | "name": "Quick Save", 45 | "script": { 46 | "PinWindow": "pinwindow.quickSave()", 47 | "ScreenShot": "shotview.saveImage(true)" 48 | }, 49 | "shortcut": "" 50 | }, 51 | { 52 | "desc": "", 53 | "enable": true, 54 | "execOnPress": true, 55 | "id": 59, 56 | "name": "Detect Text And Copy", 57 | "script": { 58 | "PinWindow": "pinwindow.copyOcrText()", 59 | "ScreenShot": "shotview.copyOcrText()" 60 | }, 61 | "shortcut": "" 62 | }, 63 | { 64 | "desc": "", 65 | "enable": true, 66 | "execOnPress": true, 67 | "id": 5, 68 | "name": "Undo Mark", 69 | "script": { 70 | "PinWindow": "pinwindow.undoMark()", 71 | "ScreenShot": "shotview.undoMark()" 72 | }, 73 | "shortcut": "" 74 | }, 75 | { 76 | "desc": "", 77 | "enable": true, 78 | "execOnPress": true, 79 | "id": 6, 80 | "name": "Redo Mark", 81 | "script": { 82 | "PinWindow": "pinwindow.redoMark()", 83 | "ScreenShot": "shotview.redoMark()" 84 | }, 85 | "shortcut": "" 86 | }, 87 | { 88 | "desc": "", 89 | "enable": true, 90 | "execOnPress": true, 91 | "id": 7, 92 | "name": "Clear All Mark", 93 | "script": { 94 | "PinWindow": "pinwindow.clearAllMark()", 95 | "ScreenShot": "shotview.clearAllMark()" 96 | }, 97 | "shortcut": "" 98 | }, 99 | { 100 | "desc": "", 101 | "enable": true, 102 | "execOnPress": true, 103 | "id": 8, 104 | "name": "Enable/Disable Mark Reoperate", 105 | "script": { 106 | "PinWindow": "pinwindow.setMarkItemReoperateEnable(!pinwindow.isMarkItemReoperateEnable())", 107 | "ScreenShot": "shotview.setMarkItemReoperateEnable(!shotview.isMarkItemReoperateEnable())" 108 | }, 109 | "shortcut": "" 110 | }, 111 | { 112 | "desc": "", 113 | "enable": true, 114 | "execOnPress": false, 115 | "id": 9, 116 | "name": "Show Magnifier/Auxiliary", 117 | "script": { 118 | "PinWindow": "pinwindow.setMagnifierVisible(!pinwindow.isMagnifierVisible())", 119 | "ScreenShot": "shotview.setShowAuxiliary(!shotview.isShowAuxiliary())" 120 | }, 121 | "shortcut": "" 122 | }, 123 | { 124 | "desc": "", 125 | "enable": true, 126 | "execOnPress": true, 127 | "id": 10, 128 | "name": "Copy Color", 129 | "script": { 130 | "PinWindow": "pinwindow.copyMagnifierColor()", 131 | "ScreenShot": "shotview.copyColor()" 132 | }, 133 | "shortcut": "" 134 | }, 135 | { 136 | "desc": "", 137 | "enable": true, 138 | "execOnPress": false, 139 | "id": 11, 140 | "name": "Switch Color Format", 141 | "script": { 142 | "PinWindow": "pinwindow.switchMagnifierColorFormat()", 143 | "ScreenShot": "shotview.switchColorFormat()" 144 | }, 145 | "shortcut": "" 146 | }, 147 | { 148 | "desc": "", 149 | "enable": true, 150 | "execOnPress": true, 151 | "id": 12, 152 | "name": "Move Cursor Up", 153 | "script": { 154 | "PinWindow": "pixpin.moveCursorBy(0, -1)", 155 | "ScreenShot": "pixpin.moveCursorBy(0, -1)" 156 | }, 157 | "shortcut": "" 158 | }, 159 | { 160 | "desc": "", 161 | "enable": true, 162 | "execOnPress": true, 163 | "id": 13, 164 | "name": "Move Cursor Down", 165 | "script": { 166 | "PinWindow": "pixpin.moveCursorBy(0, 1)", 167 | "ScreenShot": "pixpin.moveCursorBy(0, 1)" 168 | }, 169 | "shortcut": "" 170 | }, 171 | { 172 | "desc": "", 173 | "enable": true, 174 | "execOnPress": true, 175 | "id": 14, 176 | "name": "Move Cursor Left", 177 | "script": { 178 | "PinWindow": "pixpin.moveCursorBy(-1, 0)", 179 | "ScreenShot": "pixpin.moveCursorBy(-1, 0)" 180 | }, 181 | "shortcut": "" 182 | }, 183 | { 184 | "desc": "", 185 | "enable": true, 186 | "execOnPress": true, 187 | "id": 15, 188 | "name": "Move Cursor Right", 189 | "script": { 190 | "PinWindow": "pixpin.moveCursorBy(1, 0)", 191 | "ScreenShot": "pixpin.moveCursorBy(1, 0)" 192 | }, 193 | "shortcut": "" 194 | }, 195 | { 196 | "desc": "", 197 | "enable": true, 198 | "execOnPress": true, 199 | "id": 16, 200 | "name": "Pin Image", 201 | "script": { 202 | "ScreenShot": "shotview.pinImage()" 203 | }, 204 | "shortcut": "T" 205 | }, 206 | { 207 | "desc": "", 208 | "enable": true, 209 | "execOnPress": true, 210 | "id": 20, 211 | "name": "Select Screen Or All", 212 | "script": { 213 | "ScreenShot": "shotview.selectScreenOrAll()" 214 | }, 215 | "shortcut": "A" 216 | } 217 | ] 218 | } 219 | -------------------------------------------------------------------------------- /app_data/ss/Config/actionConfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "customActions": [ 3 | ], 4 | "systemActions": { 5 | "Close all pin window": { 6 | "ignoreProgramList": "", 7 | "isSystemAction": true, 8 | "script": "pixpin.closeAllPin()", 9 | "shortCut": "", 10 | "showOnTray": true, 11 | "title": "Close all pin window", 12 | "type": 256 13 | }, 14 | "Custom screenshot": { 15 | "ignoreProgramList": "", 16 | "isSystemAction": true, 17 | "script": "pixpin.openCustomScreenShot()", 18 | "shortCut": "", 19 | "showOnTray": true, 20 | "title": "Custom screenshot", 21 | "type": 256 22 | }, 23 | "Hide/Show all pin window": { 24 | "ignoreProgramList": "", 25 | "isSystemAction": true, 26 | "script": "pixpin.hideOrShowAllPin()", 27 | "shortCut": "Ctrl+Shift+Q", 28 | "showOnTray": true, 29 | "title": "Hide/Show all pin window", 30 | "type": 256 31 | }, 32 | "Open/Close mouse Penetration": { 33 | "ignoreProgramList": "", 34 | "isSystemAction": true, 35 | "script": "pixpin.trigMousePenetration()", 36 | "shortCut": "", 37 | "showOnTray": true, 38 | "title": "Open/Close mouse Penetration", 39 | "type": 256 40 | }, 41 | "Pin": { 42 | "ignoreProgramList": "", 43 | "isSystemAction": true, 44 | "script": "pixpin.pinFromCilpBoard()", 45 | "shortCut": "", 46 | "showOnTray": true, 47 | "title": "Pin", 48 | "type": 256 49 | }, 50 | "Restore last closed": { 51 | "ignoreProgramList": "", 52 | "isSystemAction": true, 53 | "script": "pixpin.restoreLastClosedPin()", 54 | "shortCut": "", 55 | "showOnTray": true, 56 | "title": "Restore last closed", 57 | "type": 256 58 | }, 59 | "Screenshot": { 60 | "ignoreProgramList": "", 61 | "isSystemAction": true, 62 | "script": "pixpin.screenShotAndEdit()", 63 | "shortCut": "Ctrl+Alt+Q", 64 | "showOnTray": true, 65 | "title": "Screenshot", 66 | "type": 256 67 | }, 68 | "Screenshot and copy": { 69 | "ignoreProgramList": "", 70 | "isSystemAction": true, 71 | "script": "pixpin.screenShotAndCopy()", 72 | "shortCut": "", 73 | "showOnTray": true, 74 | "title": "Screenshot and copy", 75 | "type": 256 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /app_data/ss/Config/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "Pin.ConfirmOnCloseByKey": false, 3 | "Pin.DefaultTransparency": 80, 4 | "Pin.MaxHistoryCount": 20, 5 | "Pin.MouseWheelScaleMode": 1, 6 | "Save.AutoSave": { 7 | "subConf": { 8 | "enable": true, 9 | "whenConflict": 1 10 | }, 11 | "value": "../temp_dir/cache/PixPin_$yyyy-MM-dd_HH-mm-ss$.png" 12 | }, 13 | "Screenshot.ConfirmOnCloseByKey": false, 14 | "Screenshot.showShortCutTips": false, 15 | "System.Update.AutoCheckUpdate": { 16 | "subConf": { 17 | "checkBeta": false 18 | }, 19 | "value": false 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app_data/ss/Config/markConfig.ini: -------------------------------------------------------------------------------- 1 | [General] 2 | Text.Blod=true 3 | Text.Italics=false 4 | Text.Outline=true 5 | Text.OutlineColor=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xff\xff\xff\xff\0\0) 6 | Text.Family=Arial 7 | Text.Size=12.07 8 | Color=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xf\xf\0\0\0\0) 9 | Geometry.PenWidth=4 10 | Geometry.PenStyle=1 11 | Geometry.Filling=false 12 | Geometry.PathMode=2 13 | Arrow.PenWidth=6 14 | Arrow.PenStyle=1 15 | Arrow.PathMode=6 16 | Arrow.LineShape=1 17 | BrokenLine.PenWidth=3 18 | BrokenLine.PenStyle=1 19 | BrokenLine.PathMode=4 20 | BrokenLine.LineShape=0 21 | Pencil.PenWidth=8 22 | Pencil.PathMode=1 23 | Marker.Color=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xff\xff\0\0\0\0) 24 | Marker.PenWidth=12 25 | Marker.Filling=true 26 | Marker.PathMode=2 27 | Marker.LineShape=0 28 | Mosaic.PenWidth=12 29 | Mosaic.Filling=true 30 | Mosaic.PathMode=1 31 | Mosaic.MosaicMode=0 32 | Mosaic.MosaicStrengthMin=2 33 | Mosaic.MosaicStrength=5.033333333333333 34 | Mosaic.MosaicStrengthMax=28 35 | Mosaic.BlurStrengthMin=5 36 | Mosaic.BlurStrength=10 37 | Mosaic.BlurStrengthMax=30 38 | Eraser.PenWidth=12 39 | Eraser.Filling=true 40 | Eraser.PathMode=1 41 | Serial.PenWidth=12 42 | Serial.Outline=false 43 | Serial.OutlineWidth=2 44 | Serial.OutlineColor=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xff\xff\xff\xff\0\0) 45 | Serial.TextColor=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xff\xff\xff\xff\0\0) 46 | Text.Color=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xf\xf\0\0\0\0) 47 | Geometry.Color=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xf\xf\0\0\0\0) 48 | Arrow.Color=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xf\xf\0\0\0\0) 49 | BrokenLine.Color=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xf\xf\0\0\0\0) 50 | Pencil.Color=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xf\xf\0\0\0\0) 51 | Mosaic.Color=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xf\xf\0\0\0\0) 52 | Eraser.Color=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xf\xf\0\0\0\0) 53 | Serial.Color=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xf\xf\0\0\0\0) 54 | -------------------------------------------------------------------------------- /app_data/ss/KoiAnimation.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/KoiAnimation.dll -------------------------------------------------------------------------------- /app_data/ss/OwlKeyLog.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/OwlKeyLog.dll -------------------------------------------------------------------------------- /app_data/ss/PandaConfiguration.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/PandaConfiguration.dll -------------------------------------------------------------------------------- /app_data/ss/PixPin.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/PixPin.exe -------------------------------------------------------------------------------- /app_data/ss/QIconfont.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/QIconfont.dll -------------------------------------------------------------------------------- /app_data/ss/QLongScreenShot.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/QLongScreenShot.dll -------------------------------------------------------------------------------- /app_data/ss/QScreenshot.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/QScreenshot.dll -------------------------------------------------------------------------------- /app_data/ss/QWindowNotify.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/QWindowNotify.dll -------------------------------------------------------------------------------- /app_data/ss/Qt5Core.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/Qt5Core.dll -------------------------------------------------------------------------------- /app_data/ss/Qt5Gui.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/Qt5Gui.dll -------------------------------------------------------------------------------- /app_data/ss/Qt5Network.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/Qt5Network.dll -------------------------------------------------------------------------------- /app_data/ss/Qt5Qml.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/Qt5Qml.dll -------------------------------------------------------------------------------- /app_data/ss/Qt5Sql.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/Qt5Sql.dll -------------------------------------------------------------------------------- /app_data/ss/Qt5Svg.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/Qt5Svg.dll -------------------------------------------------------------------------------- /app_data/ss/Qt5Widgets.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/Qt5Widgets.dll -------------------------------------------------------------------------------- /app_data/ss/Qt5WinExtras.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/Qt5WinExtras.dll -------------------------------------------------------------------------------- /app_data/ss/RobinLog.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/RobinLog.dll -------------------------------------------------------------------------------- /app_data/ss/SalmonActions.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/SalmonActions.dll -------------------------------------------------------------------------------- /app_data/ss/UiSpy.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/UiSpy.dll -------------------------------------------------------------------------------- /app_data/ss/concrt140.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/concrt140.dll -------------------------------------------------------------------------------- /app_data/ss/imageformats/qgif.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/imageformats/qgif.dll -------------------------------------------------------------------------------- /app_data/ss/imageformats/qicns.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/imageformats/qicns.dll -------------------------------------------------------------------------------- /app_data/ss/imageformats/qico.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/imageformats/qico.dll -------------------------------------------------------------------------------- /app_data/ss/imageformats/qjpeg.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/imageformats/qjpeg.dll -------------------------------------------------------------------------------- /app_data/ss/imageformats/qsvg.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/imageformats/qsvg.dll -------------------------------------------------------------------------------- /app_data/ss/imageformats/qtga.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/imageformats/qtga.dll -------------------------------------------------------------------------------- /app_data/ss/imageformats/qtiff.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/imageformats/qtiff.dll -------------------------------------------------------------------------------- /app_data/ss/imageformats/qwbmp.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/imageformats/qwbmp.dll -------------------------------------------------------------------------------- /app_data/ss/imageformats/qwebp.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/imageformats/qwebp.dll -------------------------------------------------------------------------------- /app_data/ss/language/zh-cn.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/language/zh-cn.qm -------------------------------------------------------------------------------- /app_data/ss/language_qt/qt_zh-cn.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/language_qt/qt_zh-cn.qm -------------------------------------------------------------------------------- /app_data/ss/libcrypto-1_1-x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/libcrypto-1_1-x64.dll -------------------------------------------------------------------------------- /app_data/ss/libssl-1_1-x64.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/libssl-1_1-x64.dll -------------------------------------------------------------------------------- /app_data/ss/model/detect.caffemodel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/model/detect.caffemodel -------------------------------------------------------------------------------- /app_data/ss/model/sr.caffemodel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/model/sr.caffemodel -------------------------------------------------------------------------------- /app_data/ss/model/sr.prototxt: -------------------------------------------------------------------------------- 1 | layer { 2 | name: "data" 3 | type: "Input" 4 | top: "data" 5 | input_param { 6 | shape { 7 | dim: 1 8 | dim: 1 9 | dim: 224 10 | dim: 224 11 | } 12 | } 13 | } 14 | layer { 15 | name: "conv0" 16 | type: "Convolution" 17 | bottom: "data" 18 | top: "conv0" 19 | param { 20 | lr_mult: 1.0 21 | decay_mult: 1.0 22 | } 23 | param { 24 | lr_mult: 1.0 25 | decay_mult: 0.0 26 | } 27 | convolution_param { 28 | num_output: 32 29 | bias_term: true 30 | pad: 1 31 | kernel_size: 3 32 | group: 1 33 | stride: 1 34 | weight_filler { 35 | type: "msra" 36 | } 37 | } 38 | } 39 | layer { 40 | name: "conv0/lrelu" 41 | type: "ReLU" 42 | bottom: "conv0" 43 | top: "conv0" 44 | relu_param { 45 | negative_slope: 0.05000000074505806 46 | } 47 | } 48 | layer { 49 | name: "db1/reduce" 50 | type: "Convolution" 51 | bottom: "conv0" 52 | top: "db1/reduce" 53 | param { 54 | lr_mult: 1.0 55 | decay_mult: 1.0 56 | } 57 | param { 58 | lr_mult: 1.0 59 | decay_mult: 0.0 60 | } 61 | convolution_param { 62 | num_output: 8 63 | bias_term: true 64 | pad: 0 65 | kernel_size: 1 66 | group: 1 67 | stride: 1 68 | weight_filler { 69 | type: "msra" 70 | } 71 | } 72 | } 73 | layer { 74 | name: "db1/reduce/lrelu" 75 | type: "ReLU" 76 | bottom: "db1/reduce" 77 | top: "db1/reduce" 78 | relu_param { 79 | negative_slope: 0.05000000074505806 80 | } 81 | } 82 | layer { 83 | name: "db1/3x3" 84 | type: "Convolution" 85 | bottom: "db1/reduce" 86 | top: "db1/3x3" 87 | param { 88 | lr_mult: 1.0 89 | decay_mult: 1.0 90 | } 91 | param { 92 | lr_mult: 1.0 93 | decay_mult: 0.0 94 | } 95 | convolution_param { 96 | num_output: 8 97 | bias_term: true 98 | pad: 1 99 | kernel_size: 3 100 | group: 8 101 | stride: 1 102 | weight_filler { 103 | type: "msra" 104 | } 105 | } 106 | } 107 | layer { 108 | name: "db1/3x3/lrelu" 109 | type: "ReLU" 110 | bottom: "db1/3x3" 111 | top: "db1/3x3" 112 | relu_param { 113 | negative_slope: 0.05000000074505806 114 | } 115 | } 116 | layer { 117 | name: "db1/1x1" 118 | type: "Convolution" 119 | bottom: "db1/3x3" 120 | top: "db1/1x1" 121 | param { 122 | lr_mult: 1.0 123 | decay_mult: 1.0 124 | } 125 | param { 126 | lr_mult: 1.0 127 | decay_mult: 0.0 128 | } 129 | convolution_param { 130 | num_output: 32 131 | bias_term: true 132 | pad: 0 133 | kernel_size: 1 134 | group: 1 135 | stride: 1 136 | weight_filler { 137 | type: "msra" 138 | } 139 | } 140 | } 141 | layer { 142 | name: "db1/1x1/lrelu" 143 | type: "ReLU" 144 | bottom: "db1/1x1" 145 | top: "db1/1x1" 146 | relu_param { 147 | negative_slope: 0.05000000074505806 148 | } 149 | } 150 | layer { 151 | name: "db1/concat" 152 | type: "Concat" 153 | bottom: "conv0" 154 | bottom: "db1/1x1" 155 | top: "db1/concat" 156 | concat_param { 157 | axis: 1 158 | } 159 | } 160 | layer { 161 | name: "db2/reduce" 162 | type: "Convolution" 163 | bottom: "db1/concat" 164 | top: "db2/reduce" 165 | param { 166 | lr_mult: 1.0 167 | decay_mult: 1.0 168 | } 169 | param { 170 | lr_mult: 1.0 171 | decay_mult: 0.0 172 | } 173 | convolution_param { 174 | num_output: 8 175 | bias_term: true 176 | pad: 0 177 | kernel_size: 1 178 | group: 1 179 | stride: 1 180 | weight_filler { 181 | type: "msra" 182 | } 183 | } 184 | } 185 | layer { 186 | name: "db2/reduce/lrelu" 187 | type: "ReLU" 188 | bottom: "db2/reduce" 189 | top: "db2/reduce" 190 | relu_param { 191 | negative_slope: 0.05000000074505806 192 | } 193 | } 194 | layer { 195 | name: "db2/3x3" 196 | type: "Convolution" 197 | bottom: "db2/reduce" 198 | top: "db2/3x3" 199 | param { 200 | lr_mult: 1.0 201 | decay_mult: 1.0 202 | } 203 | param { 204 | lr_mult: 1.0 205 | decay_mult: 0.0 206 | } 207 | convolution_param { 208 | num_output: 8 209 | bias_term: true 210 | pad: 1 211 | kernel_size: 3 212 | group: 8 213 | stride: 1 214 | weight_filler { 215 | type: "msra" 216 | } 217 | } 218 | } 219 | layer { 220 | name: "db2/3x3/lrelu" 221 | type: "ReLU" 222 | bottom: "db2/3x3" 223 | top: "db2/3x3" 224 | relu_param { 225 | negative_slope: 0.05000000074505806 226 | } 227 | } 228 | layer { 229 | name: "db2/1x1" 230 | type: "Convolution" 231 | bottom: "db2/3x3" 232 | top: "db2/1x1" 233 | param { 234 | lr_mult: 1.0 235 | decay_mult: 1.0 236 | } 237 | param { 238 | lr_mult: 1.0 239 | decay_mult: 0.0 240 | } 241 | convolution_param { 242 | num_output: 32 243 | bias_term: true 244 | pad: 0 245 | kernel_size: 1 246 | group: 1 247 | stride: 1 248 | weight_filler { 249 | type: "msra" 250 | } 251 | } 252 | } 253 | layer { 254 | name: "db2/1x1/lrelu" 255 | type: "ReLU" 256 | bottom: "db2/1x1" 257 | top: "db2/1x1" 258 | relu_param { 259 | negative_slope: 0.05000000074505806 260 | } 261 | } 262 | layer { 263 | name: "db2/concat" 264 | type: "Concat" 265 | bottom: "db1/concat" 266 | bottom: "db2/1x1" 267 | top: "db2/concat" 268 | concat_param { 269 | axis: 1 270 | } 271 | } 272 | layer { 273 | name: "upsample/reduce" 274 | type: "Convolution" 275 | bottom: "db2/concat" 276 | top: "upsample/reduce" 277 | param { 278 | lr_mult: 1.0 279 | decay_mult: 1.0 280 | } 281 | param { 282 | lr_mult: 1.0 283 | decay_mult: 0.0 284 | } 285 | convolution_param { 286 | num_output: 32 287 | bias_term: true 288 | pad: 0 289 | kernel_size: 1 290 | group: 1 291 | stride: 1 292 | weight_filler { 293 | type: "msra" 294 | } 295 | } 296 | } 297 | layer { 298 | name: "upsample/reduce/lrelu" 299 | type: "ReLU" 300 | bottom: "upsample/reduce" 301 | top: "upsample/reduce" 302 | relu_param { 303 | negative_slope: 0.05000000074505806 304 | } 305 | } 306 | layer { 307 | name: "upsample/deconv" 308 | type: "Deconvolution" 309 | bottom: "upsample/reduce" 310 | top: "upsample/deconv" 311 | param { 312 | lr_mult: 1.0 313 | decay_mult: 1.0 314 | } 315 | param { 316 | lr_mult: 1.0 317 | decay_mult: 0.0 318 | } 319 | convolution_param { 320 | num_output: 32 321 | bias_term: true 322 | pad: 1 323 | kernel_size: 3 324 | group: 32 325 | stride: 2 326 | weight_filler { 327 | type: "msra" 328 | } 329 | } 330 | } 331 | layer { 332 | name: "upsample/lrelu" 333 | type: "ReLU" 334 | bottom: "upsample/deconv" 335 | top: "upsample/deconv" 336 | relu_param { 337 | negative_slope: 0.05000000074505806 338 | } 339 | } 340 | layer { 341 | name: "upsample/rec" 342 | type: "Convolution" 343 | bottom: "upsample/deconv" 344 | top: "upsample/rec" 345 | param { 346 | lr_mult: 1.0 347 | decay_mult: 1.0 348 | } 349 | param { 350 | lr_mult: 1.0 351 | decay_mult: 0.0 352 | } 353 | convolution_param { 354 | num_output: 1 355 | bias_term: true 356 | pad: 0 357 | kernel_size: 1 358 | group: 1 359 | stride: 1 360 | weight_filler { 361 | type: "msra" 362 | } 363 | } 364 | } 365 | layer { 366 | name: "nearest" 367 | type: "Deconvolution" 368 | bottom: "data" 369 | top: "nearest" 370 | param { 371 | lr_mult: 0.0 372 | decay_mult: 0.0 373 | } 374 | convolution_param { 375 | num_output: 1 376 | bias_term: false 377 | pad: 0 378 | kernel_size: 2 379 | group: 1 380 | stride: 2 381 | weight_filler { 382 | type: "constant" 383 | value: 1.0 384 | } 385 | } 386 | } 387 | layer { 388 | name: "Crop1" 389 | type: "Crop" 390 | bottom: "nearest" 391 | bottom: "upsample/rec" 392 | top: "Crop1" 393 | } 394 | layer { 395 | name: "fc" 396 | type: "Eltwise" 397 | bottom: "Crop1" 398 | bottom: "upsample/rec" 399 | top: "fc" 400 | eltwise_param { 401 | operation: SUM 402 | } 403 | } 404 | -------------------------------------------------------------------------------- /app_data/ss/msvcp140.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/msvcp140.dll -------------------------------------------------------------------------------- /app_data/ss/msvcp140_1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/msvcp140_1.dll -------------------------------------------------------------------------------- /app_data/ss/pixpin.log: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/pixpin.log -------------------------------------------------------------------------------- /app_data/ss/platforms/qwindows.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/platforms/qwindows.dll -------------------------------------------------------------------------------- /app_data/ss/qgenericbearer.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/qgenericbearer.dll -------------------------------------------------------------------------------- /app_data/ss/qxtglobalshortcut.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/qxtglobalshortcut.dll -------------------------------------------------------------------------------- /app_data/ss/sqldrivers/qsqlite.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/sqldrivers/qsqlite.dll -------------------------------------------------------------------------------- /app_data/ss/styles/qwindowsvistastyle.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/styles/qwindowsvistastyle.dll -------------------------------------------------------------------------------- /app_data/ss/ucrtbase.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/ucrtbase.dll -------------------------------------------------------------------------------- /app_data/ss/unzip.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/unzip.exe -------------------------------------------------------------------------------- /app_data/ss/upgradeZIP.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | setlocal 4 | REM upgradeZIP.bat "D:\Program Files (x86)\PixPin" "C:\Users\wk_d_\Downloads\PixPin_1.3.0.0.zip" PixPin .\unzip.exe 5 | REM Check input parameters 6 | if "%~1"=="" ( 7 | echo Error: Please provide the program directory path as the first parameter. 8 | exit /b 9 | ) 10 | 11 | if "%~2"=="" ( 12 | echo Error: Please provide the ZIP file path as the second parameter. 13 | exit /b 14 | ) 15 | 16 | if "%~3"=="" ( 17 | echo Error: Please provide the software folder name as the third parameter. 18 | exit /b 19 | ) 20 | 21 | if "%~4"=="" ( 22 | echo Error: Please provide the unzip.exe file path as the fourth parameter. 23 | exit /b 24 | ) 25 | 26 | REM Set variables 27 | set "program_dir=%~1" 28 | set "zip_file=%~2" 29 | set "software_folder=%~3" 30 | set "unzip_exe=%~4" 31 | set "temp_dir=%program_dir%\unzip_temp" 32 | 33 | if exist "%temp_dir%" ( 34 | rmdir /s /q "%temp_dir%" 35 | ) 36 | 37 | REM Create temporary directory 38 | mkdir "%temp_dir%" 39 | echo "%temp_dir%" 40 | REM Copy unzip.exe to the temporary directory 41 | copy "%unzip_exe%" "%temp_dir%" 42 | 43 | REM Extract the ZIP file to the temporary directory 44 | cd "%temp_dir%" 45 | unzip.exe -o "%zip_file%" 46 | 47 | REM Enter the software folder 48 | cd "%temp_dir%\%software_folder%" 49 | 50 | REM Move all files to the program directory 51 | xcopy /y /e /i * "%program_dir%" 52 | 53 | REM Return to the original directory 54 | cd /d "%~dp0" 55 | 56 | REM Delete the temporary directory 57 | rmdir /s /q "%temp_dir%" 58 | 59 | echo Operation completed. 60 | 61 | endlocal -------------------------------------------------------------------------------- /app_data/ss/vcomp140.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/vcomp140.dll -------------------------------------------------------------------------------- /app_data/ss/vcruntime140.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/vcruntime140.dll -------------------------------------------------------------------------------- /app_data/ss/vcruntime140_1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/vcruntime140_1.dll -------------------------------------------------------------------------------- /app_data/ss/zip.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/no5ix/sux/e4b67e7f1f0208fdac36894480f6971eba4386b1/app_data/ss/zip.exe -------------------------------------------------------------------------------- /app_data/user_extension.js: -------------------------------------------------------------------------------- 1 | //所有方法为了和内置方法区别, 需要以 jsfunc_ 开头 2 | 3 | //返回当前日期 4 | function jsfunc_date(){ 5 | return (new Date()).toLocaleDateString(); 6 | } 7 | 8 | //返回当前时间 9 | function jsfunc_time(){ 10 | return (new Date()).toLocaleTimeString(); 11 | // return (new Date()).toLocaleDateString(); 12 | } 13 | 14 | //返回当前日期和时间 15 | function jsfunc_dateTime(){ 16 | return (new Date()).toLocaleString(); 17 | } -------------------------------------------------------------------------------- /app_data/ver.ini: -------------------------------------------------------------------------------- 1 | [sux] 2 | ver=0.2.18 3 | release_note_en=- The latest version contains bug fixes and performance improvements. 4 | release_note_cn=- 最新版本包含一些bug修复和性能提升. 5 | -------------------------------------------------------------------------------- /source/action.ahk: -------------------------------------------------------------------------------- 1 | #Include %A_ScriptDir%\source\common_const.ahk 2 | #Include %A_ScriptDir%\source\util.ahk 3 | #Include %A_ScriptDir%\source\js_eval.ahk 4 | #Include %A_ScriptDir%\source\quick_entry.ahk 5 | #Include %A_ScriptDir%\source\snip_plus.ahk 6 | #Include %A_ScriptDir%\source\tray_menu.ahk 7 | 8 | 9 | 10 | 11 | ShowSuxMenu() { 12 | QuickEntry.ShowQuickEntryMenu() 13 | } 14 | 15 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 16 | 17 | StartSuxAhkWithWin() { 18 | msg_str := "Would you like to start sux with windows? Yes(Enable) or No(Disable)" 19 | MsgBox, 3,, %msg_str% 20 | IfMsgBox Cancel 21 | return 22 | 23 | Name_no_ext := "sux" 24 | Name := "sux.ahk" 25 | Dir = %A_ScriptDir% 26 | sux_ahk_file_path = %A_ScriptFullPath% 27 | 28 | IfExist, %A_Startup%\%Name_no_ext%.lnk 29 | { 30 | IfMsgBox No 31 | { 32 | FileDelete, %A_Startup%\%Name_no_ext%.lnk 33 | MsgBox, %Name% removed from the Startup folder. 34 | } 35 | else { 36 | MsgBox, %Name% already added to Startup folder for auto-launch with Windows. 37 | } 38 | } 39 | Else 40 | { 41 | IfMsgBox Yes 42 | { 43 | FileCreateShortcut, "%sux_ahk_file_path%" 44 | , %A_Startup%\%Name_no_ext%.lnk 45 | , %Dir% ; Line wrapped using line continuation 46 | MsgBox, %Name% added to Startup folder for auto-launch with Windows. 47 | } 48 | } 49 | } 50 | 51 | 52 | 53 | 54 | MoveWindowToLeftSide() { 55 | send, #{Left} 56 | } 57 | 58 | MoveWindowToRightSide() { 59 | send, #{Right} 60 | } 61 | 62 | OpenFileExplorer() { 63 | run explorer.exe 64 | } 65 | 66 | OpenActionCenter() { 67 | send, #a 68 | } 69 | 70 | CloseCurrentWindow() { 71 | send, !{F4} 72 | } 73 | 74 | GoTop() { 75 | send, ^{Home} 76 | } 77 | 78 | GoBottom() { 79 | send, ^{End} 80 | } 81 | 82 | GoBack() { 83 | send, !{Left} 84 | } 85 | 86 | GoForward() { 87 | send, !{Right} 88 | } 89 | 90 | LockPc() { 91 | send, #l 92 | } 93 | 94 | OpenTaskView() { 95 | send, #{Tab} 96 | } 97 | 98 | VolumeMute() { 99 | Send {volume_mute} 100 | } 101 | 102 | VolumeUp() { 103 | Send {volume_up} 104 | } 105 | 106 | VolumeDown() { 107 | Send {volume_down} 108 | } 109 | 110 | GotoNextDesktop() { 111 | send, ^#{Right} 112 | } 113 | 114 | GotoPreDesktop() { 115 | send, ^#{Left} 116 | } 117 | 118 | RefreshTab() { 119 | send, {F5} 120 | } 121 | 122 | ReopenLastTab() { 123 | SendPlay, ^+t 124 | } 125 | 126 | GotoPreApp() { 127 | send !{Tab} 128 | } 129 | 130 | JumpToPrevTab() { 131 | if (!IsMouseActiveWindowAtSameMonitor()) { 132 | ActivateWindowsUnderCursor() 133 | } 134 | Send {LControl Down}{LShift Down} 135 | Send, {Tab} 136 | Sleep, 111 137 | Send {LControl Up}{LShift Up} 138 | } 139 | 140 | JumpToNextTab() { 141 | if (!IsMouseActiveWindowAtSameMonitor()) { 142 | ActivateWindowsUnderCursor() 143 | } 144 | Send {LControl Down} 145 | Send, {Tab} 146 | Sleep, 111 147 | Send {LControl Up} 148 | } 149 | 150 | SwitchCapsState() { 151 | ; SetCapsLockState % !GetKeyState("CapsLock", "T") ; Toggles CapsLock to its opposite state. 152 | GetKeyState, CapsLockState, CapsLock, T ;| 153 | if CapsLockState = D ;| 154 | SetCapsLockState, AlwaysOff ;| 155 | else 156 | { 157 | SetCapsLockState, AlwaysOn 158 | } 159 | } 160 | 161 | 162 | SwitchInputMethodAndDeleteLeft() { 163 | global MULTI_HIT_DECORATOR 164 | global keyboard_double_click_timeout 165 | cur_key := StrReplace(A_ThisHotkey, MULTI_HIT_DECORATOR) 166 | ; cur_key := StrReplace(A_ThisHotkey, "~") 167 | if (A_PriorHotkey <> A_ThisHotkey or A_TimeSincePriorHotkey > keyboard_double_click_timeout) 168 | ; if (A_PriorHotkey != "~Alt" or A_TimeSincePriorHotkey > keyboard_double_click_timeout) 169 | { 170 | ; Too much time between presses, so this isn't a double-press. 171 | Send, ^{Space} 172 | ; tt(A_PriorKey) ; LAlt 173 | ; tt(A_ThisHotkey) ; ~alt 174 | ; tt(A_PriorHotkey) ; ~alt 175 | KeyWait, % cur_key ; Wait for the key to be released. 176 | ; KeyWait, % A_ThisHotkey ; Wait for the key to be released. 177 | ; KeyWait, %A_PriorHotkey% ; Wait for the key to be released. 178 | ; KeyWait, Alt ; Wait for the key to be released. 179 | ; tt(A_PriorKey) 180 | return 181 | } 182 | ; Send, ^{Space} 183 | Send, ^+{Left} 184 | ; Sleep, 66 185 | Send, {Del} 186 | return 187 | } 188 | 189 | 190 | MaxMinWindow() { 191 | ; ActivateWindowsUnderCursor() 192 | ; ; OutputVar is made blank if no matching window exists; otherwise, it is set to one of the following numbers: 193 | ; ; -1: The window is minimized (WinRestore can unminimize it). 194 | ; ; 1: The window is maximized (WinRestore can unmaximize it). 195 | ; ; 0: The window is neither minimized nor maximized. 196 | WinGet,S,MinMax,A 197 | if S=0 198 | WinMaximize, A 199 | else if S=1 200 | WinMinimize, A 201 | ; else if S=-1 202 | ; WinRestore, A 203 | } 204 | 205 | MaxWindow() { 206 | ; ActivateWindowsUnderCursor() 207 | ; WinGet,S,MinMax,A 208 | WinMaximize, A 209 | } 210 | 211 | MinWindow() { 212 | ; ActivateWindowsUnderCursor() 213 | ; WinGet,S,MinMax,A 214 | WinMinimize, A 215 | } 216 | 217 | ReloadSux() { 218 | tt("reloading sux ...") 219 | 220 | if (WinExist("ahk_class " . "AutoHotkeyGUI")) { 221 | ; m("Warning!! There are some ScreenShotAndSuspend Windows Opening! Do u wanna still Reload?") 222 | MsgBox, 0x44, % SuxCore.ProgramName, % lang("Warning!! There are some ScreenShotAndSuspend Windows Opening! Do u wanna still Reload?") 223 | IfMsgBox Yes 224 | { 225 | Reload 226 | } 227 | } else { 228 | Reload 229 | } 230 | } 231 | 232 | 233 | SelectCurrentWordAndCopy() { 234 | Send, ^{Left} 235 | Sleep, 66 236 | Send, ^+{Right} 237 | Sleep, 66 238 | Send, ^c 239 | } 240 | 241 | SelectCurrentLineAndCopy() { 242 | Send, {Home} 243 | Sleep, 66 244 | Send, +{End} 245 | Sleep, 66 246 | Send, ^c 247 | } 248 | 249 | InsertLineBelow() { 250 | Send, {End} 251 | Sleep, 66 252 | Send, {Enter} 253 | Sleep, 66 254 | Loop 8 255 | { 256 | Send, {WheelLeft} 257 | } 258 | } 259 | 260 | InsertLineAbove() { 261 | Send, {Home} 262 | Sleep, 66 263 | Send, {Enter} 264 | Sleep, 66 265 | Send, {Up} 266 | Sleep, 66 267 | Loop 8 268 | { 269 | Send, {WheelLeft} 270 | } 271 | } 272 | 273 | DeleteCurrentLine() { 274 | SelectCurrentLineAndCopy() 275 | Sleep, 66 276 | Send, {BackSpace} 277 | } 278 | 279 | ; SmartSelectWithSymbol() { 280 | ; symbol_map := {"'": "'", """": """", "(": ")", "[": "]", "{": "}", "<": ">"} 281 | ; max_step := 888 282 | ; cur_step := 0 283 | ; left_symbol := "" 284 | ; break_loop := 0 285 | 286 | ; walk_more_flag := 0 287 | 288 | ; Loop 289 | ; { 290 | ; cur_step += 1 291 | ; if (cur_step > max_step) { 292 | ; return 293 | ; } 294 | ; Send, +^{Left} 295 | ; ; Sleep, 66 296 | ; st := GetCurSelectedText() 297 | 298 | ; for k, v in symbol_map { 299 | ; if (Instr(st, k)) { 300 | ; left_symbol := k 301 | ; Send, {Left} 302 | 303 | ; Send, +{Right} 304 | ; cur_step -= 1 305 | ; if (GetCurSelectedText() != k) { 306 | ; walk_more_flag := 1 307 | ; Send, ^{Right} 308 | ; } 309 | ; while (cur_step > 0) { 310 | ; Send, +^{Right} 311 | ; cur_step -= 1 312 | ; } 313 | ; break_loop := 1 314 | ; break 315 | ; } 316 | ; } 317 | ; if (break_loop) 318 | ; break 319 | ; } 320 | 321 | ; right_symbol := symbol_map[left_symbol] 322 | ; Loop 323 | ; { 324 | ; cur_step += 1 325 | ; if (cur_step > max_step) { 326 | ; return 327 | ; } 328 | ; Send, +^{Right} 329 | ; ; Sleep, 66 330 | ; st := GetCurSelectedText() 331 | ; if (Instr(st, right_symbol,,2)) { 332 | ; if (walk_more_flag) 333 | ; Send, +^{Left} 334 | ; break 335 | ; } 336 | ; } 337 | ; } 338 | 339 | IndentCurrentLine() { 340 | Send, {Home} 341 | Sleep, 66 342 | Send, {Tab} 343 | } 344 | 345 | 346 | SaveSelectedFilePathToClipboard() { 347 | ClipboardChangeCmdMgr.disable_all_clip_change_func() 348 | ; Clipboard := "" 349 | SendInput, ^{insert} 350 | ClipWait, 0.1 351 | if(!ErrorLevel) { 352 | path := Clipboard 353 | ; Clipboard := "" 354 | ClipboardChangeCmdMgr.enable_all_clip_change_func() 355 | Clipboard := path 356 | } 357 | } 358 | 359 | SimulateClickDown() { 360 | fake_lb_down = 1 361 | Click Down 362 | Hotkey, RButton, SUB_TEMP_RBUTTON 363 | Hotkey, RButton, On 364 | } 365 | 366 | 367 | MoveCurrentWindowToMouseMonitor() { 368 | MoveWindowToMouseMonitor() 369 | } 370 | 371 | ToggleNetEaseMusicAndSetSound30() { 372 | SoundSet, 30 373 | Send, ^+!3 374 | } 375 | 376 | SendWait3Min() { 377 | PasteContent("发了哈, 3分钟左右阿拉丁会有流程喔, 如果我等下忙其他的去了没注意到阿拉丁有流程了, 你也可以阿拉丁找到对应流程点一波的呢, 辛苦啦~") 378 | } 379 | 380 | SendReviewApplyMsg() { 381 | PasteContent("求review一下这个哈") 382 | } 383 | 384 | SendAskTeseDataMerge() { 385 | PasteContent("好的呀, 包括特色服吗? 有server data要 merge 吗?") 386 | } 387 | 388 | ReplaceTextCommaComma() { 389 | send, {Home} 390 | Sleep, 66 391 | send, +{End} 392 | cst := GetCurSelectedText() 393 | 394 | if (!cst) { 395 | tt(lang("Please Select text and try again") . ".") 396 | return 397 | } 398 | ReplaceText(",," cst) 399 | } 400 | 401 | ReplaceTextSlashSlash() { 402 | send, {Home} 403 | Sleep, 66 404 | send, +{End} 405 | cst := GetCurSelectedText() 406 | 407 | if (!cst) { 408 | tt(lang("Please Select text and try again") . ".") 409 | return 410 | } 411 | ReplaceText("//" cst) 412 | } 413 | 414 | ScreenShot() { 415 | if (SuxCore.GetSuxCfg("third_screenshot_app", 0) == 2) { ;; trigger pixpin shortcut 416 | Send, ^!q 417 | } 418 | else if (SuxCore.GetSuxCfg("third_screenshot_app", 0) == 1){ 419 | SnipPlus.TryWechatScreenShot() 420 | } 421 | else { 422 | SnipPlus.AreaScreenShot() 423 | } 424 | } 425 | 426 | ScreenShotAndSuspend() { 427 | if (SuxCore.GetSuxCfg("third_screenshot_app", 0) == 2) { ;; trigger pixpin shortcut 428 | Send, ^!q 429 | } 430 | else if (SuxCore.GetSuxCfg("third_screenshot_app", 0) == 1){ 431 | SnipPlus.AreaScreenShotAndSuspend(0, 1) 432 | } 433 | else { 434 | SnipPlus.AreaScreenShotAndSuspend() 435 | } 436 | } 437 | 438 | SwapWinCtrlShiftAlt() { 439 | if (InStr(A_ThisHotkey, "#")) { 440 | cur_key := StrReplace(A_ThisHotkey, "#", "^") 441 | SendInput, % cur_key 442 | Send {LWin up} ;; 不晓得为何, 如果不加这一句就会导致win键没抬起来 443 | } 444 | 445 | TrayMenu.SetSwapWinCtrlShiftAlt() 446 | TrayMenu.update_tray_menu() 447 | tt(lang("Swap Win/Ctrl Shift/Alt (beta)") . ", SuxCore.CurrentSwapWinCtrlShiftAltSwitch == " . SuxCore.CurrentSwapWinCtrlShiftAltSwitch) 448 | } 449 | 450 | SelectCurrentWord() { 451 | send, +{Left} 452 | Sleep, 66 453 | st := GetCurSelectedText(111) 454 | first_char := SubStr(st, 1, 1) 455 | if (!RegExMatch(first_char, "[0-9a-zA-Z]") && !RegExMatch(first_char, "[^\x00-\xff]") && first_char != "_") { 456 | send, {Right} 457 | } 458 | else { 459 | send, {Right} ; 没有这一句的话, 如果初始光标在当前word的第二个字符后面的时候会有问题 460 | send, ^{Left} 461 | } 462 | sleep, 66 463 | send, ^+{Right} 464 | } 465 | 466 | SwitchWindowAlwaysOnTop() { 467 | ; MouseGetPos, MouseX, MouseY, MouseWin 468 | WinGet, ExStyle, ExStyle, A 469 | if (ExStyle & 0x8) { ; 0x8 is WS_EX_TOPMOST. 470 | WinSet AlwaysOnTop,Off, A ;; 不置顶 471 | WinSet, Transparent, 255, A ;; 不透明 472 | WinSet, ExStyle, -0x20, A ;; 不穿透 473 | tt(lang("Set the current window to not always on top")) 474 | } else { 475 | ; CancelSetWindowOnTop 476 | WinSet AlwaysOnTop,On, A ;; 置顶 477 | WinSet, Transparent, 222, A ;; 半透明 478 | WinSet, ExStyle, +0x20, A ;; 穿透 479 | tt(lang("Set the current window to always on top")) 480 | } 481 | } 482 | 483 | ;; 在 hotkey.capslock_disable_exe_list 里的软件内部会屏蔽单独敲击capslock键, 484 | ;; 避免如果capslock配成esc, 然后在微信里直接不小心按到了然后就关闭微信界面了的这种情况 485 | CheckDisableCapslockList() { 486 | if (SuxCore.GetSuxCfg("hotkey.buildin.capslock", 0) == 0) { 487 | return 0 488 | } 489 | for _index, exe_name in SuxCore.GetSuxCfg("hotkey.capslock_disable_exe_list", []) { 490 | if (WinActive("ahk_exe" exe_name)) { 491 | return 1 492 | } 493 | } 494 | return 0 495 | } 496 | 497 | 498 | 499 | CheckEnableMiddleMouseButtonInIdea() { 500 | return SuxCore.GetSuxCfg("enable_middle_mouse_button_in_idea", 0) && WinActive("ahk_exe idea64.exe") 501 | } 502 | 503 | 504 | SUB_TEMP_RBUTTON: 505 | ClickUpIfLbDown() 506 | MouseClick, Right 507 | Return 508 | 509 | 510 | #If SuxCore.CurrentSwapWinCtrlShiftAltSwitch == 1 511 | 512 | LCtrl::LWin 513 | LWin::LCtrl 514 | 515 | LShift::LAlt 516 | LAlt::LShift 517 | return 518 | 519 | 520 | #If CheckDisableCapslockList() 521 | ; #If WinActive("ahk_exe MyPopo.exe") or WinActive("ahk_exe WeChat.exe") 522 | ; #IfWinActive ahk_exe MyPopo.exe 523 | ; #IfWinActive ahk_exe WeChat.exe 524 | 525 | CapsLock:: 526 | return 527 | 528 | 529 | #If CheckEnableMiddleMouseButtonInIdea() 530 | ; #IfWinActive ahk_exe idea64.exe 531 | 532 | MButton:: 533 | ; MouseGetPos, StartVarX, StartVarY 534 | ; loop 535 | ; { 536 | ; sleep, 66 537 | ; MouseGetPos, CheckVarX, CheckVarY 538 | ; If ((StartVarX != CheckVarX) or (StartVarY != CheckVarY)) { 539 | ; ; tt("Y U MOVE MY MOUSE!?") 540 | ; Click, Down Middle 541 | ; sleep, 222 542 | ; Click, Up Middle 543 | ; return 544 | ; } 545 | ; else { 546 | ; break 547 | ; } 548 | ; } 549 | Click, 2 550 | Send, !+s 551 | return -------------------------------------------------------------------------------- /source/clipboard_plus.ahk: -------------------------------------------------------------------------------- 1 | ; ; Note: Save with encoding UTF-8 with BOM if possible. 2 | ; ; Notepad will save UTF-8 files with BOM automatically (even though it does not say so). 3 | ; ; Some editors however save without BOM, and then special characters look messed up in the AHK GUI. 4 | 5 | 6 | ; #Include, %A_ScriptDir%\source 7 | ; #Include, sux_core.ahk 8 | 9 | 10 | 11 | if(A_ScriptName=="clipboard_plus.ahk") { 12 | ExitApp 13 | } 14 | 15 | 16 | ; with this label, you can include this file on top of the file 17 | Goto, SUB_CLIPBOARD_PLUS_FILE_END_LABEL 18 | 19 | 20 | #Include %A_ScriptDir%\source\sux_core.ahk 21 | #Include %A_ScriptDir%\source\util.ahk 22 | 23 | 24 | 25 | class ClipboardPlus 26 | { 27 | static CLIPBOARD_TEXT_SUFFIX := "[text] " 28 | static CLIPBOARD_IMG_SUFFIX := "[img] " 29 | static CLIPBOARD_FILE_SUFFIX := "[file] " 30 | static CLIPBOARD_FILES_SUFFIX := "[files] " 31 | static CLIPBOARD_FOLDER_SUFFIX := "[folder] " 32 | static CLIPBOARD_FILES_DELIMITER := "|sux-clipboard-files-delimiter|" 33 | static ClipboardHistoryArr := [] 34 | static ClipsTotalNum = 35 | 36 | init() 37 | { 38 | ClipboardChangeCmdMgr.register_clip_change_func("Sub_ClipboardPlus_OnClipboardChange") 39 | this.ClipsTotalNum := SuxCore.GetSuxCfg("clipboard-plus.ClipsTotalNum", 50) 40 | } 41 | 42 | ShowAllClips() 43 | { 44 | clipboard_history_cnt := this.ClipboardHistoryArr.MaxIndex() 45 | Try 46 | { 47 | Menu, Clipborad_Plus_Menu, DeleteAll 48 | } 49 | Try 50 | { 51 | Menu, Clipborad_Plus_Menu_More, DeleteAll 52 | } 53 | if (clipboard_history_cnt >= 1) { 54 | global CLIPBOARD_PLUS_SHORTCUT_KEY_INDEX_ARR 55 | shortcut_cnt := CLIPBOARD_PLUS_SHORTCUT_KEY_INDEX_ARR.Count() 56 | Loop, % clipboard_history_cnt 57 | { 58 | idx := clipboard_history_cnt - A_Index + 1 59 | clip_text := this.ClipboardHistoryArr[idx][2] 60 | if (A_Index <= shortcut_cnt) { 61 | menu_shortcut_str := get_menu_shortcut_str(CLIPBOARD_PLUS_SHORTCUT_KEY_INDEX_ARR, A_Index, clip_text) 62 | ;; 要为菜单项名称的某个字母加下划线, 在这个字母前加一个 & 符号. 当菜单显示出来时, 此项可以通过按键盘上对应的按键来选中. 63 | Menu, Clipborad_Plus_Menu, Add, % menu_shortcut_str, Sub_ClipboardPlus_AllClips_Click 64 | ; Menu, Clipborad_Plus_Menu, Add, % clip_text, Sub_ClipboardPlus_AllClips_Click 65 | } 66 | Else { 67 | Menu, Clipborad_Plus_Menu_More, Add, % clip_text, Sub_ClipboardPlus_AllClips_MoreClick 68 | } 69 | } 70 | if (clipboard_history_cnt > shortcut_cnt) 71 | Menu, Clipborad_Plus_Menu, Add, % lang("More"), :Clipborad_Plus_Menu_More 72 | 73 | Menu, Clipborad_Plus_Menu, Add 74 | Menu, Clipborad_Plus_Menu, Add, % lang("Paste All") . "`t&v", Sub_Menu_ClipboardPlus_PasteAll 75 | Menu, Clipborad_Plus_Menu, Add, % lang("Delete All") . "`t&d", Sub_Menu_ClipboardPlus_DeleteAll 76 | 77 | Menu, QuickEntry_Menu, Add, % lang("Clipboard Plus") . "`t&v", :Clipborad_Plus_Menu 78 | } 79 | else { 80 | ; tt(lang("clipboard currently has no centent, please copy something..."), 2222) 81 | empty_menu_str := lang("clipboard currently has no centent, please copy something...") 82 | Menu, Clipborad_Plus_Menu, Add, % empty_menu_str, Clipborad_Plus_Sub_Nothing 83 | Menu, Clipborad_Plus_Menu, Disable, % empty_menu_str 84 | Menu, QuickEntry_Menu, Add, % lang("Clipboard Plus") . "`t&v", :Clipborad_Plus_Menu 85 | } 86 | 87 | 88 | ; Menu, Clipborad_Plus_Menu, Show 89 | } 90 | 91 | DeleteAllClips() 92 | { 93 | this.ClipboardHistoryArr := [] 94 | } 95 | 96 | IsClipPlusFile(pending_paste) 97 | { 98 | return Instr(pending_paste, lang(ClipboardPlus.CLIPBOARD_FILE_SUFFIX)) || Instr(pending_paste, lang(ClipboardPlus.CLIPBOARD_FILES_SUFFIX)) || Instr(pending_paste, lang(ClipboardPlus.CLIPBOARD_FOLDER_SUFFIX)) 99 | } 100 | 101 | IsClipPlusImg(pending_paste) 102 | { 103 | return Instr(pending_paste, lang(ClipboardPlus.CLIPBOARD_IMG_SUFFIX)) 104 | } 105 | 106 | PasteClipPlusContent(pending_paste) 107 | { 108 | if (ClipboardPlus.IsClipPlusFile(pending_paste)) { ;; 这里先判断 file, 因为有可能文件名里刚好有 [img] 标记 109 | pending_paste_file_path := StrSplit(pending_paste, ClipboardPlus.CLIPBOARD_FILES_DELIMITER) 110 | original_pending_paste_file_path := pending_paste_file_path[2] 111 | Loop, parse, original_pending_paste_file_path, `n, `r 112 | { 113 | if (FileExist(A_LoopField)) { 114 | PasteContent("FileToClipboard", A_LoopField) 115 | } 116 | else { 117 | PasteContent(A_LoopField) 118 | } 119 | Sleep, 88 120 | } 121 | } 122 | else if (ClipboardPlus.IsClipPlusImg(pending_paste)) { 123 | img_path := SuxCore._CACHE_DIR . pending_paste . ".png" 124 | if (!FileExist(img_path)) { 125 | hBM := StrReplace(pending_paste, lang(ClipboardPlus.CLIPBOARD_IMG_SUFFIX)) 126 | GDIP("Startup") 127 | SavePicture(hBM, img_path) 128 | GDIP("Shutdown") 129 | DllCall( "DeleteObject", "Ptr", hBM ) 130 | } 131 | if (FileExist(img_path)) { 132 | PasteContent("FileToClipboard", img_path) 133 | } 134 | else { 135 | PasteContent(pending_paste) 136 | } 137 | } 138 | else { 139 | pending_paste := StrReplace(pending_paste, lang(ClipboardPlus.CLIPBOARD_TEXT_SUFFIX)) 140 | PasteContent(pending_paste) 141 | } 142 | Sleep, 88 143 | } 144 | 145 | _Trim(str_ori, add_time := 1) 146 | { 147 | _trimed_str := Trim(str_ori, " `t`r`n") 148 | tabfind := InStr(_trimed_str, "`t") 149 | if (tabfind > 0) 150 | { 151 | _trimed_str := SubStr(_trimed_str, 1, tabfind -1) 152 | } 153 | if (_trimed_str == "") 154 | _trimed_str := "" 155 | ; Else if (SubStr(_trimed_str, 1, 1) != SubStr(str_ori, 1, 1)) 156 | ; _trimed_str := "_" _trimed_str 157 | if StrLen(_trimed_str) > 50 158 | _trimed_str := SubStr(_trimed_str, 1, 50) 159 | ; _trimed_str := _trimed_str "`t[" StrLen(str_ori) "]" 160 | 161 | ; final_str := "[" StrLen(str_ori) "]" 162 | final_str := "" 163 | if(add_time) 164 | { 165 | final_str := final_str "[" A_Hour ":" A_Min ":" A_Sec "]" 166 | } 167 | final_str := final_str . " " . _trimed_str 168 | Return % final_str 169 | } 170 | 171 | _AddArrClip(ByRef Arr, str) 172 | { 173 | trim_str := ClipboardPlus._Trim(str) 174 | if str != 175 | { 176 | Loop, % Arr.MaxIndex() 177 | { 178 | if (str == Arr[A_Index][1]) 179 | { 180 | Arr.Remove(A_Index) 181 | } 182 | } 183 | Arr.Insert([str, trim_str]) 184 | } 185 | } 186 | 187 | _RemoveArrClip(ByRef Arr, str) 188 | { 189 | Loop, % Arr.MaxIndex() 190 | { 191 | if (str == Arr[A_Index][1]) 192 | { 193 | Arr.Remove(A_Index) 194 | } 195 | } 196 | } 197 | } 198 | 199 | 200 | Clipborad_Plus_Sub_Nothing: 201 | Return 202 | 203 | 204 | Sub_Menu_ClipboardPlus_PasteAll: 205 | max_i := ClipboardPlus.ClipboardHistoryArr.MaxIndex() 206 | Loop, % max_i 207 | { 208 | pending_paste := ClipboardPlus.ClipboardHistoryArr[A_Index][1] 209 | if (A_Index != max_i && !ClipboardPlus.IsClipPlusFile(pending_paste) && !ClipboardPlus.IsClipPlusImg(pending_paste)) { 210 | pending_paste .= "`r`n" 211 | } 212 | Sleep, 88 213 | ClipboardPlus.PasteClipPlusContent(pending_paste) 214 | } 215 | Return 216 | 217 | 218 | Sub_Menu_ClipboardPlus_DeleteAll: 219 | ClipboardPlus.DeleteAllClips() 220 | Return 221 | 222 | 223 | Sub_ClipboardPlus_AllClips_Click: 224 | if (A_ThisMenuItemPos == 1) { 225 | SafePaste() 226 | return 227 | } 228 | idx := ClipboardPlus.ClipboardHistoryArr.MaxIndex() - A_ThisMenuItemPos + 1 229 | pending_paste := ClipboardPlus.ClipboardHistoryArr[idx][1] 230 | ClipboardPlus.PasteClipPlusContent(pending_paste) 231 | Return 232 | 233 | 234 | Sub_ClipboardPlus_AllClips_MoreClick: 235 | idx := ClipboardPlus.ClipboardHistoryArr.MaxIndex() - A_ThisMenuItemPos + 1 - CLIPBOARD_PLUS_SHORTCUT_KEY_INDEX_ARR.Count() 236 | pending_paste := ClipboardPlus.ClipboardHistoryArr[idx][1] 237 | ClipboardPlus.PasteClipPlusContent(pending_paste) 238 | Return 239 | 240 | 241 | Sub_ClipboardPlus_OnClipboardChange: 242 | if (A_EventInfo == 1) { 243 | if (Is_Clipboard_As_File()) { 244 | file_arr := StrSplit(Clipboard, "`r`n") 245 | if (file_arr.Count() == 1) { 246 | if (InStr(FileExist(file_arr[1]), "D")) 247 | pending_add_content := lang(ClipboardPlus.CLIPBOARD_FOLDER_SUFFIX) 248 | else 249 | pending_add_content := lang(ClipboardPlus.CLIPBOARD_FILE_SUFFIX) 250 | } 251 | else { 252 | pending_add_content := lang(ClipboardPlus.CLIPBOARD_FILES_SUFFIX) 253 | } 254 | pending_add_content .= GetFileNameFromFullPath(file_arr[1]) 255 | ; m(pending_add_content) 256 | for _i, _v in file_arr { 257 | if (_i <= 1) 258 | Continue 259 | ; m(_v) 260 | pending_add_content .= " & " . GetFileNameFromFullPath(_v) 261 | } 262 | pending_add_content .= " " . ClipboardPlus.CLIPBOARD_FILES_DELIMITER . Clipboard 263 | } 264 | else { 265 | pending_add_content := lang(ClipboardPlus.CLIPBOARD_TEXT_SUFFIX) . Clipboard 266 | } 267 | } 268 | else if (A_EventInfo == 2) { 269 | If (hBM := CB_hBMP_Get()) { 270 | pending_add_content := lang(ClipboardPlus.CLIPBOARD_IMG_SUFFIX) . hBM 271 | } 272 | else { 273 | pending_add_content := lang(ClipboardPlus.CLIPBOARD_TEXT_SUFFIX) . Clipboard 274 | } 275 | } 276 | ClipboardPlus._AddArrClip(ClipboardPlus.ClipboardHistoryArr, pending_add_content) 277 | while (ClipboardPlus.ClipsTotalNum > 0 && ClipboardPlus.ClipboardHistoryArr.MaxIndex() > ClipboardPlus.ClipsTotalNum) 278 | ClipboardPlus.ClipboardHistoryArr.Remove(1) 279 | Return 280 | 281 | 282 | 283 | ; ////////////////////////////////////////////////////////////////////////// 284 | SUB_CLIPBOARD_PLUS_FILE_END_LABEL: 285 | temp_cp := "blabla" -------------------------------------------------------------------------------- /source/common_const.ahk: -------------------------------------------------------------------------------- 1 | ; ; Note: Save with encoding UTF-8 with BOM if possible. 2 | ; ; Notepad will save UTF-8 files with BOM automatically (even though it does not say so). 3 | ; ; Some editors however save without BOM, and then special characters look messed up in the AHK GUI. 4 | 5 | 6 | 7 | LANGUAGE_CONF_MAP := {"Tips: ": "小技巧: " 8 | ,"Donate": "捐赠! 让作者更有动力给sux加新功能! ^_^" 9 | ,"after selecting text, this menu can automatically process it": "选择文本后,此菜单可以自动处理它" 10 | ,"clipboard currently has no centent, please copy something...": "剪切板里目前没内容, 请复制点东西再试..." 11 | ,"There is a new version sux, would you like to open sux official website to download the new sux?": "sux有新版本, 您要打开sux官网去下载新sux吗?" 12 | ," Click me to chekc it out!": " 点击我查看!" 13 | ,"This is the lastest version.": "这已经是最新版本." 14 | ,"Unable to connect to the sux official website.": "无法连接到sux官网." 15 | ,"Maybe need a proxy.": "可能需要使用代理." 16 | ,"More": "更多" 17 | ,"More Search": "更多搜索" 18 | ,"More Command": "更多指令" 19 | ,"Do you want to open it with your browser?": "是否要用浏览器打开sux官网查看?" 20 | ,"Double hit Alt to open search box, hit Esc to close.": "双击Alt打开搜索框, 按Esc来关闭" 21 | ,"sux limit mode auto disable not in full screen mode": "sux限制模式在非全屏时自动关闭" 22 | ,"sux limit mode auto enable in full screen mode": "sux限制模式在全屏时自动开启" 23 | ,"click img to make it transparent": "点击图片使其透明" 24 | ,"Auto": "自动" 25 | ,"Light": "明" 26 | ,"Dark": "暗" 27 | ,"space": "空格" 28 | ,"quit": "退出" 29 | ,"Disable Win10 Auto Update": "禁止Win10自动更新" 30 | ,"Auto Disable sux In Full Screen": "全屏下自动禁用sux" 31 | ,"Window Mover is useful for multi monitor users, `nit will automatically move the new window to the monitor where the mouse is": "窗口移动器对多显示器用户很有用, `n它将会自动移动新窗口到鼠标所在的显示器" 32 | ,"Window Mover": "窗口移动器" 33 | ,"Hot Corner": "触发角" 34 | ,"Feature Switch": "功能开关" 35 | ,"Theme": "主题" 36 | ,"About": "关于" 37 | ,"Help": "帮助" 38 | ,"Check Update": "检查更新" 39 | ,"A New Version v": "有新版本 v" 40 | ,"Start With Windows": "开机启动" 41 | ,"Check Updates On Startup": "启动时检查更新" 42 | ,"Set the current window to always on top": "设置当前窗口永久置顶" 43 | ,"Set the current window to not always on top": "设置当前窗口不要永久置顶" 44 | ,"Swap Win/Ctrl Shift/Alt (beta)": "交换 Win/Ctrl Shift/Alt (beta)" 45 | ,"Language": "语言" 46 | ,"Open sux Folder": "打开sux文件夹" 47 | ,"Edit Config File": "编辑配置文件" 48 | ,"Disable": "禁用" 49 | ,"Restart sux": "重启sux" 50 | ,"Exit": "退出" 51 | ,"Translate Text": "翻译" 52 | ,"Home Page": "主页" 53 | ,"Selected": "当前选中" 54 | ,"Copied": "当前复制" 55 | ,"Please Select text and try again": "请选中文本后重试" 56 | ,"No preset replacement words found": "没有找到预设的可替换的词句" 57 | ,"Nothing snipped": "没有截任何图" 58 | ,"Suspend": "悬浮" 59 | ,"Screen Shot && Suspend": "截图 && 贴图" 60 | ,"Screen Shot": "截图" 61 | ,"Suspend Screenshot": "贴图" 62 | ,"Paste All": "粘贴所有" 63 | ,"Delete All": "删除所有" 64 | ,"Can not separate words": "无法分割单词" 65 | ,"Transform Text": "文本变换" 66 | ,"Replace Text": "文本替换" 67 | ,"Clipboard Plus": "历史剪切板" 68 | ,"Lowercase": "小写" 69 | ,"Uppercase": "大写" 70 | ,"Command": "指令" 71 | ,"Default": "默认" 72 | ,"Google & Baidu": "谷歌 & 百度" 73 | ,"Google": "谷歌" 74 | ,"Baidu": "百度" 75 | ,"Bing": "必应" 76 | ,"Google Translate": "谷歌翻译" 77 | ,"Youdao": "有道" 78 | ,"Bilibili": "哔哩哔哩" 79 | ,"Jingdong": "京东" 80 | ,"Zhihu": "知乎" 81 | ,"Douban": "豆瓣" 82 | ,"Youku": "优酷" 83 | ,"Alipay": "支付宝" 84 | ,"Wechat": "微信" 85 | ,"New Release": "新版本" 86 | ,"What's new?": "新版特性:" 87 | ,"Download Page": "下载页" 88 | ,"Open GitHub to light up the little star!": "去GitHub点亮小星星!" 89 | ,"Open Zhihu to like sux!": "去知乎点赞!" 90 | ,"[text] ": "[文本] " 91 | ,"[img] ": "[图片] " 92 | ,"[file] ": "[文件] " 93 | ,"[files] ": "[多文件] " 94 | ,"[folder] ": "[文件夹] " 95 | ,"Click to go to the original page": "点击前往原网页" 96 | ,"Open link in browser": "在浏览器中打开链接" 97 | ,"Open link": "打开链接" 98 | ,"Related webpages": "相关网页" 99 | ,"please install Everything and set its path in conf.user.json": "请安装Everything并在conf.user.json里配置它的路径" 100 | ,"Welcome to sux, `nsux is an efficiency improvement tool that also has the following functions: `n`n- translate`n- history clipboard`n- screenshots`n- stickers`n- quick search similar to Listary / Alfred / Wox `n- MacOS-like firing angle`n- Screen edge trigger`n- Global custom shortcut keys for various operations`n- Text replacer`n- Text converter`n- Custom theme`n- Shortcut instructions `n- Customizable json configuration `n- ...`n": "欢迎使用 sux ,`nsux 是一款效率提升工具同时拥有以下功能 :`n`n- 翻译`n- 历史剪切板`n- 截图`n- 贴图`n- 类似 Listary / Alfred / Wox 的快捷搜索`n- 类似 MacOS 的触发角`n- 屏幕边缘触发器`n- 全局自定义快捷键实现各种操作`n- 文本替换器`n- 文本变换器`n- 自定义主题`n- 快捷指令`n- 可自定义的 json 配置`n- ...`n" 101 | ,"Try it: Move the mouse to the top half of the left edge of the screen and scroll the wheel, `n`n Effect: adjust the volume quickly": "尝试一下: 将鼠标移到屏幕左边缘上半部分并滚动滚轮, `n效果:快速调节音量" 102 | ,"Try it: press shift + space, and then press the shortcut key of any menu option, such as pressing the y key, `n`n Effect: open the shortcut menu, and then use Bing search": "尝试一下:按下 shift + 空格 , 然后按下任何菜单选项的快捷键, 比如按下 a 键, `n效果:打开快捷菜单, 然后使用百度搜索" 103 | ,"Try it: right-click on the sux icon in the tray, you can `n `n- check for updates`n- donate`n- change theme`n- change language`n- let sux start on boot`n- open configuration file`n- open Various function switches, such as trigger angle/window mover, etc. `n- ...": "尝试一下: 右击托盘的 sux 图标,你可以`n `n- 检查更新 `n- 捐赠 `n- 更换主题 `n- 更换语言 `n- 让 sux 开机启动 `n- 打开配置文件 `n- 打开各种功能开关, 如 触发角 / 窗口移动器 等 `n- ..." 104 | ,"Try it: Locate files and folders by name.": "尝试一下: 按名称查找文件和文件夹." 105 | ,"Open Everything conf help page now, then you can follow the tutorial": "现在打开Everything工具栏的帮助页, 然后你可以按照教程操作" 106 | ,"Feedback": "反馈"} 107 | 108 | 109 | global LIMIT_MODE := 0 110 | 111 | global fake_lb_down := 0 112 | 113 | global CornerEdgeOffset := 8 ; adjust tolerance value (pixels to corner) if desired 114 | 115 | global tick_detect_interval := 88 116 | 117 | ; ; millisecond, the smaller the value, the faster you have to double-click 118 | global keyboard_double_click_timeout := 222 119 | global keyboard_triple_click_timeout := 333 120 | global auto_destory_quick_entry_gui_period := -28222 ; millisecond 121 | 122 | global clipboard_old := "" 123 | global dont_restore_the_original_clipboard_this_time := 0 124 | global auto_restore_the_original_clipboard_period := -666 ; millisecond 125 | 126 | global tick_disable_win10_auto_interval := 66666 127 | 128 | global SEARCH_PLUS_SHORTCUT_KEY_INDEX_ARR := [" ", "`t", "q", "w", "e", "r", "t", "a", "s", "d", "f", "z", "x", "b", "y", "u", "i", "o", "p", "h", "k", "j", "l", "n", "m"] 129 | global SHORTCUT_KEY_INDEX_ARR := [" ", "`t", "q", "w", "r", "e", "t", "a", "s", "d", "f", "z", "x", "c", "v", "b", "y", "u", "i", "o", "p", "h", "k", "j", "l", "n", "m"] 130 | ; global SEARCH_PLUS_SHORTCUT_KEY_INDEX_ARR := [" ", "a", "s", "d", "z", "x", "q", "w", "", "b", "l", "t", "h", "j", "k", "u", "i", "o", "p", "n", "m"] 131 | global CLIPBOARD_PLUS_SHORTCUT_KEY_INDEX_ARR := ["a", " ", "`t", "q", "w", "e", "r", "s", "f", "z", "x", "c", "g", "b", "t"] 132 | global SHORTCUT_KEY_INDEX_ARR_LEFT := ["q", "w", "e", "r", "a", "s", "d", "f", "z", "x", "c", "v", "b", "g", "t"] 133 | global SHORTCUT_KEY_INDEX_ARR_LEFT_HAS_SPACE_TAB := [" ", "`t", "q", "w", "r", "e", "a", "s", "d", "f", "z", "x", "c", "v", "b", "g", "t"] 134 | global TRANSFORM_TEXT_SHORTCUT_KEY_INDEX_ARR := [" ", "`t", "|", "q", "w", "|", "e", "r", "a", "s", "|", "d", "f", "z", "x", "|", "c", "v", "b", "g", "t", "j", "k", "l"] 135 | global SHORTCUT_KEY_INDEX_ARR_RIGHT := ["h", "j", "k", "l", "y", "u", "i", "o", "p", "n", "m"] 136 | 137 | global INI_SET_CHECK_UPDATES_ON_STARTUP_SWITCH := "check-updates-on-startup-switch" 138 | global INI_WINDOW_MOVER_SWITCH := "window-mover-switch" 139 | global INI_DISABLE_WIN10_AUTO_UPDATE_SWITCH := "disable-win10-auto-update-switch" 140 | global INI_SWAP_WIN_CTRL_SHIFT_ALT := "swap-win-ctrl-shift-alt" 141 | global INI_LIMIT_MODE_IN_FULL_SCREEN := "limit-mode-in-full-screen" 142 | global INI_HOT_CORNER := "hot-corner" 143 | global INI_AUTORUN := "autorun" 144 | global INI_THEME := "theme" 145 | global INI_LANG := "lang" 146 | 147 | 148 | global TRANSFORM_TEXT_MAP := {1: "Uppercase" 149 | , 2: "Lowercase" 150 | , 3: "|" 151 | , 4: "AbCd" 152 | , 5: "abCd" 153 | , 6: "|" 154 | , 7: "AB_CB" 155 | , 8: "ab_cd" 156 | , 9: "Ab_Cd" 157 | , 10: "ab_Cd" 158 | , 11: "|" 159 | , 12: "AB-CD" 160 | , 13: "ab-cd" 161 | , 14: "Ab-Cd" 162 | , 15: "ab-Cd" 163 | , 16: "|" 164 | , 17: "AB CB" 165 | , 18: "ab cd" 166 | , 19: "Ab Cd"} 167 | 168 | 169 | OnClipboardChangeCmd := {} 170 | 171 | ; 记录快捷键与对应操作 172 | HOTKEY_REGISTER_MAP := {} 173 | 174 | ; 记录command与对应操作 175 | COMMAND_TITLE_2_ACTION_MAP := {} 176 | COMMAND_TITLE_LIST := [] 177 | 178 | ; 记录web-search与对应操作 179 | WEB_SEARCH_TITLE_2_URL_MAP := {} 180 | WEB_SEARCH_TITLE_LIST := [] 181 | 182 | ; 记录theme与对应操作 183 | THEME_CONF_REGISTER_MAP := {} 184 | 185 | ; 记录replace-string与对应操作 186 | STR_REPLACE_CONF_REGISTER_MAP := {} 187 | 188 | ; 记录应该隐藏的托盘图标 189 | HIDE_TRAY_ICON_LIST := [] 190 | -------------------------------------------------------------------------------- /source/js_eval.ahk: -------------------------------------------------------------------------------- 1 |  2 | class JsEval 3 | { 4 | static com_obj = 5 | static _JS_DIR := "app_data/" 6 | static user_ext_file := JsEval._JS_DIR . "user_extension.js" 7 | 8 | init() 9 | { 10 | JsEval.com_obj := ComObjCreate("HTMLfile") 11 | JsEval.FixIE(11) 12 | JsEval.load_script() 13 | } 14 | 15 | load_script() 16 | { 17 | if (FileExist(JsEval.user_ext_file)) 18 | { 19 | JsEval.com_obj.write("") 25 | } 26 | } 27 | 28 | eval(exp) 29 | { 30 | JsEval.load_script() 31 | exp := JsEval.escapeString(exp) 32 | JsEval.com_obj.write("") 33 | return inStr(cabbage:=JsEval.com_obj.body.innerText, "body") ? "ERROR" : cabbage 34 | } 35 | 36 | escapeString(string) 37 | { 38 | ;escape http://www.w3school.com.cn/js/js_special_characters.asp 39 | string:=regExReplace(string, "('|""|&|\\|\\n|\\r|\\t|\\b|\\f)", "\$1") 40 | ;replace all newline character to '\n' 41 | string:=regExReplace(string, "\R", "\n") 42 | return string 43 | } 44 | 45 | strSelected2Script(selText) 46 | { 47 | regex:="\R[ \t]*?\..+\(.*\)\s*$" 48 | matchFuncPos:=RegExMatch(selText, regex, funcMatch) 49 | if(matchFuncPos) 50 | { 51 | selText := SubStr(selText,1,matchFuncPos) 52 | selText := JsEval.escapeString(selText) 53 | selText := "'" . selText . "'" . RegExReplace(funcMatch, "(^\s*)|(\s*$)") 54 | } 55 | return selText 56 | } 57 | 58 | FixIE(Version=0, ExeName="") 59 | { 60 | static Key := "Software\Microsoft\Internet Explorer" 61 | . "\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION" 62 | , Versions := {7:7000, 8:8888, 9:9999, 10:10001, 11:11001} 63 | 64 | if Versions.HasKey(Version) 65 | Version := Versions[Version] 66 | if !ExeName 67 | { 68 | if A_IsCompiled 69 | ExeName := A_ScriptName 70 | else 71 | SplitPath, A_AhkPath, ExeName 72 | } 73 | RegRead, PreviousValue, HKCU, %Key%, %ExeName% 74 | ; msgbox, % PreviousValue . "#" . Version 75 | if (Version = "") 76 | RegDelete, HKCU, %Key%, %ExeName% 77 | else if(PreviousValue != Version) 78 | RegWrite, REG_DWORD, HKCU, %Key%, %ExeName%, %Version% 79 | 80 | ; msgbox, % Version 81 | return PreviousValue 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /source/quick_entry.ahk: -------------------------------------------------------------------------------- 1 | ; Note: Save with encoding UTF-8 with BOM if possible. 2 | ; Notepad will save UTF-8 files with BOM automatically (even though it does not say so). 3 | ; Some editors however save without BOM, and then special characters look messed up in the AHK GUI. 4 | 5 | ; Initialize variable to keep track of the state of the GUI 6 | ; global gui_state := closed 7 | 8 | 9 | if(A_ScriptName=="quick_entry.ahk") { 10 | ExitApp 11 | } 12 | 13 | 14 | ; trim_gui_user_input = "" 15 | current_selected_text = "" 16 | 17 | 18 | ; with this label, you can include this file on top of the file 19 | Goto, SUB_QUICK_ENTRY_FILE_END_LABEL 20 | 21 | #Include %A_ScriptDir%\source\common_const.ahk 22 | #Include %A_ScriptDir%\source\sux_core.ahk 23 | #Include %A_ScriptDir%\source\util.ahk 24 | #Include %A_ScriptDir%\source\snip_plus.ahk 25 | #Include %A_ScriptDir%\source\translate.ahk 26 | #Include %A_ScriptDir%\source\search_plus.ahk 27 | 28 | 29 | 30 | 31 | 32 | 33 | class QuickEntry { 34 | 35 | static command_menu_pos_offset := 0 36 | static screenshot_menu_pos_offset := 0 37 | 38 | init() { 39 | ; ; ; Esc一下, 不然第一次打开search_gui的阴影会有一个从淡到浓的bug 40 | ; Send, {Esc} 41 | 42 | global WEB_SEARCH_TITLE_LIST 43 | global SEARCH_PLUS_SHORTCUT_KEY_INDEX_ARR 44 | 45 | ws_cnt := WEB_SEARCH_TITLE_LIST.Count() 46 | sk_l_cnt := SEARCH_PLUS_SHORTCUT_KEY_INDEX_ARR.Count() 47 | dec_cnt := (ws_cnt > sk_l_cnt) ? sk_l_cnt+1 : ws_cnt ;; 因为有个"More Search", 所以是 sk_l_cnt+1 48 | dec_cnt += 1 ; 截图的菜单 和 search 之间有个分割线 49 | 50 | QuickEntry.screenshot_menu_pos_offset := dec_cnt 51 | 52 | ; dec_cnt += 1 ; 中间还有1个截图的菜单 53 | ; dec_cnt += 1 ; 中间还有1个贴图的菜单 54 | ; dec_cnt += 1 ; 1个分割线 55 | ; dec_cnt += 1 ; 1个Everything的菜单 56 | ; dec_cnt += 1 ; 1个翻译的菜单 57 | ; dec_cnt += 1 ; 1个替换文本的菜单 58 | dec_cnt += 1 ; 1个变换文本 59 | dec_cnt += 1 ; 1个历史剪切板的菜单 60 | QuickEntry.command_menu_pos_offset := dec_cnt 61 | } 62 | 63 | 64 | ShowQuickEntryMenu() { 65 | search_gui_destroy() 66 | 67 | try { 68 | Menu, QuickEntry_Menu, DeleteAll 69 | } 70 | try { 71 | Menu, QuickEntry_Search_Menu_More, DeleteAll 72 | } 73 | try { 74 | Menu, QuickEntry_Command_Menu, DeleteAll 75 | } 76 | try { 77 | Menu, QuickEntry_Command_Menu_More, DeleteAll 78 | } 79 | try { 80 | Menu, QuickEntry_TransformText_Detail_Menu, DeleteAll 81 | } 82 | 83 | global current_selected_text 84 | current_selected_text := GetCurSelectedText(66) 85 | if (current_selected_text) { 86 | tips_msg := lang("Selected") . ": " . SubStr(current_selected_text, 1, 11) . "..." 87 | Menu, QuickEntry_Menu, Add, % tips_msg, QuickEntry_Sub_Nothing 88 | ; ; 当填了 url 的时候 89 | ; if (IsRawUrl(current_selected_text)) { 90 | ; Menu, QuickEntry_Menu, Add, % lang("Open link in browser") . "`t&g", QuickEntry_Sub_Open_Selected_URL 91 | ; } 92 | Menu, QuickEntry_Menu, Disable, % tips_msg 93 | Menu, QuickEntry_Menu, Add 94 | } 95 | else { 96 | ; ; 当复制了 url 的时候 97 | ; if (IsRawUrl(Clipboard)) { 98 | ; tips_msg := lang("Copied") . ": " . SubStr(Clipboard, 1, 11) . "..." 99 | ; Menu, QuickEntry_Menu, Add, % tips_msg, QuickEntry_Sub_Nothing 100 | ; Menu, QuickEntry_Menu, Add, % lang("Open link in browser") . "`t&g", QuickEntry_Sub_Open_Copied_URL 101 | ; Menu, QuickEntry_Menu, Disable, % tips_msg 102 | ; Menu, QuickEntry_Menu, Add 103 | ; } 104 | } 105 | 106 | ; global WEB_SEARCH_TITLE_LIST 107 | ; global SEARCH_PLUS_SHORTCUT_KEY_INDEX_ARR 108 | ; shortcut_cnt_left := SEARCH_PLUS_SHORTCUT_KEY_INDEX_ARR.Count() 109 | ; for index, title in WEB_SEARCH_TITLE_LIST { 110 | ; if (index <= shortcut_cnt_left) { 111 | ; menu_shortcut_str := get_menu_shortcut_str(SEARCH_PLUS_SHORTCUT_KEY_INDEX_ARR, index, lang(title)) 112 | ; ;; 要为菜单项名称的某个字母加下划线, 在这个字母前加一个 & 符号. 当菜单显示出来时, 此项可以通过按键盘上对应的按键来选中. 113 | ; Menu, QuickEntry_Menu, Add, % menu_shortcut_str, QuickEntry_Search_Menu_Click 114 | ; } 115 | ; Else { 116 | ; Menu, QuickEntry_Search_Menu_More, Add, % lang(title), QuickEntry_Search_Menu_MoreClick 117 | ; } 118 | ; } 119 | ; if (WEB_SEARCH_TITLE_LIST.Count() > shortcut_cnt_left) 120 | ; Menu, QuickEntry_Menu, Add, % lang("More Search"), :QuickEntry_Search_Menu_More 121 | 122 | SearchPlus.AddSearchPlusSubMenu() 123 | 124 | ;; 改了下面这些记得改 init 方法里的 dec_cnt 相关逻辑 125 | ;;;;;; Screen Shot 126 | Menu, QuickEntry_Menu, Add ;; 加个分割线 127 | ; Menu, QuickEntry_Menu, Add, % lang("Screen Shot") . "`t&`t(" . lang("tab") . ")", QuickEntry_ScreenShot_Suspend_Menu_Click 128 | ; Menu, QuickEntry_Menu, Add, % lang("Suspend Screenshot") . "`t&s", QuickEntry_ScreenShot_Suspend_Menu_Click 129 | 130 | ; Menu, QuickEntry_Menu, Add ;; 加个分割线 131 | ; Menu, QuickEntry_Menu, Add, % lang("Everything") . "`t&e", QuickEntry_Everything_Menu_Click 132 | ; Menu, QuickEntry_Menu, Add, % lang("Translate Text") . "`t&f", QuickEntry_Translation_Menu_Click 133 | ; Menu, QuickEntry_Menu, Add, % lang("Replace Text") . "`t&r", QuickEntry_ReplaceText_Menu_Click 134 | 135 | ;;; clipboard_plus 136 | ClipboardPlus.ShowAllClips() 137 | 138 | ;;;;;; command 139 | global COMMAND_TITLE_LIST 140 | global SHORTCUT_KEY_INDEX_ARR 141 | cur_shortcut_cnt := SHORTCUT_KEY_INDEX_ARR.Count() 142 | for index, title in COMMAND_TITLE_LIST { 143 | if (index <= cur_shortcut_cnt) { 144 | menu_shortcut_str := get_menu_shortcut_str(SHORTCUT_KEY_INDEX_ARR, index, title) 145 | Menu, QuickEntry_Command_Menu, Add, % menu_shortcut_str, QuickEntry_Command_Menu_Click 146 | } 147 | Else { 148 | Menu, QuickEntry_Command_Menu_More, Add, % title, QuickEntry_Command_Menu_MoreClick 149 | } 150 | } 151 | Menu, QuickEntry_Menu, Add, % lang("Command") . "`t&c", :QuickEntry_Command_Menu 152 | if (COMMAND_TITLE_LIST.Count() > cur_shortcut_cnt) 153 | Menu, QuickEntry_Command_Menu, Add, % lang("More Command"), :QuickEntry_Command_Menu_More 154 | 155 | ;; transform text 156 | global TRANSFORM_TEXT_SHORTCUT_KEY_INDEX_ARR 157 | global TRANSFORM_TEXT_MAP 158 | for index, pattern in TRANSFORM_TEXT_MAP { 159 | if (pattern == "|") 160 | Menu, QuickEntry_TransformText_Detail_Menu, Add 161 | else { 162 | ; Menu, QuickEntry_TransformText_Detail_Menu, Add, % "&" . index . ".`t" . pattern, QuickEntry_TransformText_Detail_Menu_click 163 | menu_shortcut_str := get_menu_shortcut_str(TRANSFORM_TEXT_SHORTCUT_KEY_INDEX_ARR, index, lang(pattern)) 164 | Menu, QuickEntry_TransformText_Detail_Menu, Add, % menu_shortcut_str, QuickEntry_TransformText_Detail_Menu_click 165 | } 166 | } 167 | Menu, QuickEntry_Menu, Add, % lang("Transform Text") . "`t&t", :QuickEntry_TransformText_Detail_Menu 168 | 169 | ; 当 填了 或者 复制了 url 的时候 170 | if (IsRawUrl(current_selected_text) ) { 171 | tips_msg := " [" . SubStr(current_selected_text, 1, 16) . "...]" 172 | Menu, QuickEntry_Menu, Add, % lang("Open link") . tips_msg . "`t&g", QuickEntry_Sub_Open_Selected_URL 173 | } else { 174 | if (IsRawUrl(Clipboard)) { 175 | tips_msg := " [" . SubStr(Clipboard, 1, 16) . "...]" 176 | Menu, QuickEntry_Menu, Add, % lang("Open link") . tips_msg . "`t&g", QuickEntry_Sub_Open_Copied_URL 177 | } else { 178 | if (FileExist(Clipboard) != "") { ;; if it's a folder or a file 179 | tips_msg := " [" . SubStr(Clipboard, 1, 16) . "...]" 180 | Menu, QuickEntry_Menu, Add, % lang("Open folder") . tips_msg . "`t&g", QuickEntry_Sub_Open_Copied_folder 181 | } 182 | if (FileExist(current_selected_text) != "") { ;; if it's a folder or a file 183 | tips_msg := " [" . SubStr(current_selected_text, 1, 16) . "...]" 184 | Menu, QuickEntry_Menu, Add, % lang("Open folder") . tips_msg . "`t&g", QuickEntry_Sub_Open_Selected_folder 185 | } 186 | } 187 | } 188 | 189 | ;;; 190 | Menu, QuickEntry_Menu, Show 191 | } 192 | 193 | 194 | HandleCommand(command_title, cur_sel_text) 195 | { 196 | global COMMAND_TITLE_2_ACTION_MAP 197 | if (COMMAND_TITLE_2_ACTION_MAP.HasKey(command_title)) 198 | { 199 | if (command_title == "Everything" && cur_sel_text) { 200 | ;;; everything search 201 | everything_exe_path := COMMAND_TITLE_2_ACTION_MAP["Everything"] 202 | run, %everything_exe_path% 203 | WinWaitActive, ahk_exe Everything.exe, , 2.222 204 | if ErrorLevel 205 | MsgBox,0x10,% SuxCore.ProgramName, % lang("please install Everything and set its path in conf.user.json") . " ." 206 | else if (cur_sel_text) { 207 | ; Send, {Blind}{Text}%cur_sel_text% 208 | PasteContent(cur_sel_text) 209 | } 210 | ; m("xxd") 211 | return 212 | } 213 | 214 | 215 | USE_CURRENT_DIRECTORY_PATH_CMDs := {"cmd" : "C: && cd %UserProfile%\Desktop`n", "git" : "cd ~/Desktop`n"} 216 | use_cur_path := USE_CURRENT_DIRECTORY_PATH_CMDs.HasKey(command_title) 217 | if (IsFileExplorerActive()) 218 | { 219 | if (use_cur_path) { 220 | Send, !d 221 | final_cmd_str := StringJoin(" ", COMMAND_TITLE_2_ACTION_MAP[command_title]) 222 | Send, {Blind}{Text}%final_cmd_str% 223 | ; tt(final_cmd_str, 2222) 224 | Sleep, 66 225 | ; PasteContent(final_cmd_str) 226 | ; Sleep, 66 227 | Send, {Enter} 228 | return 229 | } 230 | } 231 | run(COMMAND_TITLE_2_ACTION_MAP[command_title]) 232 | if (IsDesktopActive() && use_cur_path) { 233 | file_path_str := COMMAND_TITLE_2_ACTION_MAP[command_title] ; just like: "C:\Program Files\Git\bin\bash.exe" 234 | ; m(file_path_str) 235 | ; RegExMatch(file_path_str, "([^<>\/\\|:""\*\?]+)\.\w+", file_name) ; file_name just like: "bash.exe"" 236 | file_name := GetFileNameFromFullPath(file_path_str) 237 | ; m(file_name) 238 | WinWaitActive, ahk_exe %file_name%,, 2222 239 | if !ErrorLevel { 240 | cd_user_desktop_cmd_input := USE_CURRENT_DIRECTORY_PATH_CMDs[command_title] 241 | Send, {Blind}{Text}%cd_user_desktop_cmd_input% 242 | ; PasteContent(cd_user_desktop_cmd_input) 243 | ; Send, {Enter} 244 | } 245 | } 246 | } 247 | } 248 | 249 | ResetCurrentSelectText() { 250 | global current_selected_text 251 | current_selected_text := "" 252 | } 253 | 254 | GetQuickEntrySelectedText() { 255 | global current_selected_text 256 | st := current_selected_text 257 | if (!st) { 258 | st := GetCurSelectedText() 259 | ; if (st) { 260 | ; Sleep, 222 261 | ; } 262 | } 263 | return st 264 | } 265 | 266 | } 267 | 268 | 269 | QuickEntry_Sub_Nothing: 270 | Return 271 | 272 | 273 | QuickEntry_Sub_Open_Selected_URL: 274 | ; 当填了url 的时候 275 | OpenUrlIfIsUrl(current_selected_text) 276 | Return 277 | 278 | 279 | QuickEntry_Sub_Open_Copied_URL: 280 | ; 当复制了url 的时候 281 | OpenUrlIfIsUrl(Clipboard) 282 | Return 283 | 284 | 285 | QuickEntry_Sub_Open_Selected_folder: 286 | AutoOpenFolderAndSelectFile(current_selected_text) 287 | Return 288 | 289 | 290 | QuickEntry_Sub_Open_Copied_folder: 291 | AutoOpenFolderAndSelectFile(Clipboard) 292 | Return 293 | 294 | 295 | QuickEntry_Search_Menu_Click: 296 | dec_cnt := current_selected_text ? 2 : 0 297 | ; ; 当填了 url 的时候 298 | ; if (IsRawUrl(current_selected_text) || IsRawUrl(Clipboard)) { 299 | ; dec_cnt := dec_cnt + 1 300 | ; } 301 | SearchPlus.cur_sel_search_title := WEB_SEARCH_TITLE_LIST[A_ThisMenuItemPos - dec_cnt] 302 | ; if current_selected_text 303 | ; SearchPlus.HandleSearch(current_selected_text) 304 | ; else 305 | SearchPlus.search_gui_spawn(current_selected_text) 306 | QuickEntry.ResetCurrentSelectText() 307 | Return 308 | 309 | QuickEntry_Search_Menu_MoreClick: 310 | SearchPlus.cur_sel_search_title := WEB_SEARCH_TITLE_LIST[SEARCH_PLUS_SHORTCUT_KEY_INDEX_ARR.Count() + A_ThisMenuItemPos] 311 | ; if current_selected_text 312 | ; SearchPlus.HandleSearch(current_selected_text) 313 | ; else 314 | SearchPlus.search_gui_spawn(current_selected_text) 315 | QuickEntry.ResetCurrentSelectText() 316 | Return 317 | 318 | 319 | QuickEntry_Command_Menu_Click: 320 | ; dec_cnt := (current_selected_text ? 2 : 0) + QuickEntry.command_menu_pos_offset 321 | ; ; 当填了 url 的时候 322 | ; if (IsRawUrl(current_selected_text) || IsRawUrl(Clipboard)) { 323 | ; dec_cnt = dec_cnt + 1 324 | ; } 325 | ; search_title := COMMAND_TITLE_LIST[A_ThisMenuItemPos - dec_cnt] 326 | search_title := COMMAND_TITLE_LIST[A_ThisMenuItemPos] 327 | QuickEntry.HandleCommand(search_title, current_selected_text) 328 | QuickEntry.ResetCurrentSelectText() 329 | Return 330 | 331 | 332 | QuickEntry_Command_Menu_MoreClick: 333 | search_title := COMMAND_TITLE_LIST[SHORTCUT_KEY_INDEX_ARR.Count() + A_ThisMenuItemPos] 334 | QuickEntry.HandleCommand(search_title, current_selected_text) 335 | QuickEntry.ResetCurrentSelectText() 336 | Return 337 | 338 | 339 | QuickEntry_ScreenShot_Suspend_Menu_Click: 340 | dec_cnt := (current_selected_text ? 2 : 0) + QuickEntry.screenshot_menu_pos_offset 341 | ; 当填了 url 的时候 342 | if (IsRawUrl(current_selected_text) || IsRawUrl(Clipboard)) { 343 | dec_cnt = dec_cnt + 1 344 | } 345 | if (A_ThisMenuItemPos - dec_cnt == 1) { 346 | SnipPlus.AreaScreenShot() 347 | } 348 | else { 349 | SnipPlus.AreaScreenShotAndSuspend() 350 | } 351 | QuickEntry.ResetCurrentSelectText() 352 | Return 353 | 354 | 355 | 356 | QuickEntry_Everything_Menu_Click: 357 | st := GetCurSelectedText() 358 | Send, #!s 359 | if (st) { 360 | Sleep, 666 361 | PasteContent(st) 362 | Send, ^a 363 | } 364 | QuickEntry.ResetCurrentSelectText() 365 | Return 366 | 367 | 368 | QuickEntry_Translation_Menu_Click: 369 | st := GetCurSelectedText() 370 | TranslateSeletedText(st) 371 | QuickEntry.ResetCurrentSelectText() 372 | Return 373 | 374 | 375 | QuickEntry_TransformText_Detail_Menu_click: 376 | st := QuickEntry.GetQuickEntrySelectedText() 377 | st := TransformText(st, A_ThisMenuItemPos) 378 | PasteContent(st) 379 | QuickEntry.ResetCurrentSelectText() 380 | Return 381 | 382 | 383 | ReplaceText(pending_replace_str="") 384 | { 385 | st := pending_replace_str 386 | if(pending_replace_str="") { 387 | st := GetCurSelectedText() 388 | if (!st) { 389 | send, {Home} 390 | Sleep, 66 391 | send, +{End} 392 | st := GetCurSelectedText() 393 | 394 | if (!st) { 395 | tt(lang("Please Select text and try again") . ".") 396 | return 397 | } 398 | } 399 | } 400 | 401 | global STR_REPLACE_CONF_REGISTER_MAP 402 | ; store the number of replacements that occurred (0 if none). 403 | replace_sum := 0 404 | for key, value in STR_REPLACE_CONF_REGISTER_MAP ; Enumeration is the recommended approach in most cases. 405 | { 406 | cur_replace_cnt := 0 407 | ; Using "Loop", indices must be consecutive numbers from 1 to the number 408 | ; of elements in the array (or they must be calculated within the loop). 409 | ; MsgBox % "Element number " . A_Index . " is " . Array[A_Index] 410 | ; Using "for", both the index (or "key") and its associated value 411 | ; are provided, and the index can be *any* value of your choosing. 412 | ; m(key "//" value) 413 | st := StrReplace(st, key, value, cur_replace_cnt) 414 | replace_sum += cur_replace_cnt 415 | } 416 | Sleep, 66 417 | if (replace_sum != 0) { 418 | PasteContent(st) 419 | } 420 | else { 421 | tt(lang("No preset replacement words found") . ".") 422 | Send, {Right} 423 | } 424 | QuickEntry.ResetCurrentSelectText() 425 | } 426 | 427 | QuickEntry_ReplaceText_Menu_Click: 428 | ReplaceText() 429 | Return 430 | 431 | 432 | 433 | ; ////////////////////////////////////////////////////////////////////////// 434 | SUB_QUICK_ENTRY_FILE_END_LABEL: 435 | temp_cws := "blabla" 436 | -------------------------------------------------------------------------------- /source/search_plus.ahk: -------------------------------------------------------------------------------- 1 |  2 | if(A_ScriptName=="search_plus.ahk") { 3 | ExitApp 4 | } 5 | 6 | 7 | is_gui_open = 0 8 | 9 | last_search_str = "" 10 | last_search_url = "" 11 | 12 | 13 | ; with this label, you can include this file on top of the file 14 | Goto, SUB_SEARCH_PLUS_FILE_END_LABEL 15 | #Include %A_ScriptDir%\source\common_const.ahk 16 | #Include %A_ScriptDir%\source\sux_core.ahk 17 | #Include %A_ScriptDir%\source\util.ahk 18 | 19 | 20 | 21 | class SearchPlus { 22 | 23 | static cur_sel_search_title := "" 24 | 25 | AddSearchPlusSubMenu() { 26 | global WEB_SEARCH_TITLE_LIST 27 | global SEARCH_PLUS_SHORTCUT_KEY_INDEX_ARR 28 | shortcut_cnt_left := SEARCH_PLUS_SHORTCUT_KEY_INDEX_ARR.Count() 29 | ; for index, title in WEB_SEARCH_TITLE_LIST { 30 | ; if (index <= shortcut_cnt_left) { 31 | ; menu_shortcut_str := get_menu_shortcut_str(SEARCH_PLUS_SHORTCUT_KEY_INDEX_ARR, index, lang(title)) 32 | ; ;; 要为菜单项名称的某个字母加下划线, 在这个字母前加一个 & 符号. 当菜单显示出来时, 此项可以通过按键盘上对应的按键来选中. 33 | ; Menu, QuickEntry_Menu, Add, % menu_shortcut_str, QuickEntry_Search_Menu_Click 34 | ; } 35 | ; Else { 36 | ; Menu, QuickEntry_Search_Menu_More, Add, % lang(title), QuickEntry_Search_Menu_MoreClick 37 | ; } 38 | ; } 39 | ; if (WEB_SEARCH_TITLE_LIST.Count() > shortcut_cnt_left) 40 | ; Menu, QuickEntry_Menu, Add, % lang("More Search"), :QuickEntry_Search_Menu_More 41 | 42 | global WEB_SEARCH_TITLE_2_URL_MAP 43 | for index, search_title in WEB_SEARCH_TITLE_LIST { 44 | for _shortcut_str, search_url_arr in WEB_SEARCH_TITLE_2_URL_MAP[search_title] { 45 | Menu, QuickEntry_Menu, Add, % gen_menu_str(_shortcut_str, lang(search_title)), QuickEntry_Search_Menu_Click 46 | } 47 | } 48 | } 49 | 50 | HandleSearch(search_str) { 51 | if (OpenUrlIfIsUrl(search_str)) { 52 | ; 当填了 url 的时候 53 | return 54 | } 55 | 56 | global WEB_SEARCH_TITLE_2_URL_MAP 57 | global last_search_str 58 | global last_search_url 59 | 60 | search_title := SearchPlus.cur_sel_search_title 61 | 62 | for _shortcut_str, search_url_arr in WEB_SEARCH_TITLE_2_URL_MAP[search_title] { 63 | for _i, search_url in search_url_arr { 64 | ;; 逻辑是: 65 | ;; 1. 如果用户没有填写 search_str , 那就直接去 search_url 的官网 66 | ;; 2. 如果这一次的 search_str 和上次一样, 67 | ;; - 如果这次搜索的待搜索网站的 search_url 与上次相同 , 那就直接去 search_url 的官网 68 | ;; - 否则正常搜索 69 | should_continue := 0 70 | if (search_str == "" || (search_str == last_search_str && search_url == last_search_url)) { 71 | if !InStr(search_url, "REPLACEME") { 72 | Run %search_url% 73 | should_continue := 1 74 | } else { 75 | ; domain_url just like: "https://www.google.com" 76 | ; 建议到 https://c.runoob.com/front-end/854 去测试这个正则 77 | RegExMatch(search_url, "((\w)+://)?(\w+(-)*(\.)?)+(:(\d)+)?", domain_url) 78 | if not IsStandardRawUrl(domain_url) 79 | domain_url := StringJoin("", ["http://", domain_url]*) 80 | Run %domain_url% 81 | should_continue := 1 82 | } 83 | } 84 | 85 | last_search_str := search_str 86 | last_search_url := search_url 87 | if (should_continue == 1) { 88 | Continue 89 | } 90 | safe_query := UriEncode(Trim(search_str)) 91 | StringReplace, search_final_url, search_url, REPLACEME, %safe_query% 92 | if not IsStandardRawUrl(search_final_url) 93 | search_final_url := StringJoin("", ["http://", search_final_url]*) 94 | Run, %search_final_url% 95 | 96 | Sleep, 88 ; 为了给浏览器开tab的时候可以几个tab挨在一起 97 | } 98 | } 99 | 100 | } 101 | 102 | 103 | ShadowBorder(handle) { 104 | DllCall("user32.dll\SetClassLongPtr", "ptr", handle, "int", -26, "ptr", DllCall("user32.dll\GetClassLongPtr", "ptr", handle, "int", -26, "uptr") | 0x20000) 105 | } 106 | 107 | FrameShadow(handle) { 108 | DllCall("dwmapi\DwmIsCompositionEnabled","IntP",_ISENABLED) ; Get if DWM Manager is Enabled 109 | if !_ISENABLED ; if DWM is not enabled, Make Basic Shadow 110 | DllCall("SetClassLong","UInt",handle,"Int",-26,"Int",DllCall("GetClassLong","UInt",handle,"Int",-26)|0x20000) 111 | else { 112 | VarSetCapacity(_MARGINS,16) 113 | NumPut(1,&_MARGINS,0,"UInt") 114 | NumPut(1,&_MARGINS,4,"UInt") 115 | NumPut(1,&_MARGINS,8,"UInt") 116 | NumPut(1,&_MARGINS,12,"UInt") 117 | DllCall("dwmapi\DwmSetWindowAttribute", "Ptr", handle, "UInt", 2, "Int*", 2, "UInt", 4) 118 | DllCall("dwmapi\DwmExtendFrameIntoClientArea", "Ptr", handle, "Ptr", &_MARGINS) 119 | } 120 | } 121 | 122 | 123 | search_gui_spawn(cur_sel_text) { 124 | ; search_gui_destroy() 125 | ; static hMyGUI = 126 | ; if (WinExist("ahk_id " hMyGUI)) { 127 | ; ; tt(hmyGUI) 128 | ; WinActivate, ahk_id %hMyGUI% 129 | ; Return 130 | ; } 131 | ; curr_select_text := GetCurSelectedText() 132 | ; if (StrLen(curr_select_text) >= 60 || str) 133 | ; curr_select_text := "" 134 | 135 | global is_gui_open 136 | ; m(is_gui_open) 137 | 138 | global THEME_CONF_REGISTER_MAP 139 | ; cur_theme_type := SuxCore.GetIniConfig("theme", SuxCore.Default_theme) 140 | cur_theme_type := SuxCore.current_real_theme 141 | cur_theme_info := THEME_CONF_REGISTER_MAP[cur_theme_type] 142 | 143 | xMidScrn := GetMouseMonitorMidX() 144 | xMidScrn -= cur_theme_info["sux_width"] / 2 145 | yScrnOffset := A_ScreenHeight / 4 146 | 147 | tt(lang(SearchPlus.cur_sel_search_title), 2222, xMidScrn, yScrnOffset-29) 148 | if (is_gui_open == 1) { 149 | return 150 | } 151 | 152 | is_gui_open = 1 153 | 154 | Gui, SearchGui_: New 155 | 156 | ; Gui, +AlwaysOnTop -SysMenu +ToolWindow -caption +Border 157 | Gui, SearchGui_: -SysMenu +ToolWindow -caption +hWndhMyGUI 158 | Gui, SearchGui_: Margin, 0, 0 159 | 160 | sux_bg_color := cur_theme_info["sux_bg_color"] 161 | Gui, SearchGui_: Color, %sux_bg_color%, %sux_bg_color% 162 | if (cur_theme_info["sux_border_shadow_type"] == "modern_shadow_type") { 163 | ; SearchPlus.ShadowBorder(hMyGUI) 164 | ; else 165 | SearchPlus.FrameShadow(hMyGUI) 166 | } 167 | 168 | Gui, SearchGui_: Font, s22, Segoe UI 169 | ; Gui, Font, s10, Segoe UI 170 | ; Gui, Add, Edit, %gui_control_options% vGuiUserInput gSub_HandleSearchGuiUserInput 171 | gui_control_options := "-WantReturn xm+6 ym+8 w" . cur_theme_info["sux_width"] . " c" . cur_theme_info["sux_text_color"] . " -E0x200" 172 | ; gui_control_options := "w" . cur_theme_info["sux_width"] . " c" . cur_theme_info["sux_text_color"] . " -E0x800000" 173 | 174 | ; Gui, Add, Edit, %gui_control_options% vGuiUserInput, %cur_sel_text% 175 | ; pre_input_str := cur_sel_text ? cur_sel_text : SearchPlus.cur_sel_search_title 176 | 177 | global last_search_str 178 | if (!cur_sel_text) { 179 | cur_sel_text := last_search_str 180 | } 181 | ; pre_input_str := cur_sel_text 182 | Gui, SearchGui_: Add, Edit, %gui_control_options% vGuiUserInput, % cur_sel_text 183 | ; Gui, Add, Edit, %gui_control_options% vGuiUserInput, %curr_select_text% 184 | ; Gui, Add, Edit, xm w620 ccBlack -E0x200 vGuiUserInput, %final_search_str% 185 | 186 | Gui, SearchGui_: Add, Button, x-10 y-10 w1 h1 +default gSub_HandleSearchGuiUserInput ; hidden button 187 | 188 | Gui, SearchGui_: Show, x%xMidScrn% y%yScrnOffset%, myGUI 189 | 190 | global auto_destory_quick_entry_gui_period 191 | ; gui_des := ObjBindMethod(this, "search_gui_destroy") ; 不建议用这个, 这个不会顶掉原先search_gui_destroy的timer的 192 | ; SetTimer, % gui_des, %auto_destory_gui_period% 193 | SetTimer, search_gui_destroy, %auto_destory_quick_entry_gui_period% 194 | return 195 | } 196 | 197 | HandleSearchGuiUserInput(gui_user_input) 198 | { 199 | trim_gui_user_input := Trim(gui_user_input) 200 | ; if !trim_gui_user_input 201 | ; { 202 | ; return 203 | ; } 204 | ; else 205 | ; { 206 | SearchPlus.HandleSearch(trim_gui_user_input) 207 | ; } 208 | } 209 | } 210 | 211 | 212 | ; Hide GUI 213 | search_gui_destroy(from_timer=1) { 214 | IfWinActive, ahk_exe AutoHotkey.exe ahk_class AutoHotkeyGUI 215 | { 216 | if (from_timer) { 217 | global auto_destory_quick_entry_gui_period 218 | SetTimer, search_gui_destroy, %auto_destory_quick_entry_gui_period% 219 | Return 220 | } 221 | } 222 | global is_gui_open 223 | is_gui_open = 0 224 | Gui, SearchGui_:Destroy 225 | } 226 | 227 | ; Automatically triggered on Escape key: 228 | SearchGui_GuiEscape: 229 | search_gui_destroy(0) 230 | return 231 | 232 | Sub_HandleSearchGuiUserInput: 233 | Gui, Submit, NoHide 234 | search_gui_destroy(0) 235 | SearchPlus.HandleSearchGuiUserInput(GuiUserInput) 236 | return 237 | 238 | 239 | 240 | ; ////////////////////////////////////////////////////////////////////////// 241 | SUB_SEARCH_PLUS_FILE_END_LABEL: 242 | temp_sp := "blabla" -------------------------------------------------------------------------------- /source/snip_plus.ahk: -------------------------------------------------------------------------------- 1 | ; ; Note: Save with encoding UTF-8 with BOM if possible. 2 | ; ; Notepad will save UTF-8 files with BOM automatically (even though it does not say so). 3 | ; ; Some editors however save without BOM, and then special characters look messed up in the AHK GUI. 4 | 5 | 6 | 7 | if(A_ScriptName=="snip_plus.ahk") { 8 | ExitApp 9 | } 10 | 11 | 12 | SnipSuspendScreenShotImage = 13 | 14 | ; with this label, you can include this file on top of the file 15 | Goto, SUB_SNIP_PLUS_FILE_END_LABEL 16 | 17 | #Include %A_ScriptDir%\source\sux_core.ahk 18 | #Include %A_ScriptDir%\source\util.ahk 19 | 20 | 21 | ; Screen Capture 22 | class SnipPlus 23 | { 24 | static old_clipboard_content = 25 | static temp_snip_img_index := 0 26 | static _TEMP_SNIP_IMG_PREFIX := "temp_snip_" 27 | 28 | static IMG_PATH_2_RATIO_MAP := {} ;; 截图路径: 截图长宽比例 29 | 30 | init() 31 | { 32 | 33 | } 34 | 35 | GetCurSnipImgPath() 36 | { 37 | Return SuxCore._CACHE_DIR . SnipPlus._TEMP_SNIP_IMG_PREFIX . SnipPlus.temp_snip_img_index . ".png" 38 | } 39 | 40 | AreaScreenShot() 41 | { 42 | prscrn_param = %A_ScriptDir%\app_data\prscrn.dll\PrScrn 43 | ; prscrn_param = %A_ScriptDir%\app_data\TXGYMailCamera.dll\CameraWindow 44 | ; prscrn_param = %A_ScriptDir%\app_data\PrScrn2.dll\PrScrn 45 | DllCall(prscrn_param) 46 | } 47 | 48 | TryWechatScreenShot() 49 | { 50 | Process, Exist, WeChat.exe ;; 判断wechat进程是否存在 51 | If ErrorLevel 52 | { 53 | ; MsgBox, The program is running. 54 | Send, ^+!q 55 | ; Sleep, 1666 ;; 给wechat截图启动一点时间 56 | 57 | ; GetActiveWindowAhkClassName(); ;; 拿微信截图的 ahk_class 58 | WaitWindowOpenAndClose("SnapshotWnd") ;; SnapshotWnd 是微信截图的ahk_class 59 | } 60 | Else 61 | { 62 | ; MsgBox, The program is not running. 63 | SnipPlus.AreaScreenShot() 64 | } 65 | 66 | ; if (WinExist("ahk_exe WeChat.exe")) { ;; 这个是判断wechat这个窗口是否存在, 并不是判断wechat进程是否存在 67 | ; Send, ^+!q 68 | ; } else { 69 | ; SnipPlus.AreaScreenShot() 70 | ; } 71 | } 72 | 73 | AreaScreenShotAndSuspend(with_menu=0, use_wechat=0) 74 | { 75 | ClipboardChangeCmdMgr.disable_all_clip_change_func() 76 | ; SnipPlus.old_clipboard_content := ClipboardAll 77 | ; Clipboard := "" 78 | 79 | if (use_wechat) { 80 | SnipPlus.TryWechatScreenShot() 81 | } else { 82 | SnipPlus.AreaScreenShot() 83 | } 84 | hBM := CB_hBMP_Get() 85 | 86 | ; Clipboard := SnipPlus.old_clipboard_content ; Restore the original clipboard. Note the use of Clipboard (not ClipboardAll). 87 | ; SnipPlus.old_clipboard_content := "" ; Free the memory in case the clipboard was very large. 88 | ClipboardChangeCmdMgr.enable_all_clip_change_func() 89 | 90 | If (hBM) { 91 | SnipPlus.temp_snip_img_index := A_Now 92 | img_path := SnipPlus.GetCurSnipImgPath() 93 | 94 | GDIP("Startup") 95 | SavePicture(hBM, img_path) 96 | GDIP("Shutdown") 97 | DllCall( "DeleteObject", "Ptr",hBM ) 98 | 99 | if (FileExist(img_path)) { 100 | if (with_menu) { 101 | try { 102 | Menu, SnipPlus_Menu, DeleteAll 103 | } 104 | Menu, SnipPlus_Menu, Add, % lang("Suspend"), Sub_SnipPlus_Menu_clik 105 | Menu, SnipPlus_Menu, Show 106 | } 107 | else { 108 | SnipPlus.SuspendLastScreenshot() 109 | } 110 | } 111 | else 112 | { 113 | ; tt(lang("Nothing snipped") . ".") 114 | } 115 | } 116 | 117 | ; Clipboard := clipboardOld ; Restore the original clipboard. Note the use of Clipboard (not ClipboardAll). 118 | ; clipboardOld := "" ; Free the memory in case the clipboard was very large. 119 | 120 | ; Clipboard := SnipPlus.old_clipboard_content ; Restore the original clipboard. Note the use of Clipboard (not ClipboardAll). 121 | ; SnipPlus.old_clipboard_content := "" ; Free the memory in case the clipboard was very large. 122 | } 123 | 124 | SuspendLastScreenshot() 125 | { 126 | ; if (FileExist(SnipPlus._TEMP_CLIPBOARD_CONTENT_FILE)) { 127 | ; FileGetSize, _old_temp_clip_file_size, % SnipPlus._TEMP_CLIPBOARD_CONTENT_FILE 128 | ; ; FileDelete, % SnipPlus._TEMP_CLIPBOARD_CONTENT_FILE 129 | ; } 130 | ; else { 131 | ; _old_temp_clip_file_size := 0 132 | ; } 133 | 134 | ; SnipPlus.is_clipboard_changed := 0 135 | ; clipboardOld := ClipboardAll 136 | ; Clipboard := "" 137 | ; SnipPlus.AreaScreenshot() 138 | ; Sleep, 222 139 | ; if (SnipPlus.is_clipboard_changed == 0) { 140 | ; tt("Nothing snipped.") 141 | ; Return 142 | ; } 143 | 144 | ; ; ; 如果 FileAppend的Text 为 %ClipboardAll% 或之前接受了 ClipboardAll 赋值的变量, 则用剪贴板的全部内容无条件覆盖 Filename(即不需要 FileDelete). 145 | ; ; ; 文件扩展名无关紧要. 很奇怪,经测试, 如果没有真的截图则_new_temp_clip_file_size会为一个较小的size, 也就是说没内容写入文件 146 | ; FileAppend, %ClipboardAll%, % SnipPlus._TEMP_CLIPBOARD_CONTENT_FILE 147 | ; FileGetSize, _new_temp_clip_file_size, % SnipPlus._TEMP_CLIPBOARD_CONTENT_FILE, K 148 | 149 | ; if (_new_temp_clip_file_size < 6) ;; 经测试, 小于6KB则说明用户没有截图 150 | ; { 151 | ; ; m(_new_temp_clip_file_size) 152 | ; ; m(_old_temp_clip_file_size) 153 | ; tt("Nothing snipped.") 154 | ; Clipboard := clipboardOld ; Restore the original clipboard. Note the use of Clipboard (not ClipboardAll). 155 | ; clipboardOld := "" ; Free the memory in case the clipboard was very large. 156 | ; return 157 | ; } 158 | 159 | 160 | ;;;;;;;;;;;;;;;; 带名字版本 161 | 162 | ; cur_gui_name := "sux_snipshot_" . SnipPlus.temp_snip_img_index 163 | ; Gui, %cur_gui_name%: New 164 | ; ; Gui %cur_gui_name%:+Resize +AlwaysOnTop -MaximizeBox -MinimizeBox +ToolWindow 165 | ; Gui %cur_gui_name%: +AlwaysOnTop +Resize -MaximizeBox 166 | ; Gui, Margin, 0, 0 167 | 168 | ; ; CustomColor := "EEAA99" ; 可以为任意 RGB 颜色(在下面会被设置为透明). 169 | ; ; ; CustomColor := "White" ; 可以为任意 RGB 颜色(在下面会被设置为透明). 170 | ; ; Gui +LastFound ; 避免显示任务栏按钮和 alt-tab 菜单项. 171 | ; ; Gui, Color, %CustomColor% 172 | ; ; WinSet, TransColor, Off 173 | ; ; WinSet, TransColor, %CustomColor% 150 174 | 175 | ; ; Gui +LastFound ; 176 | ; ; WinSet, Transparent, 50 177 | 178 | ; img_path := SnipPlus.GetCurSnipImgPath() 179 | ; Gui, %cur_gui_name%:Add, Picture, v%cur_gui_name%, gSUB_CLICK_SNIP_IMG, %img_path% 180 | 181 | ; ; Menu, FileMenu, Add, &Open`tCtrl+O, Sub_xMenu_Open ; 关于 Ctrl+O 请参阅后面的备注. 182 | ; ; Menu, FileMenu, Add, E&xit, Sub_xMenu_Open 183 | ; ; Menu, HelpMenu, Add, &About, Sub_xMenu_Open 184 | ; ; Menu, MyMenuBar, Add, &File, :FileMenu ; 附加上面的两个子菜单. 185 | ; ; Menu, MyMenuBar, Add, &Help, :HelpMenu 186 | ; ; Gui, Menu, MyMenuBar 187 | 188 | ; GuiControl, Focus, Close 189 | ; MouseGetPos, Mouse_x, Mouse_y 190 | ; final_x := Mouse_x - 88 191 | ; final_y := Mouse_y - 11 192 | ; Gui, %cur_gui_name%:Show, x%final_x% y%final_y%, % "img-" . SnipPlus.temp_snip_img_index . " ( " . lang("Tips: ") . lang("click img to make it transparent") . " )" 193 | ; ; Gui, Show 194 | 195 | 196 | 197 | ;;;;;;;;;;;;;;;; 不带名字版本 198 | 199 | Gui, New 200 | ; Gui +Resize +AlwaysOnTop -MaximizeBox -MinimizeBox +ToolWindow 201 | Gui, +AlwaysOnTop +Resize 202 | Gui, Margin, 0, 0 203 | 204 | ; CustomColor := "EEAA99" ; 可以为任意 RGB 颜色(在下面会被设置为透明). 205 | ; ; CustomColor := "White" ; 可以为任意 RGB 颜色(在下面会被设置为透明). 206 | ; Gui +LastFound ; 避免显示任务栏按钮和 alt-tab 菜单项. 207 | ; Gui, Color, %CustomColor% 208 | ; WinSet, TransColor, Off 209 | ; WinSet, TransColor, %CustomColor% 150 210 | 211 | ; Gui +LastFound ; 212 | ; WinSet, Transparent, 50 213 | 214 | img_path := SnipPlus.GetCurSnipImgPath() 215 | Gui, Add, Picture, gSUB_CLICK_SNIP_IMG vSnipSuspendScreenShotImage, %img_path% 216 | 217 | GuiControlGet, pic_name, , SnipSuspendScreenShotImage 218 | GuiControlGet, PicInfo, Pos, SnipSuspendScreenShotImage ; Stores the position and size in PicInfoX, PicInfoY, PicInfoW, and PicInfoH. 219 | SnipPlus.IMG_PATH_2_RATIO_MAP[pic_name] := PicInfoW / PicInfoH 220 | 221 | ; Menu, FileMenu, Add, &Open`tCtrl+O, Sub_xMenu_Open ; 关于 Ctrl+O 请参阅后面的备注. 222 | ; Menu, FileMenu, Add, E&xit, Sub_xMenu_Open 223 | ; Menu, HelpMenu, Add, &About, Sub_xMenu_Open 224 | ; Menu, MyMenuBar, Add, &File, :FileMenu ; 附加上面的两个子菜单. 225 | ; Menu, MyMenuBar, Add, &Help, :HelpMenu 226 | ; Gui, Menu, MyMenuBar 227 | 228 | GuiControl, Focus, Close 229 | MouseGetPos, Mouse_x, Mouse_y 230 | final_x := Mouse_x - 88 231 | final_y := Mouse_y - 11 232 | Gui, Show, x%final_x% y%final_y%, % img_path . " ( " . lang("Tips: ") . lang("click img to make it transparent") . " )" 233 | } 234 | } 235 | 236 | 237 | 238 | Sub_SnipPlus_Menu_clik: 239 | SnipPlus.SuspendLastScreenshot() 240 | Return 241 | 242 | SUB_CLICK_SNIP_IMG: 243 | Gui +LastFound ; 244 | WinGet, cur_transparent_level, Transparent 245 | if (cur_transparent_level < 255) { 246 | WinSet, Transparent, 255 247 | } 248 | else { 249 | WinSet, Transparent, 22 250 | } 251 | 252 | ; CustomColor := "EEAA99" ; 可以为任意 RGB 颜色(在下面会被设置为透明). 253 | ; ; CustomColor := "White" ; 可以为任意 RGB 颜色(在下面会被设置为透明). 254 | ; Gui +LastFound ; 避免显示任务栏按钮和 alt-tab 菜单项. 255 | ; ; Gui, Color, %CustomColor% 256 | ; WinSet, TransColor, Off 257 | ; WinSet, TransColor, %CustomColor% 150 258 | 259 | ; Gui +LastFound ; 260 | ; MouseGetPos, MouseX, MouseY 261 | ; PixelGetColor, MouseRGB, %MouseX%, %MouseY%, RGB 262 | ; ; 似乎有必要首先关闭任何现有的透明度: 263 | ; WinSet, TransColor, Off 264 | ; WinSet, TransColor, %MouseRGB% 265 | 266 | ; MouseGetPos, MouseX, MouseY, MouseWin 267 | ; PixelGetColor, MouseRGB, %MouseX%, %MouseY%, RGB 268 | ; ; 似乎有必要首先关闭任何现有的透明度: 269 | ; WinSet, TransColor, Off, ahk_id %MouseWin% 270 | ; WinSet, TransColor, %MouseRGB% 66, ahk_id %MouseWin% 271 | 272 | Return 273 | 274 | 275 | ; 让贴图能够跟着窗口的大小变化而同时变化 276 | GuiSize(GuiHwnd, EventInfo, Width, Height) { 277 | ;; 1. 跟着窗口同比例变化 278 | ; GuiControl, MoveDraw, SnipSuspendScreenShotImage, % "w" . (A_GuiWidth) . " h" . (A_GuiHeight) 279 | 280 | ;; 2. 保留图片本身的比例 281 | GuiControlGet, pic_name, , SnipSuspendScreenShotImage 282 | GuiControlGet, PicInfo, Pos, SnipSuspendScreenShotImage ; Stores the position and size in PicInfoX, PicInfoY, PicInfoW, and PicInfoH. 283 | pic_ratio := SnipPlus.IMG_PATH_2_RATIO_MAP[pic_name] 284 | gui_ratio := Width / Height 285 | final_w = 286 | final_h = 287 | if (gui_ratio < pic_ratio) { 288 | ; 说明gui纵向太长 289 | final_w := Width 290 | final_h := Width/pic_ratio 291 | } else { 292 | ; 说明gui横向太长 293 | final_w := pic_ratio*Height 294 | final_h := Height 295 | } 296 | GuiControl, MoveDraw, SnipSuspendScreenShotImage, % "w" . final_w . " h" . final_h ; 把图的比例按照算好的长宽设置一下 297 | GuiControl, Move, SnipSuspendScreenShotImage, % "x" . (Width/2 - final_w/2) . " y" . (Height/2 - final_h/2) ;; 把图上下都居中 298 | } 299 | 300 | ; ////////////////////////////////////////////////////////////////////////// 301 | SUB_SNIP_PLUS_FILE_END_LABEL: 302 | temp_spfel := "blabla" 303 | -------------------------------------------------------------------------------- /source/translate.ahk: -------------------------------------------------------------------------------- 1 |  2 | if(A_ScriptName=="translate.ahk") { 3 | ExitApp 4 | } 5 | 6 | 7 | webapp_gui_http_req = 8 | __Webapp_wb = 9 | transformed_cur_seleted_txt = 10 | 11 | ; with this label, you can include this file on top of the file 12 | Goto, SUB_TRANSLATION_FILE_END_LABEL 13 | 14 | #Include %A_ScriptDir%\source\sux_core.ahk 15 | #Include %A_ScriptDir%\source\quick_entry.ahk 16 | 17 | ;;;;;;;;;;;;;;; 18 | 19 | get_str_from_start_end_str(original_str, start_str, end_str) 20 | { 21 | left_pos := InStr(original_str, start_str) 22 | right_pos := InStr(original_str, end_str) 23 | ret_str := SubStr(original_str, left_pos, right_pos-left_pos) 24 | return ret_str 25 | } 26 | 27 | TranslateSeletedText(cur_sel_text) 28 | { 29 | ; global __Webapp_wb 30 | ; __Webapp_Width := 888 31 | ; __Webapp_height := 480 32 | ; __Webapp_Name := lang("Translation") 33 | ; Gui __Webapp_:New 34 | ; Gui __Webapp_:Margin, 0, 0 35 | ; ; Gui __Webapp_:+DPIScale 36 | ; Gui __Webapp_:Add, ActiveX, v__Webapp_wb w%__Webapp_Width% h%__Webapp_height%, Shell.Explorer 37 | ; __Webapp_wb.silent := true ;Surpress JS Error boxes 38 | 39 | ; st := GetCurSelectedText() 40 | ; if !st 41 | ; return 42 | ; url := "https://www.youdao.com/w/" . UriEncode(Trim(st)) 43 | ; __Webapp_wb.Navigate(url) 44 | ; ; __Webapp_wb.Navigate("file://" . GetFullPathName(TEMP_TRANS_WEBAPP_GUI_HTML_HTML)) 45 | 46 | ; ;Wait for IE to load the page, before we connect the event handlers 47 | ; while __Webapp_wb.readystate != 4 or __Webapp_wb.busy 48 | ; sleep 10 49 | ; ;Use DOM access just like javascript! 50 | ; ; MyButton1 := wb.document.getElementById("MyButton1") 51 | ; ; MyButton2 := wb.document.getElementById("MyButton2") 52 | ; ; MyButton3 := wb.document.getElementById("MyButton3") 53 | ; ; ComObjConnect(MyButton1, "MyButton1_") ;connect button events 54 | ; ; ComObjConnect(MyButton2, "MyButton2_") 55 | ; ; ComObjConnect(MyButton3, "MyButton3_") 56 | ; Gui __Webapp_:Show, w%__Webapp_Width% h%__Webapp_height%, %__Webapp_Name% 57 | ; return 58 | 59 | if (cur_sel_text == "") { 60 | tt(lang("Please Select text and try again") . ".") 61 | return 62 | } 63 | 64 | global webapp_gui_http_req 65 | webapp_gui_http_req := ComObjCreate("Msxml2.XMLHTTP") 66 | 67 | global transformed_cur_seleted_txt 68 | ; 打开启用异步的请求. 69 | transformed_cur_seleted_txt := TransformText(cur_sel_text, 18) 70 | tt(lang("Translate Text") . " : " . transformed_cur_seleted_txt, 1111) 71 | url := "https://www.youdao.com/w/" . UriEncode(transformed_cur_seleted_txt) 72 | 73 | ; 100% will be 96 dpi, 125% will be 120 dpi, 150% will be 144 dpi and so on 74 | if (A_ScreenDPI <= 96) { 75 | global __Webapp_wb 76 | __Webapp_Width := 1288 77 | __Webapp_height := 800 78 | __Webapp_Name := lang("Translation") 79 | Gui __Webapp_:New 80 | ; Gui __Webapp_:+Resize +MinSize%__Webapp_Width% -MaximizeBox -MinimizeBox 81 | Gui __Webapp_:Margin, 0, 0 82 | ; Gui __Webapp_:Color, EEAA99, EEAA99 83 | Gui __Webapp_:-DPIScale 84 | 85 | Gui __Webapp_:Add, ActiveX, v__Webapp_wb w%__Webapp_Width% h%__Webapp_height%, Shell.Explorer 86 | __Webapp_wb.silent := true ;Surpress JS Error boxes 87 | 88 | __Webapp_wb.Navigate(url) ; 该句只适用于 web 浏览器控件. 89 | 90 | xMidScrn := GetMouseMonitorMidX() 91 | xMidScrn -= __Webapp_Width / 2 92 | Gui __Webapp_:Show, x%xMidScrn% w%__Webapp_Width% h%__Webapp_height%, %__Webapp_Name% 93 | } 94 | else { 95 | ; global __Webapp_wb 96 | ; Gui Add, ActiveX, w980 h640 v__Webapp_wb, Shell.Explorer ; 最后一个参数是 ActiveX 组件的名称. 97 | ; __Webapp_wb.Navigate(url) ; 该句只适用于 web 浏览器控件. 98 | ; Gui Show 99 | 100 | webapp_gui_http_req.open("GET", url, true) 101 | ; 设置回调函数 [需要 v1.1.17+]. 102 | webapp_gui_http_req.onreadystatechange := Func("on_webapp_gui_req_ready") 103 | ; 发送请求. Ready() 将在其完成后被调用. 104 | webapp_gui_http_req.send() 105 | } 106 | } 107 | 108 | on_webapp_gui_req_ready() { 109 | global webapp_gui_http_req 110 | global current_selected_text 111 | global transformed_cur_seleted_txt 112 | 113 | if (webapp_gui_http_req.readyState != 4) { ; 没有完成. 114 | return 115 | } 116 | TEMP_TRANS_WEBAPP_GUI_HTML_HTML := SuxCore._CACHE_DIR . "TEMP_TRANS_WEBAPP_GUI.html" 117 | if (webapp_gui_http_req.status == 200) { 118 | yd_html_file := FileOpen(TEMP_TRANS_WEBAPP_GUI_HTML_HTML, "w") 119 | if FileExist(TEMP_TRANS_WEBAPP_GUI_HTML_HTML) 120 | FileDelete, % TEMP_TRANS_WEBAPP_GUI_HTML_HTML 121 | html_head_str = 122 | ( 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | ) 133 | 134 | if (InStr(webapp_gui_http_req.responseText, "
")) { 135 | str_1 := get_str_from_start_end_str(webapp_gui_http_req.responseText, "
", "
") 139 | } 140 | ; else if (webapp_gui_http_req.responseText, "
"){ 141 | ; str_1 := get_str_from_start_end_str(webapp_gui_http_req.responseText, "
", "
") 142 | ; str_a := "" 143 | ; str_2 := get_str_from_start_end_str(webapp_gui_http_req.responseText, "
", "
") 145 | ; } 146 | else { 147 | str_1 := get_str_from_start_end_str(webapp_gui_http_req.responseText, "
", "
", "
") 150 | str_3 := "" 151 | } 152 | 153 | html_end_str = 154 | ( 155 | 156 | 157 | 158 | 159 | ) 160 | final_html_body_str := html_head_str . str_1 . str_a . str_2 . str_3 . html_end_str 161 | final_html_body_str := StrReplace(final_html_body_str, "wordbook", "rm_wordbook_button") ; 为了去除`添加到单词本`的按钮 162 | 163 | pending_rm_str_arr := ["

以上为机器翻译结果,长、整句建议使用 人工翻译

"] 164 | 165 | ; yd_html_file.Write(final_html_body_str) 166 | ; yd_html_file.Close() 167 | 168 | rm_str_start_arr := ["" lang("Original Page") "" 204 | ; Gui, __Webapp_:Add, Link,, % s 205 | 206 | Gui __Webapp_:Add, ActiveX, v__Webapp_wb w%__Webapp_Width% h%__Webapp_height%, Shell.Explorer 207 | __Webapp_wb.silent := true ;Surpress JS Error boxes 208 | 209 | ; st := GetCurSelectedText() 210 | ; if !st 211 | ; return 212 | ; ; m(st) 213 | ; url := "https://www.youdao.com/w/" . UriEncode(Trim(st)) 214 | ; __Webapp_wb.Navigate(url) 215 | 216 | __Webapp_wb.Navigate("file://" . GetFullPathName(TEMP_TRANS_WEBAPP_GUI_HTML_HTML)) 217 | 218 | ;Wait for IE to load the page, before we connect the event handlers 219 | ; while __Webapp_wb.readystate != 4 or __Webapp_wb.busy 220 | ; sleep 10 221 | ;Use DOM access just like javascript! 222 | ; MyButton1 := wb.document.getElementById("MyButton1") 223 | ; MyButton2 := wb.document.getElementById("MyButton2") 224 | ; MyButton3 := wb.document.getElementById("MyButton3") 225 | ; ComObjConnect(MyButton1, "MyButton1_") ;connect button events 226 | ; ComObjConnect(MyButton2, "MyButton2_") 227 | ; ComObjConnect(MyButton3, "MyButton3_") 228 | 229 | xMidScrn := GetMouseMonitorMidX() 230 | xMidScrn -= __Webapp_Width / 2 231 | Gui __Webapp_:Show, x%xMidScrn% w%__Webapp_Width% h%__Webapp_height%, %__Webapp_Name% 232 | ; Gui __Webapp_:Default 233 | } 234 | else { 235 | ; m("xxd") 236 | ; handle_webapp_gui_req_failed() 237 | } 238 | webapp_gui_http_req = 239 | } 240 | 241 | __Webapp_GuiEscape: 242 | __Webapp_GuiClose: 243 | ;make sure taskbar is back on exit 244 | WinShow, ahk_class Shell_TrayWnd 245 | WinShow, Start ahk_class Button 246 | Gui __Webapp_:Destroy 247 | return 248 | 249 | 250 | 251 | ; ////////////////////////////////////////////////////////////////////////// 252 | SUB_TRANSLATION_FILE_END_LABEL: 253 | temp_trans := "blabla" -------------------------------------------------------------------------------- /source/tray_menu.ahk: -------------------------------------------------------------------------------- 1 |  2 | if(A_ScriptName=="tray_menu.ahk") { 3 | ExitApp 4 | } 5 | 6 | ; with this label, you can include this file on top of the file 7 | Goto, SUB_TRAY_MENU_FILE_END_LABEL 8 | 9 | 10 | #Include %A_ScriptDir%\source\sux_core.ahk 11 | #Include %A_ScriptDir%\source\action.ahk 12 | 13 | 14 | 15 | class TrayMenu 16 | { 17 | static ASSET_DIR := "app_data\img\" 18 | static icon_default := TrayMenu.ASSET_DIR "sux_default.ico" 19 | static icon_disable := TrayMenu.ASSET_DIR "sux_disable.ico" 20 | static donate_img_alipay := TrayMenu.ASSET_DIR "donate_alipay.png" 21 | static donate_img_wechat := TrayMenu.ASSET_DIR "donate_wechat.png" 22 | static last_tray_icon_x := 0 23 | static last_tray_icon_y := 0 24 | 25 | init() 26 | { 27 | this.SetLang("config") 28 | this.update_tray_menu() 29 | ; this.SetAutorun("config") 30 | this.SetTheme("config") 31 | this.SetHotCorner("config") 32 | this.SetLimitModeInFullScreen("config") 33 | this.SetDisableWin10AutoUpdate("config") 34 | this.SetSwapWinCtrlShiftAlt("config") 35 | this.SetWindowMover("config", 1) 36 | ; this.SetCheckUpdatesOnStartup("config", 1) 37 | } 38 | 39 | SetCheckUpdatesOnStartup(act="toggle", from_launch=0) 40 | { 41 | global INI_SET_CHECK_UPDATES_ON_STARTUP_SWITCH 42 | cfg := SuxCore.GetIniConfig(INI_SET_CHECK_UPDATES_ON_STARTUP_SWITCH, SuxCore.Default_check_updates_on_startup_switch) 43 | switch := (act="config")? cfg : act 44 | switch := (act="toggle")? !cfg : switch 45 | SuxCore.SetIniConfig(INI_SET_CHECK_UPDATES_ON_STARTUP_SWITCH, switch) 46 | if (switch && from_launch) { 47 | check_update_from_launch() 48 | } 49 | } 50 | 51 | SetSwapWinCtrlShiftAlt(act="toggle") 52 | { 53 | global INI_SWAP_WIN_CTRL_SHIFT_ALT 54 | cfg := SuxCore.GetIniConfig(INI_SWAP_WIN_CTRL_SHIFT_ALT, SuxCore.Default_swap_win_ctrl_shift_alt_switch) 55 | switch := (act="config")? cfg : act 56 | switch := (act="toggle")? !cfg : switch 57 | SuxCore.SetIniConfig(INI_SWAP_WIN_CTRL_SHIFT_ALT, switch) 58 | SuxCore.SetCurrentSwapWinCtrlShiftAltSwitch(switch) 59 | } 60 | 61 | SetDisableWin10AutoUpdate(act="toggle") 62 | { 63 | global INI_DISABLE_WIN10_AUTO_UPDATE_SWITCH 64 | cfg := SuxCore.GetIniConfig(INI_DISABLE_WIN10_AUTO_UPDATE_SWITCH, SuxCore.Default_disable_win10_auto_update_switch) 65 | switch := (act="config")? cfg : act 66 | switch := (act="toggle")? !cfg : switch 67 | SuxCore.SetIniConfig(INI_DISABLE_WIN10_AUTO_UPDATE_SWITCH, switch) 68 | if (switch) { 69 | DisableWin10AutoUpdate() 70 | SetTimer, DisableWin10AutoUpdate, %tick_disable_win10_auto_interval% 71 | } 72 | else { 73 | SetTimer, DisableWin10AutoUpdate, Delete 74 | EnableWin10AutoUpdate() 75 | } 76 | } 77 | 78 | SetWindowMover(act="toggle", from_launch=0) 79 | { 80 | SysGet, mon_cnt, MonitorCount 81 | if (mon_cnt get_version_sum(SuxCore.version)) { 201 | check_update_menu_name := lang("A New Version v") remote_ver_str . " !" lang(" Click me to chekc it out!") 202 | ; check_update_menu_func := SuxCore.remote_download_html 203 | check_update_menu_func := "TrayMenu.ShowNewVerReleaseNote" 204 | } 205 | else { 206 | check_update_menu_name := lang("Check Update") 207 | check_update_menu_func := "check_update_from_tray" 208 | } 209 | lang := SuxCore.CurrentLang 210 | cur_theme := SuxCore.GetIniConfig(INI_THEME, SuxCore.Default_theme) 211 | hot_corner_switch := SuxCore.GetIniConfig(INI_HOT_CORNER, SuxCore.Default_hot_corner_switch) 212 | limit_mode_in_full_screen_switch := SuxCore.GetIniConfig(INI_LIMIT_MODE_IN_FULL_SCREEN, SuxCore.Default_limit_mode_in_full_screen_switch) 213 | disable_win10_auto_update_switch := SuxCore.GetIniConfig(INI_DISABLE_WIN10_AUTO_UPDATE_SWITCH, SuxCore.Default_disable_win10_auto_update_switch) 214 | swap_win_ctrl_shift_alt_switch := SuxCore.GetIniConfig(INI_SWAP_WIN_CTRL_SHIFT_ALT, SuxCore.Default_swap_win_ctrl_shift_alt_switch) 215 | window_mover_switch := SuxCore.GetIniConfig(INI_WINDOW_MOVER_SWITCH, SuxCore.Default_window_mover_switch) 216 | 217 | Menu, Tray, Tip, % SuxCore.ProgramName 218 | xMenu.New("TrayLanguage" 219 | ,[["中文", "TrayMenu.SetLang", {"check": lang=="cn"}] 220 | , ["English", "TrayMenu.SetLang", {"check": lang=="en"}]]) 221 | xMenu.New("SearchGuiTheme" 222 | ,[[lang("Auto"), "TrayMenu.SetTheme", {"check": cur_theme=="auto"}] 223 | , [lang("Light"), "TrayMenu.SetTheme", {"check": cur_theme=="light"}] 224 | , [lang("Dark"), "TrayMenu.SetTheme", {"check": cur_theme=="dark"}]]) 225 | 226 | SysGet, mon_cnt, MonitorCount 227 | xMenu.New("SensitiveFeatureSwitch", [[lang("Auto Disable sux In Full Screen"), "TrayMenu.SetLimitModeInFullScreen", {"check": limit_mode_in_full_screen_switch==1}] 228 | , [lang("Hot Corner"), "TrayMenu.SetHotCorner", {"check": hot_corner_switch==1}] 229 | , [lang("Disable Win10 Auto Update"), "TrayMenu.SetDisableWin10AutoUpdate", {"check": disable_win10_auto_update_switch==1}] 230 | , [lang("Swap Win/Ctrl Shift/Alt (beta)"), "TrayMenu.SetSwapWinCtrlShiftAlt", {"check": swap_win_ctrl_shift_alt_switch==1}] 231 | , [lang("Window Mover"), "TrayMenu.SetWindowMover", mon_cnt==1 ? {"disable": 1}: {"check": window_mover_switch==1}]]) 232 | 233 | TrayMenuList := [] 234 | TrayMenuList := EnhancedArray.merge(TrayMenuList 235 | ,[[version_str, "TrayMenu.AboutSux"] 236 | ,[lang("Help"), SuxCore.help_addr] 237 | ,[lang("Donate"), "TrayMenu.ShowDonatePic"] 238 | ,[check_update_menu_name, check_update_menu_func] 239 | ,[] 240 | ,[lang("Start With Windows"), "TrayMenu.SetAutorun", {"check": autorun}] 241 | ; ,[lang("Check Updates On Startup"), "TrayMenu.SetCheckUpdatesOnStartup", {"check": check_updates_on_startup_switch}] 242 | ,["Language",, {"sub": "TrayLanguage"}] 243 | ,[lang("Theme"),, {"sub": "SearchGuiTheme"}] 244 | ,[lang("Feature Switch"),, {"sub": "SensitiveFeatureSwitch"}] 245 | ,[] 246 | ,[lang("Open sux Folder"), "TrayMenu.OpenSuxFolder"] 247 | ,[lang("Edit Config File"), "TrayMenu.Edit_conf"] 248 | ,[] 249 | ,[lang("Disable"), "TrayMenu.SetDisable", {"check": A_IsPaused&&A_IsSuspended}] 250 | ,[lang("Restart sux"), "ReloadSux"] 251 | ,[lang("Exit"), "TrayMenu.ExitSux"] ]) 252 | this.SetMenu(TrayMenuList) 253 | Menu, Tray, Default, % lang("Disable") 254 | Menu, Tray, Click, 1 255 | ; OnMessage(0x404, "AHK_NOTIFYICON") 256 | this.Update_Icon() 257 | } 258 | 259 | static _switch_tray_standard_menu := 0 260 | Standard_Tray_Menu(act="toggle") 261 | { 262 | SuxCore._switch_tray_standard_menu := (act="toggle")? !SuxCore._switch_tray_standard_menu :act 263 | this.update_tray_menu() 264 | } 265 | 266 | ShowNewVerReleaseNote() { 267 | Gui, new_ver_release_note: New 268 | Gui new_ver_release_note:+Resize +AlwaysOnTop +MinSize400 -MaximizeBox -MinimizeBox 269 | Gui, new_ver_release_note:Font, s16 270 | 271 | s := lang("New Release") . "! sux v" . SuxCore.get_remote_ini_config("ver") 272 | Gui, new_ver_release_note:Add, Text,, % s 273 | s := lang("What's new?") 274 | Gui, new_ver_release_note:Add, Text,, % s 275 | 276 | Gui, new_ver_release_note:Font, s11 277 | remote_ver_release_note_str := lang(SuxCore.get_remote_ini_config("release_note_" . SuxCore.CurrentLang)) 278 | _arr := StrSplit(remote_ver_release_note_str, "-") 279 | for _i, _s in _arr { 280 | if (!_s) 281 | Continue 282 | Gui, new_ver_release_note:Add, Text,, % "- " . lang(_s) 283 | } 284 | 285 | s := "" lang("Download Page") "" 286 | Gui, new_ver_release_note:Add, Link,, % s 287 | Gui, new_ver_release_note:Add, Text 288 | GuiControl, Focus, Close 289 | s := lang("New Release") 290 | Gui, new_ver_release_note:Show,, % s 291 | } 292 | 293 | ShowDonatePic() { 294 | Gui, sux_donate: New 295 | Gui sux_donate: +AlwaysOnTop 296 | Gui, sux_donate:Font, s11 wbold 297 | Gui, sux_donate:Add, Text 298 | s := lang("Donate") 299 | Gui, sux_donate:Add, Text,, % s 300 | Gui, sux_donate:Add, Text 301 | 302 | Gui, sux_donate:Font, s10 wnorm 303 | s := lang("Alipay") 304 | Gui, sux_donate:Add, Text,, % s 305 | Gui, sux_donate:Add, Picture, w300 h-1, % TrayMenu.donate_img_alipay 306 | ; Gui, sux_donate:Add, Picture, w300 h-1, C:\Users\b\Documents\github\sux\app_data\donate_alipay.png 307 | Gui, sux_donate:Add, Text 308 | s := lang("Wechat") 309 | Gui, sux_donate:Add, Text,, % s 310 | Gui, sux_donate:Add, Picture, w300 h-1, % TrayMenu.donate_img_wechat 311 | Gui, sux_donate:Add, Text 312 | GuiControl, Focus, Close 313 | s := "sux" 314 | Gui, sux_donate:Show, w330, % s 315 | } 316 | 317 | AboutSux() { 318 | Gui, sux_About: New 319 | Gui sux_About:+Resize +AlwaysOnTop +MinSize400 -MaximizeBox -MinimizeBox 320 | Gui, sux_About:Font, s12 321 | sux_ver := "sux v" SuxCore.version 322 | ; Gui, sux_About:Add, Text,, % sux_ver 323 | Gui, sux_About:Add, Text 324 | 325 | s := "" lang("Home Page") "" 326 | Gui, sux_About:Add, Link,, % s 327 | s := "" lang("Feedback") "" 328 | Gui, sux_About:Add, Link,, % s 329 | s := "" lang("Open GitHub to light up the little star!") "" 330 | Gui, sux_About:Add, Link,, % s 331 | s := "" lang("Open Zhihu to like sux!") "" 332 | Gui, sux_About:Add, Link,, % s 333 | Gui, sux_About:Add, Text 334 | GuiControl, Focus, Close 335 | s := lang("About") . " " . sux_ver 336 | Gui, sux_About:Show,, % s 337 | } 338 | 339 | Update_Icon() 340 | { 341 | setsuspend := A_IsSuspended 342 | setpause := A_IsPaused 343 | if !setpause && !setsuspend { 344 | this.SetIcon(this.icon_default) 345 | } 346 | Else if !setpause && setsuspend { 347 | this.SetIcon(this.icon_disable) 348 | } 349 | Else if setpause && !setsuspend { 350 | this.SetIcon(this.icon_disable) 351 | } 352 | Else if setpause && setsuspend { 353 | this.SetIcon(this.icon_disable) 354 | } 355 | } 356 | 357 | ; Tray.SetIcon 358 | SetIcon(path) 359 | { 360 | if(FileExist(path)) { 361 | Menu, Tray, Icon, %path%,,1 362 | } 363 | } 364 | 365 | ; Tray.SetMenu 366 | SetMenu(menuList) 367 | { 368 | Menu, Tray, DeleteAll 369 | Menu, Tray, NoStandard 370 | xMenu.add("Tray", menuList) 371 | } 372 | 373 | ExitSux(show_msg=true) 374 | { 375 | ExitApp 376 | } 377 | 378 | Edit_conf() 379 | { 380 | OpenFolderAndSelectFile(SuxCore.conf_user_json_file) 381 | } 382 | 383 | OpenSuxFolder() 384 | { 385 | ; OpenFolderAndSelectFile(SuxCore.conf_user_json_file) 386 | OpenFolder(A_WorkingDir) 387 | } 388 | 389 | SetDisable(act="toggle") 390 | { 391 | setdisable := (act="toggle")? !(A_IsPaused&&A_IsSuspended): act 392 | TrayMenu.SetState(setdisable, setdisable) 393 | } 394 | 395 | SetState(setsuspend="", setpause="") 396 | { 397 | setsuspend := (setsuspend="")? A_IsSuspended: setsuspend 398 | setpause := (setpause="")? A_IsPaused: setpause 399 | if(!A_IsSuspended && setsuspend) { 400 | RunArr(SuxCore.OnSuspendCmd) 401 | } 402 | if(!A_IsPaused && setpause) { 403 | RunArr(SuxCore.OnPauseCmd) 404 | } 405 | if(setsuspend) { 406 | Suspend, On 407 | } 408 | else { 409 | Suspend, Off 410 | } 411 | if(setpause) { 412 | Pause, On, 1 413 | } 414 | else { 415 | Pause, Off 416 | } 417 | TrayMenu.update_tray_menu() 418 | } 419 | } 420 | 421 | 422 | 423 | ; ////////////////////////////////////////////////////////////////////////// 424 | ; ////////////////////////////////////////////////////////////////////////// 425 | ; ////////////////////////////////////////////////////////////////////////// 426 | /* 427 | e.g. 428 | xMenu.Add("Menu1", [["item1","func1"],["item2","func2"],[] 429 | ,["submenu",["subitem_1","func3"] 430 | ,["subitem_2",, {sub: "SubMenu", "disable"}]]]) 431 | xMenu.Show("Menu1") 432 | */ 433 | class xMenu 434 | { 435 | static MenuList := {} 436 | 437 | Show(Menu_Name, X := "", Y := "") 438 | { 439 | if (X == "" || Y == "") 440 | Menu, %Menu_Name%, Show 441 | Else 442 | Menu, %Menu_Name%, Show, % X, % Y 443 | } 444 | 445 | New(Menu_Name, Menu_Config) 446 | { 447 | this.Clear(Menu_Name) 448 | this.Add(Menu_Name, Menu_Config) 449 | } 450 | 451 | Clear(Menu_Name) 452 | { 453 | Try 454 | { 455 | Menu, %Menu_Name%, DeleteAll 456 | } 457 | } 458 | 459 | Add(Menu_Name, Menu_Config) 460 | { 461 | ParsedCfg := this._Config_Parse(Menu_Name, Menu_Config) 462 | Loop, % ParsedCfg.MaxIndex() 463 | { 464 | cfg_entry := ParsedCfg[A_Index] 465 | if (cfg_entry[4].HasKey("sub")) 466 | { 467 | sub_name := cfg_entry[4]["sub"] 468 | Menu, % cfg_entry[1], Add, % cfg_entry[2], :%sub_name% 469 | } 470 | Else 471 | { 472 | Menu, % cfg_entry[1], Add, % cfg_entry[2], Sub_xMenu_Open 473 | this.MenuList[cfg_entry[1] "_" cfg_entry[2]] := cfg_entry[3] 474 | } 475 | For Key, Value in cfg_entry[4] 476 | { 477 | if Value = 0 478 | Continue 479 | StringLower, Key, Key 480 | if(Key == "check") { 481 | Menu, % cfg_entry[1], Check, % cfg_entry[2] 482 | } 483 | if(Key == "uncheck") 484 | Menu, % cfg_entry[1], UnCheck, % cfg_entry[2] 485 | if(Key == "togglecheck") 486 | Menu, % cfg_entry[1], ToggleCheck, % cfg_entry[2] 487 | if(Key == "enable") 488 | Menu, % cfg_entry[1], Enable, % cfg_entry[2] 489 | if(Key == "disable") { 490 | Menu, % cfg_entry[1], Disable, % cfg_entry[2] 491 | } 492 | if(Key == "toggleenable") 493 | Menu, % cfg_entry[1], ToggleEnable, % cfg_entry[2] 494 | } 495 | } 496 | } 497 | 498 | _Config_Parse(PName, Config) 499 | { 500 | ParsedCfg := {} 501 | Loop, % Config.MaxIndex() 502 | { 503 | cfg_entry := Config[A_Index] 504 | If IsObject(cfg_entry[2]) 505 | { 506 | ParsedCfg_Sub := this._Config_Parse(cfg_entry[1], cfg_entry[2]) 507 | Loop, % ParsedCfg_Sub.MaxIndex() 508 | { 509 | sub_entry := ParsedCfg_Sub[A_Index] 510 | ParsedCfg.Insert([sub_entry[1],sub_entry[2],sub_entry[3],sub_entry[4]]) 511 | } 512 | ParsedCfg.Insert([PName,cfg_entry[1],,{"sub":cfg_entry[1]}]) 513 | } 514 | Else 515 | { 516 | if cfg_entry.MaxIndex() == 3 517 | cfg_ctrl := cfg_entry[3] 518 | Else 519 | cfg_ctrl := {} 520 | ParsedCfg.Insert([PName,cfg_entry[1],cfg_entry[2],cfg_ctrl]) 521 | } 522 | } 523 | Return % ParsedCfg 524 | } 525 | } 526 | 527 | 528 | ; AHK_NOTIFYICON(wParam, lParam) 529 | ; { 530 | ; if (lParam = 0x205) ; WM_RBUTTONUP 531 | ; { 532 | ; ; SetTimer, ShowRbuttonMenu, -1 533 | ; MouseGetPos, mouse_x, mouse_y 534 | ; TrayMenu.last_tray_icon_x := mouse_x 535 | ; TrayMenu.last_tray_icon_y := mouse_y 536 | ; tt(TrayMenu.last_tray_icon_x " \\ " TrayMenu.last_tray_icon_y) 537 | ; Menu, Tray, Show 538 | ; ; Menu, Tray, Show, % TrayMenu.last_tray_icon_x, % TrayMenu.last_tray_icon_y 539 | ; return 0 540 | ; } 541 | ; else if (lParam = 0x202) ; WM_LBUTTONUP 542 | ; { 543 | ; ; tt(111) 544 | ; TrayMenu.SetDisable() 545 | ; ; TrayMenu.update_tray_menu() 546 | ; return 0 547 | ; } 548 | ; } 549 | 550 | 551 | ShellMessage( wParam,lParam ) { 552 | If ( wParam = 1 ) ; HSHELL_WINDOWCREATED := 1 553 | { 554 | MoveWindowToMouseMonitor(lParam) 555 | } 556 | } 557 | 558 | 559 | Sub_xMenu_Open: 560 | ; ActiveHwnd := WinExist("A") 561 | Run(xMenu.MenuList[A_ThisMenu "_" A_ThisMenuItem]) 562 | 563 | ;; 下面这两行不能调换顺序, 否则会有乱切换软件的bug 564 | ; Send, !{esc} ; GotoNextApp, 没有这一行的话, 点击了菜单之后双击alt没反应, 还得点击一下其他地方才有反应 565 | TrayMenu.update_tray_menu() 566 | ; tt(TrayMenu.last_tray_icon_x " \\ " TrayMenu.last_tray_icon_y) 567 | ; Menu, Tray, Show, % TrayMenu.last_tray_icon_x, % TrayMenu.last_tray_icon_y+2 568 | 569 | ; WinActivate 570 | ; WinActivate, ahk_id %ActiveHwnd% 571 | Return 572 | 573 | 574 | 575 | TICK_HOT_CORNERS: 576 | global LIMIT_MODE 577 | if (LIMIT_MODE) { 578 | return 579 | } 580 | global HOTKEY_REGISTER_MAP 581 | border_code := get_border_code() 582 | ; tt(border_code) 583 | if (InStr(border_code, "Corner")) { 584 | action := HOTKEY_REGISTER_MAP[border_code "|" "hover"] 585 | ; tt(border_code "|" "hover") 586 | ; tt(action, 1111) 587 | run(action) 588 | Loop 589 | { 590 | if (get_border_code() == "") 591 | break ; exits loop when mouse is no longer in the corner 592 | } 593 | } 594 | Return 595 | 596 | 597 | HANDLE_LIMIT_MODE_IN_FULL_SCREEN: 598 | global LIMIT_MODE 599 | if (IsFullscreen()) { 600 | ; WinGetClass, class, A 601 | ; tt(class) 602 | if (WinActive("ahk_class #32770")) { ;; #32770是截图的ahk_class, 因为截图也是全屏模式, 所以要避免截图的时候进入limit_mode 603 | Return 604 | } 605 | if (LIMIT_MODE == 0) { 606 | ; tt(lang("sux limit mode auto enable in full screen mode") . ".", 1111) 607 | LIMIT_MODE := 1 608 | } 609 | } 610 | else { 611 | if (LIMIT_MODE == 1) { 612 | ; tt(lang("sux limit mode auto disable not in full screen mode") . ".", 1111) 613 | LIMIT_MODE := 0 614 | } 615 | } 616 | Return 617 | 618 | 619 | 620 | ; ////////////////////////////////////////////////////////////////////////// 621 | SUB_TRAY_MENU_FILE_END_LABEL: 622 | temp_tm := "blabla" -------------------------------------------------------------------------------- /sux.ahk: -------------------------------------------------------------------------------- 1 | ; ; Note: Save with encoding UTF-8 with BOM if possible. 2 | ; ; Notepad will save UTF-8 files with BOM automatically (even though it does not say so). 3 | ; ; Some editors however save without BOM, and then special characters look messed up in the AHK GUI. 4 | 5 | 6 | #NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. 7 | ; #Warn ; Enable warnings to assist with detecting common errors. 8 | ; SendMode Input ; 发现这一行会导致pycharm一直把caps弄得一直处于按住状态, 所以注释了. Recommended for new scripts due to its superior speed and reliability. 9 | SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. 10 | #SingleInstance 11 | 12 | 13 | ; SetCapsLockState, AlwaysOff ; 因为ahk语言的自身局限性, 必须得在这里加这一行, 只放在 sux_core.ahk里的话, 会有bug 14 | 15 | 16 | ----------------------- 17 | 18 | 19 | ; #Include %A_ScriptDir%\source\common_const.ahk 20 | #Include %A_ScriptDir%\source\util.ahk 21 | #Include %A_ScriptDir%\source\sux_core.ahk 22 | ; #Include %A_ScriptDir%\source\quick_entry.ahk 23 | ; #Include %A_ScriptDir%\source\clipboard_plus.ahk 24 | 25 | 26 | ;;;;;;;;;;;;;;;;;;;;;;;;;;; 27 | 28 | RunAsAdmin() 29 | SuxCore.init() 30 | --------------------------------------------------------------------------------