├── Anki教程.rar ├── README.md ├── 威廉助手V1.61 - 版本20201021141847.rar ├── 威廉助手V1.62源码- 版本20201029161605.ahk └── 网页视频书签YINOTE.zip /Anki教程.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/5eagull/Resources/24f7415468dec455fa67808f7d68c9bed8219e01/Anki教程.rar -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | - 资源下载方法 2 | - 1、点击上边你需要的文件如"Anki教程.rar" 3 | - 2、进入相应界面后点击"Download"即可下载 4 | 5 | -------------------------------------------------------------------------------- /威廉助手V1.61 - 版本20201021141847.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/5eagull/Resources/24f7415468dec455fa67808f7d68c9bed8219e01/威廉助手V1.61 - 版本20201021141847.rar -------------------------------------------------------------------------------- /威廉助手V1.62源码- 版本20201029161605.ahk: -------------------------------------------------------------------------------- 1 | #Include 2 | ;威廉助手V1.61作者知乎威廉 3 | ;为了方便ahk爱好者研习本人决定把源码公开 4 | ;源码内标注了大量的注释方便大家参考 5 | ;欢迎加入QQ群1026788769交流。 6 | 7 | ;右键开启202010021426.ahk 8 | 9 | ;-------预先设定 10 | #NoEnv ;提升启动时运行性能 11 | ;#SingleInstance Force ;取消点击执行是否覆盖提示 12 | 13 | SetWorkingDir %A_ScriptDir% 14 | ;指定脚本的工作目录,%A_ScriptDir%为当前脚本所在目录 15 | 16 | SetBatchLines -1 17 | ;-1脚本不休眠全速运行 18 | 19 | Menu Tray, Icon, shell32.dll, 147 20 | ;小图标 21 | 22 | ;------------------------大脚本开始------------------------ 23 | ;-----菜单项-----头 24 | 25 | 26 | ;---Obsidian语法--子菜单 27 | Menu,Obsidian语法子菜单,Add,[[]],[[]] 28 | Menu,Obsidian语法子菜单,Add,![[]],![[]] 29 | Menu,Obsidian语法子菜单,Add,[[#]],[[#]] 30 | Menu,Obsidian语法子菜单,Add,[](),[]() 31 | 32 | Menu,Obsidian语法子菜单,Add, ;帮助视觉区分 33 | Menu,Obsidian语法子菜单,Add,加粗,加粗 34 | Menu,Obsidian语法子菜单,Add,高亮,高亮 35 | Menu,Obsidian语法子菜单,Add,下划线,下划线 36 | 37 | Menu,Obsidian语法子菜单,Add, ;帮助视觉区分 38 | Menu,Obsidian语法子菜单,Add,"","" 39 | Menu,Obsidian语法子菜单,Add,左右单引号(代码),左右单引号 40 | Menu,Obsidian语法子菜单,Add,左右三引号(代码),左右三引号 41 | 42 | Menu,Obsidian语法子菜单,Add, ;帮助视觉区分 43 | Menu,Obsidian语法子菜单,Add,TODO,TODO 44 | Menu,Obsidian语法子菜单,Add,脚注a,脚注a 45 | Menu,Obsidian语法子菜单,Add,脚注b:,脚注b 46 | 47 | Menu,Obsidian语法子菜单,Add, ;帮助视觉区分 48 | Menu,Obsidian语法子菜单,Add,1.,1. 49 | Menu,Obsidian语法子菜单,Add,>,> 50 | Menu,Obsidian语法子菜单,Add,[](file:///),[](file:///) 51 | Menu,Obsidian语法子菜单,Add,iframe(嵌入),iframe 52 | 53 | 54 | 55 | 56 | 57 | Menu,Obsidian语法子菜单,Add,#打开的窗口,#打开的窗口 58 | Menu,Obsidian语法子菜单,Add,NEAR,NEAR 59 | ;菜单--Obsidian语法 60 | Menu,菜单组最高层A,Add,常用语法,:Obsidian语法子菜单 61 | 62 | Menu,块引用子菜单,Add,![[^^,![[^^ 63 | Menu,块引用子菜单,Add,![[##,![[## 64 | Menu,块引用子菜单,Add,块引用使用说明,块引用使用说明 65 | ;菜单--块引用 66 | Menu,菜单组最高层A,Add,块引用,:块引用子菜单 67 | 68 | 69 | ;菜单--时间戳--子菜单 70 | Menu,时间戳子菜单,Add,输入时间戳,输入时间戳 71 | Menu,时间戳子菜单,Add,时间戳到剪贴板,时间戳到剪贴板 72 | Menu,时间戳子菜单,Add,输入[[时间戳]],输入[[时间戳]] 73 | ;菜单--时间戳 74 | Menu,菜单组最高层A,Add,时间戳,:时间戳子菜单 75 | 76 | ;菜单-空项-横杠 77 | Menu,菜单组最高层A,Add, 78 | 79 | 80 | ;菜单-用Obsidian搜索 81 | Menu,搜索子菜单,Add,用Obsidian搜索/跳转,用Obsidian搜索 82 | ;菜单-用Everything搜索 83 | Menu,搜索子菜单,Add,用Everything搜索/跳转,用Everything搜索 84 | ;菜单--剪贴板搜索 85 | Menu,搜索子菜单,Add,剪贴板搜索,剪贴板搜索 86 | ;菜单--搜索 87 | Menu,菜单组最高层A,Add,搜索/跳转,:搜索子菜单 88 | 89 | 90 | ;摘录到Obsidian 91 | Menu,摘录到Obsidian子菜单,Add,摘录到Obsidian(常用),摘录到Obsidian 92 | ;从QQ聊天窗摘录(特别定制) 93 | Menu,摘录到Obsidian子菜单,Add,QQ聊天窗摘录到Ob(定制),QQ聊天窗摘录到Ob 94 | ;菜单--摘录到Obsidian 95 | Menu,菜单组最高层A,Add,摘录到Obsidian,:摘录到Obsidian子菜单 96 | 97 | ;菜单-空项-横杠,帮助视觉区分 98 | Menu,菜单组最高层A,Add, 99 | 100 | 101 | ;Obsidian和-PotPlayer视频 102 | Menu,双向跳转子菜单,Add,Obsidian-PotPlayer视频,Obsidian-PotPlayer视频 103 | ;Obsidian-Chrome视频 104 | Menu,双向跳转子菜单,Add,Obsidian-Chrome视频(网页),Obsidian-Chrome视频 105 | ;横杠,有助于视觉区分 106 | Menu,双向跳转子菜单,Add, 107 | ;Obsidian-ANKI 108 | Menu,双向跳转子菜单,Add,Obsidian-ANKI,Obsidian-ANKI 109 | ;Obsidian-PDF 110 | Menu,双向跳转子菜单,Add,Obsidian-PDF,Obsidian-PDF 111 | ;横杠,有助于视觉区分 112 | Menu,双向跳转子菜单,Add, 113 | ;Obsidian-MindManager 114 | Menu,双向跳转子菜单,Add,Obsidian-MindManager,Obsidian-MindManager 115 | ;MindManager-PDF 116 | Menu,双向跳转子菜单,Add,MindManager-PDF,MindManager-PDF 117 | ;菜单--双向跳转 118 | Menu,菜单组最高层A,Add,双向跳转,:双向跳转子菜单 119 | 120 | ;转为新笔记 121 | Menu,编辑子菜单,Add,框选内容变新笔记,转为新笔记 122 | ;编辑子菜单-横杠 123 | Menu,编辑子菜单,Add, 124 | ;文本全局修改 125 | Menu,编辑子菜单,Add,文本全局修改(支持单行),文本全局修改 126 | ;自定义库目录 127 | Menu,编辑子菜单,Add,选择库目录(全局修改用),选择库目录 128 | ;菜单-编辑子菜单 129 | Menu,菜单组最高层A,Add,Obsidian编辑,:编辑子菜单 130 | 131 | ;菜单-空项-横杠 132 | Menu,菜单组最高层A,Add, 133 | 134 | ;OCR识别与截图 135 | Menu,菜单组最高层A,Add, 截图到剪贴板,截图到剪贴板 136 | Menu,菜单组最高层A,Add, OCR识别,OCR识别 137 | 138 | ;菜单-空项-横杠 139 | Menu,菜单组最高层A,Add, 140 | 141 | ;有道OCR翻译 142 | Menu,菜单组最高层A,Add, 有道OCR翻译,有道OCR翻译 143 | Menu,菜单组最高层A,Add, 有道翻译,有道翻译 144 | 145 | ;菜单-空项-横杠 146 | Menu,菜单组最高层A,Add, 147 | 148 | ;菜单-威廉助手--子菜单 149 | Menu,威廉助手子菜单,Add,威廉助手V1.61,跳转知乎详细说明 150 | Menu,威廉助手子菜单,Add,作者:威廉(知乎),跳转知乎详细说明 151 | menu,威廉助手子菜单,Add,跳转QQ交流群,跳转QQ群1026788769 152 | Menu,威廉助手子菜单,Add,助手使用说明,跳转知乎详细说明 153 | menu,威廉助手子菜单,Add,勿从三方下载防止安全隐患,跳转知乎详细说明 154 | ;菜单-威廉助手 155 | Menu,菜单组最高层A,Add,威廉助手说明,:威廉助手子菜单 156 | return ;菜单脚本结束 157 | 158 | ;-----各命令项-----头 159 | 160 | 161 | ;菜单--Obsidian语法-各项命令-头 162 | [[]]: 163 | JTZXJB001() 164 | return 165 | 166 | ![[]]: 167 | JTZXJB002() 168 | return 169 | 170 | [[#]]: 171 | JTZXJB003() ;[[#]]的具体执行脚本 172 | return 173 | 174 | TODO: 175 | JTZXJB004() ;TODO的具体执行脚本 176 | return 177 | 178 | 脚注a: 179 | JTZXJB005() ;脚注a的具体执行脚本 180 | return 181 | 182 | 脚注b: 183 | JTZXJB006() ;脚注b的具体执行脚本 184 | return 185 | 186 | 加粗: 187 | JTZXJB007() ;加粗的具体执行脚本 188 | return 189 | 190 | 左右单引号: ;之后研究一下g标签 g变量 191 | JTZXJB008() ;两边单引号的具体执行脚本 192 | return 193 | 194 | 左右三引号: 195 | JTZXJB009() ;左右三引号的具体执行脚本 196 | return 197 | 198 | [](): 199 | JTZXJB010() ;[]()的具体执行脚本 200 | return 201 | 202 | [](file:///): 203 | JTZXJB011() ;[](file:///)的具体执行脚本 204 | return 205 | 206 | iframe: 207 | JTZXJB012() ;iframe的具体执行脚本 208 | return 209 | 210 | 1.: 211 | JTZXJB013() ;1.的具体执行脚本 212 | return 213 | 214 | >: 215 | JTZXJB014() ;>的具体执行脚本 216 | return 217 | 218 | 下划线: 219 | JTZXJB015() ;下划线的具体执行脚本 220 | return 221 | 222 | 223 | "": 224 | JTZXJB016() ;""的具体执行脚本 225 | return 226 | 227 | 高亮: 228 | JTZXJB017() ;高亮的具体执行脚本 229 | return 230 | 231 | NEAR: 232 | JTZXJB018() ;NEAR的具体执行脚本 233 | return 234 | 235 | #打开的窗口: 236 | JTZXJB019() ;#打开的窗口的具体执行脚本 237 | return 238 | ;菜单--Obsidian语法-各项命令-尾 239 | 240 | ;菜单--块引用-各项命令-头 241 | ![[^^: 242 | clipboard := "![[^^" 243 | Send,{LControl Down}v{LControl Up} 244 | return 245 | 246 | ![[##: 247 | clipboard := "![[##" 248 | Send,{LControl Down}v{LControl Up} 249 | return 250 | 251 | 块引用使用说明: 252 | Run https://zhuanlan.zhihu.com/p/266909890 253 | return 254 | ;菜单--块引用-各项命令-尾 255 | 256 | 257 | ;菜单--时间戳-各项命令-尾 258 | 时间戳到剪贴板: 259 | JTZXJB020() ;时间戳到剪贴板的具体执行脚本 260 | return 261 | 262 | 输入时间戳: 263 | JTZXJB021() ;输入时间戳的具体执行脚本 264 | return 265 | 266 | 输入[[时间戳]]: 267 | JTZXJB022() ;输入[[时间戳]]的具体执行脚本 268 | return 269 | ;菜单--时间戳-各项命令-尾 270 | 271 | 272 | ;菜单--菜单组最高层A-各项命令-头 273 | 用Everything搜索: 274 | JTZXJB023() ;用Everything搜索的具体执行脚本 275 | return 276 | 277 | 用Obsidian搜索: 278 | JTZXJB024() ;用Obsidian搜索的具体执行脚本 279 | return 280 | 281 | 剪贴板搜索: 282 | JTZXJB025() ;剪贴板搜索的具体执行脚本 283 | return 284 | 285 | ;菜单--菜单组最高层A-各项命令-尾 286 | 287 | 288 | ;菜单--摘录到Obsidian--各项命令-头 289 | 290 | 摘录到Obsidian: 291 | JTZXJB026() ;摘录到Obsidian的具体执行脚本 292 | return 293 | 294 | QQ聊天窗摘录到Ob: 295 | JTZXJB033() 296 | return 297 | 298 | ;菜单--摘录到Obsidian--各项命令-尾 299 | 300 | 301 | ;菜单--双向跳转-各项命令-头 302 | Obsidian-PotPlayer视频: 303 | JTZXJB030() 304 | return 305 | 306 | Obsidian-Chrome视频: 307 | JTZXJB039() 308 | return 309 | 310 | Obsidian-ANKI: 311 | JTZXJB031() 312 | return 313 | 314 | Obsidian-PDF: 315 | JTZXJB032() 316 | return 317 | 318 | Obsidian-MindManager: 319 | JTZXJB034() 320 | return 321 | 322 | MindManager-PDF: 323 | JTZXJB038() 324 | return 325 | ;菜单--双向跳转-各项命令-尾 326 | 327 | ;菜单-编辑子菜单---各项命令--头 328 | 329 | 转为新笔记: 330 | JTZXJB037() 331 | return 332 | 333 | 文本全局修改: 334 | JTZXJB035() 335 | return 336 | 337 | 选择库目录: 338 | JTZXJB036() 339 | return 340 | ;菜单-编辑子菜单---各项命令--尾 341 | 342 | ;OCR截图-头 343 | 截图到剪贴板: ;利用的是picpick 344 | send, {F5} 345 | return 346 | 347 | OCR识别: ;利用的是天若识别 348 | send, {F4} 349 | return 350 | ;OCR截图-尾 351 | 352 | 有道OCR翻译: 353 | TZXJB040() 354 | return 355 | 356 | 有道翻译: 357 | TZXJB041() 358 | return 359 | 360 | ;菜单--威廉助手子菜单--各项命令--头 361 | 跳转知乎详细说明: 362 | JTZXJB027() ;跳转知乎详细说明的具体执行脚本 363 | return 364 | 365 | 跳转QQ群1026788769: 366 | JTZXJB028() ;跳转QQ群1026788769的具体执行脚本 367 | return 368 | ;菜单--威廉助手子菜单--各项命令--尾 369 | 370 | 371 | ;-----各命令项-----尾 372 | 373 | 374 | 375 | 376 | 377 | ;-----具体执行脚本区-----头 378 | 379 | 380 | ;菜单--Obsidian语法-命令执行-头 381 | JTZXJB001() ;[[]]的具体执行脚本001 382 | { 383 | clipboard := "" ;清空剪贴板,非OB软件编辑时剪贴板未清空会出现多余内容 384 | Send,{LControl Down}c{LControl Up} ;复制到内容到剪贴板 385 | Sleep, 100 386 | 387 | PDRN := RegExMatch(clipboard, "m).*\r\n$") 388 | ;判断RN是否包含换行符和回车符合内容 m模式进行 389 | ;两个正则都可以^[^\n]*\r\n$ .*\r\n$ 390 | 391 | if (PDRN > 0){ ;如果包含这些符号(就判断为空值),直接输入符号 392 | clipboard := "[[]]" 393 | ;如果包含回车和换行,剪贴板变成[[]],后边直接粘贴,使用send会跟随大小写 394 | } 395 | else{ ;如果没有包含回车或换行 396 | FoundPos := RegExMatch(clipboard, "\[\[.*\]\]") ;判断剪贴板是否有符号 397 | if (FoundPos > 0) 398 | { 399 | clipboard := RegExReplace(clipboard, "\[\[|\]\]", "") 400 | ;如果有就清除剪贴板内容[[]]] 401 | } 402 | else ;如果没有就加上 403 | { 404 | clipboard := RegExReplace(clipboard, "m)\s$", "") 405 | ;空白字符删除 406 | clipboard := RegExReplace(clipboard, "m)^", "[[") 407 | ;开头替换为 408 | clipboard := RegExReplace(clipboard, "m)$", "]]") ;尾部替换为 409 | } 410 | } 411 | Send, {LControl Down}v{LControl Up} 412 | Send, {Left 2} 413 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 414 | } 415 | return 416 | 417 | JTZXJB002() ;![[]]的具体执行脚本 418 | { 419 | clipboard := "" ;清空剪贴板,非OB软件编辑时剪贴板未清空会出现多余内容 420 | Send,{LControl Down}c{LControl Up} ;复制到内容到剪贴板 421 | Sleep, 100 422 | 423 | PDRN := RegExMatch(clipboard, "m).*\r\n$") 424 | ;判断RN是否包含换行符和回车符合内容 m模式进行 425 | ;两个正则都可以^[^\n]*\r\n$ .*\r\n$ 426 | 427 | if (PDRN > 0){ ;如果包含这些符号(就判断为空值),直接输入符号 428 | clipboard := "![[]]" 429 | ;如果包含回车和换行,剪贴板变成[[]],后边直接粘贴,使用send会跟随大小写 430 | } 431 | else{ ;如果没有包含回车或换行 432 | FoundPos := RegExMatch(clipboard, "\!\[\[.*\]\]") ;判断剪贴板是否有符号 433 | if (FoundPos > 0) 434 | { 435 | clipboard := RegExReplace(clipboard, "\!\[\[|\]\]", "") 436 | ;如果有就清除剪贴板内容[[]]] 437 | } 438 | else ;如果没有就加上 439 | { 440 | clipboard := RegExReplace(clipboard, "m)\s$", "") 441 | ;空白字符删除 442 | clipboard := RegExReplace(clipboard, "m)^", "![[") 443 | ;开头替换为 444 | clipboard := RegExReplace(clipboard, "m)$", "]]") ;尾部替换为 445 | } 446 | } 447 | Send, {LControl Down}v{LControl Up} 448 | Send, {Left 2} 449 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 450 | } 451 | 452 | JTZXJB003() ;[[#]]的具体执行脚本 453 | { 454 | clipboard := "" ;清空剪贴板,非OB软件编辑时剪贴板未清空会出现多余内容 455 | Send,{LControl Down}c{LControl Up} ;复制到内容到剪贴板 456 | Sleep, 100 457 | 458 | PDRN := RegExMatch(clipboard, "m).*\r\n$") 459 | ;判断RN是否包含换行符和回车符合内容 m模式进行 460 | ;两个正则都可以^[^\n]*\r\n$ .*\r\n$ 461 | 462 | if (PDRN > 0){ ;如果包含这些符号(就判断为空值),直接输入符号 463 | clipboard := "![[#]]" 464 | Send, {LControl Down}v{LControl Up} 465 | Send, {Left 3} 466 | ;如果包含回车和换行,剪贴板变成[[]],后边直接粘贴,使用send会跟随大小写 467 | } 468 | else{ ;如果没有包含回车或换行 469 | FoundPos := RegExMatch(clipboard, "\!\[\[.*\#]\]") ;判断剪贴板是否有符号 470 | if (FoundPos > 0) 471 | { 472 | clipboard := RegExReplace(clipboard, "\!\[\[|\#\]\]", "") 473 | ;如果有就清除剪贴板内容[[]]] 474 | Send, {LControl Down}v{LControl Up} 475 | } 476 | else ;如果没有就加上 477 | { 478 | clipboard := RegExReplace(clipboard, "m)\s$", "") 479 | ;空白字符删除 480 | clipboard := RegExReplace(clipboard, "m)^", "![[") 481 | ;开头替换为 482 | clipboard := RegExReplace(clipboard, "m)$", "#]]") ;尾部替换为 483 | Send, {LControl Down}v{LControl Up} 484 | Send, {Left 3} 485 | } 486 | } 487 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 488 | } 489 | 490 | JTZXJB004() ;TODO的具体执行脚本 491 | { 492 | clipboard := "" ;清空剪贴板,非OB软件编辑时剪贴板未清空会出现多余内容 493 | Send,{LControl Down}c{LControl Up} ;复制到内容到剪贴板 494 | Sleep, 100 495 | 496 | PDRN := RegExMatch(clipboard, "m).*\r\n$") 497 | ;判断RN是否包含换行符和回车符合内容 m模式进行 498 | ;两个正则都可以^[^\n]*\r\n$ .*\r\n$ 499 | 500 | if (PDRN > 0){ ;如果包含这些符号(就判断为空值),直接输入符号 501 | clipboard := "- [ ] " 502 | Send, {LControl Down}v{LControl Up} 503 | ;Send, {Space} 504 | ;如果包含回车和换行,剪贴板变成[[]],后边直接粘贴,使用send会跟随大小写 505 | } 506 | else{ ;如果没有包含回车或换行 507 | FoundPos := RegExMatch(clipboard, "\-[\s]\[.*\]") ;判断剪贴板是否有符号 508 | if (FoundPos > 0) 509 | { 510 | clipboard := RegExReplace(clipboard, "\-[\s]\[|\]", "") 511 | ;如果有就清除剪贴板内容[[]]] 512 | Send, {LControl Down}v{LControl Up} 513 | ;Send, {Space} 514 | } 515 | else ;如果没有就加上 516 | { 517 | clipboard := "- [ ] " 518 | Send, {LControl Down}v{LControl Up} 519 | ;Send, {Space} 520 | } 521 | } 522 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 523 | } 524 | 525 | JTZXJB005() ;脚注a的具体执行脚本 526 | { 527 | clipboard := "" ;清空剪贴板,非OB软件编辑时剪贴板未清空会出现多余内容 528 | Send,{LControl Down}c{LControl Up} ;复制到内容到剪贴板 529 | Sleep, 100 530 | 531 | PDRN := RegExMatch(clipboard, "m).*\r\n$") 532 | ;判断RN是否包含换行符和回车符合内容 m模式进行 533 | ;两个正则都可以^[^\n]*\r\n$ .*\r\n$ 534 | 535 | if (PDRN > 0){ ;如果包含这些符号(就判断为空值),直接输入符号 536 | clipboard := "[^]" 537 | Send, {LControl Down}v{LControl Up} 538 | Send, {Left 1} 539 | ;如果包含回车和换行,剪贴板变成[[]],后边直接粘贴,使用send会跟随大小写 540 | } 541 | else{ ;如果没有包含回车或换行 542 | FoundPos := RegExMatch(clipboard, "\[\^.*\]") ;判断剪贴板是否有符号 543 | if (FoundPos > 0) 544 | { 545 | clipboard := RegExReplace(clipboard, "\[\^|\]", "") 546 | ;如果有就清除剪贴板内容[[]]] 547 | Send, {LControl Down}v{LControl Up} 548 | ;Send, {Left 1} 549 | } 550 | else ;如果没有就加上 551 | { 552 | clipboard := RegExReplace(clipboard, "m)\s$", "") 553 | ;空白字符删除 554 | clipboard := RegExReplace(clipboard, "m)^", "[^") 555 | ;开头替换为 556 | clipboard := RegExReplace(clipboard, "m)$", "]") ;尾部替换为 557 | Send, {LControl Down}v{LControl Up} 558 | Send, {Left 1} 559 | } 560 | } 561 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 562 | } 563 | 564 | JTZXJB006() ;脚注b的具体执行脚本 565 | { 566 | clipboard := "" ;清空剪贴板,非OB软件编辑时剪贴板未清空会出现多余内容 567 | Send,{LControl Down}c{LControl Up} ;复制到内容到剪贴板 568 | Sleep, 100 569 | 570 | PDRN := RegExMatch(clipboard, "m).*\r\n$") 571 | ;判断RN是否包含换行符和回车符合内容 m模式进行 572 | ;两个正则都可以^[^\n]*\r\n$ .*\r\n$ 573 | 574 | if (PDRN > 0){ ;如果包含这些符号(就判断为空值),直接输入符号 575 | clipboard := "[^]:" 576 | Send, {LControl Down}v{LControl Up} 577 | Send, {Left 2} 578 | ;如果包含回车和换行,剪贴板变成[[]],后边直接粘贴,使用send会跟随大小写 579 | } 580 | else{ ;如果没有包含回车或换行 581 | FoundPos := RegExMatch(clipboard, "\[\^.*\]\:") ;判断剪贴板是否有符号 582 | if (FoundPos > 0) 583 | { 584 | clipboard := RegExReplace(clipboard, "\[\^|\]\:", "") 585 | ;如果有就清除剪贴板内容[[]]] 586 | Send, {LControl Down}v{LControl Up} 587 | ;Send, {Left 1} 588 | } 589 | else ;如果没有就加上 590 | { 591 | clipboard := RegExReplace(clipboard, "m)\s$", "") 592 | ;空白字符删除 593 | clipboard := RegExReplace(clipboard, "m)^", "[^") 594 | ;开头替换为 595 | clipboard := RegExReplace(clipboard, "m)$", "]:") ;尾部替换为 596 | Send, {LControl Down}v{LControl Up} 597 | Send, {Left 2} 598 | } 599 | } 600 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 601 | } 602 | 603 | JTZXJB007() ;加粗的具体执行脚本 604 | { 605 | clipboard := "" ;清空剪贴板,非OB软件编辑时剪贴板未清空会出现多余内容 606 | Send,{LControl Down}c{LControl Up} ;复制到内容到剪贴板 607 | Sleep, 100 608 | 609 | PDRN := RegExMatch(clipboard, "m).*\r\n$") 610 | ;判断RN是否包含换行符和回车符合内容 m模式进行 611 | ;两个正则都可以^[^\n]*\r\n$ .*\r\n$ 612 | 613 | if (PDRN > 0){ ;如果包含这些符号(就判断为空值),直接输入符号 614 | clipboard := "****" 615 | Send, {LControl Down}v{LControl Up} 616 | Send, {Left 2} 617 | ;如果包含回车和换行,剪贴板变成[[]],后边直接粘贴,使用send会跟随大小写 618 | } 619 | else{ ;如果没有包含回车或换行 620 | FoundPos := RegExMatch(clipboard, "\*\*.*\*\*") ;判断剪贴板是否有符号 621 | if (FoundPos > 0) 622 | { 623 | clipboard := RegExReplace(clipboard, "\*\*|\*\*", "") 624 | ;如果有就清除剪贴板内容[[]]] 625 | Send, {LControl Down}v{LControl Up} 626 | ;Send, {Left 2} 627 | } 628 | else ;如果没有就加上 629 | { 630 | clipboard := RegExReplace(clipboard, "m)\s$", "") 631 | ;空白字符删除 632 | clipboard := RegExReplace(clipboard, "m)^", "**") 633 | ;开头替换为 634 | clipboard := RegExReplace(clipboard, "m)$", "**") ;尾部替换为 635 | Send, {LControl Down}v{LControl Up} 636 | Send, {Left 2} 637 | } 638 | } 639 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 640 | } 641 | 642 | JTZXJB008() ;两边单引号的具体执行脚本 643 | { 644 | clipboard := "" ;清空剪贴板,非OB软件编辑时剪贴板未清空会出现多余内容 645 | Send,{LControl Down}c{LControl Up} ;复制到内容到剪贴板 646 | Sleep, 100 647 | 648 | PDRN := RegExMatch(clipboard, "m).*\r\n$") 649 | ;判断RN是否包含换行符和回车符合内容 m模式进行 650 | ;两个正则都可以^[^\n]*\r\n$ .*\r\n$ 651 | 652 | if (PDRN > 0){ ;如果包含这些符号(就判断为空值),直接输入符号 653 | clipboard := "````" ;注意``=` 不管正则非正则中``两个都是代表1个 654 | Send, {LControl Down}v{LControl Up} 655 | Send, {Left 1} 656 | ;如果包含回车和换行,剪贴板变成[[]],后边直接粘贴,使用send会跟随大小写 657 | } 658 | else{ ;如果没有包含回车或换行 659 | FoundPos := RegExMatch(clipboard, "``.*``") ;判断剪贴板是否有符号 660 | if (FoundPos > 0) 661 | { 662 | clipboard := RegExReplace(clipboard, "``|``", "") ;注意``=` 663 | ;如果有就清除剪贴板相关内容 664 | Send, {LControl Down}v{LControl Up} 665 | ;Send, {Left 2} 666 | } 667 | else ;如果没有就加上 668 | { 669 | clipboard := RegExReplace(clipboard, "m)\s$", "") 670 | ;空白字符删除 671 | clipboard := RegExReplace(clipboard, "m)^", "``") 672 | ;开头替换为 673 | clipboard := RegExReplace(clipboard, "m)$", "``") ;尾部替换为 674 | Send, {LControl Down}v{LControl Up} 675 | Send, {Left 1} 676 | } 677 | } 678 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 679 | } 680 | 681 | JTZXJB009() ;左右三引号的具体执行脚本 682 | { 683 | clipboard := "" ;清空剪贴板,非OB软件编辑时剪贴板未清空会出现多余内容 684 | Send,{LControl Down}c{LControl Up} ;复制到内容到剪贴板 685 | Sleep, 100 686 | 687 | PDRN := RegExMatch(clipboard, "m).*\r\n$") 688 | ;判断RN是否包含换行符和回车符合内容 m模式进行 689 | ;两个正则都可以^[^\n]*\r\n$ .*\r\n$ 690 | 691 | if (PDRN > 0){ ;如果包含这些符号(就判断为空值),直接输入符号 692 | clipboard := "````````````" ;注意``=` 不管正则非正则中``两个都是代表1个 693 | Send, {LControl Down}v{LControl Up} 694 | Send, {Left 3} 695 | ;如果包含回车和换行,剪贴板变成[[]],后边直接粘贴,使用send会跟随大小写 696 | } 697 | else{ ;如果没有包含回车或换行 698 | FoundPos := RegExMatch(clipboard, "``````.*``````") ;判断剪贴板是否有符号 699 | if (FoundPos > 0) 700 | { 701 | clipboard := RegExReplace(clipboard, "``````|``````", "") ;注意``=` 702 | ;如果有就清除剪贴板相关内容 703 | Send, {LControl Down}v{LControl Up} 704 | ;Send, {Left 2} 705 | } 706 | else ;如果没有就加上 707 | { 708 | clipboard := RegExReplace(clipboard, "m)\s$", "") 709 | ;空白字符删除 710 | clipboard := RegExReplace(clipboard, "m)^", "``````") 711 | ;开头替换为 712 | clipboard := RegExReplace(clipboard, "m)$", "``````") 713 | ;尾部替换为 714 | Send, {LControl Down}v{LControl Up} 715 | Send, {Left 3} 716 | } 717 | } 718 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 719 | } 720 | 721 | JTZXJB010() ;[]()的具体执行脚本 722 | { 723 | clipboard := "" ;清空剪贴板,非OB软件编辑时剪贴板未清空会出现多余内容 724 | Send,{LControl Down}c{LControl Up} ;复制到内容到剪贴板 725 | Sleep, 100 726 | 727 | PDRN := RegExMatch(clipboard, "m).*\r\n$") 728 | ;判断RN是否包含换行符和回车符合内容 m模式进行 729 | ;两个正则都可以^[^\n]*\r\n$ .*\r\n$ 730 | 731 | if (PDRN > 0){ ;如果包含这些符号(就判断为空值),直接输入符号 732 | clipboard := "[]()" 733 | Send, {LControl Down}v{LControl Up} 734 | Send, {Left 1} 735 | ;如果包含回车和换行,剪贴板变成[[]],后边直接粘贴,使用send会跟随大小写 736 | } 737 | else{ ;如果没有包含回车或换行 738 | FoundPos := RegExMatch(clipboard, "\[.*\]\(.*\)") ;判断剪贴板是否有符号 739 | if (FoundPos > 0) 740 | { 741 | clipboard := RegExReplace(clipboard, "\[|\]|\(|\)", "") ;\是转义符 |是或 742 | ;如果有就清除剪贴板内容[[]]] 743 | Send, {LControl Down}v{LControl Up} 744 | ;Send, {Left 2} 745 | } 746 | else ;如果没有就加上 747 | { 748 | clipboard := RegExReplace(clipboard, "m)\s$", "") 749 | ;空白字符删除 750 | clipboard := RegExReplace(clipboard, "m)^", "[](") 751 | ;开头替换为 752 | clipboard := RegExReplace(clipboard, "m)$", ")") ;尾部替换为 753 | Send, {LControl Down}v{LControl Up} 754 | ;Send, {Left 1} 755 | } 756 | } 757 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 758 | } 759 | 760 | JTZXJB011() ;[](file:///)的具体执行脚本 761 | { 762 | clipboard := "" ;清空剪贴板,非OB软件编辑时剪贴板未清空会出现多余内容 763 | Send,{LControl Down}c{LControl Up} ;复制到内容到剪贴板 764 | Sleep, 100 765 | 766 | PDRN := RegExMatch(clipboard, "m).*\r\n$") 767 | ;判断RN是否包含换行符和回车符合内容 m模式进行 768 | ;两个正则都可以^[^\n]*\r\n$ .*\r\n$ 769 | 770 | if (PDRN > 0){ ;如果包含这些符号(就判断为空值),直接输入符号 771 | clipboard := "[](file:///)" 772 | Send, {LControl Down}v{LControl Up} 773 | Send, {Left 1} 774 | ;如果包含回车和换行,剪贴板变成[[]],后边直接粘贴,使用send会跟随大小写 775 | } 776 | else{ ;如果没有包含回车或换行 777 | FoundPos := RegExMatch(clipboard, "\[\]\(file:///.*\)") ;判断剪贴板是否有符号 778 | if (FoundPos > 0) 779 | { 780 | clipboard := RegExReplace(clipboard, "\[\]\(file:///|\)", "") 781 | ;如果有就清除剪贴板内容[[]]] 782 | Send, {LControl Down}v{LControl Up} 783 | ;Send, {Left 2} 784 | } 785 | else ;如果没有就加上 786 | { 787 | clipboard := RegExReplace(clipboard, "m)\s$", "") 788 | ;空白字符删除 789 | clipboard := RegExReplace(clipboard, "m)^", "[](file:///") 790 | ;开头替换为 791 | clipboard := RegExReplace(clipboard, "m)$", ")") ;尾部替换为 792 | Send, {LControl Down}v{LControl Up} 793 | Send, {Left 1} 794 | } 795 | } 796 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 797 | } 798 | 799 | JTZXJB012() ;iframe的具体执行脚本 800 | { 801 | d = ;需给%转义` 802 | clipboard := "" ;清空剪贴板,非OB软件编辑时剪贴板未清空会出现多余内容 803 | Send,{LControl Down}c{LControl Up} ;复制到内容到剪贴板 804 | Sleep, 100 805 | jtb := clipboard ;剪贴板 远内容 806 | ;MsgBox, % jtb 807 | Sleep, 100 808 | 809 | PDRN := RegExMatch(clipboard, "m).*\r\n$") 810 | if (PDRN > 0){ ;如果包含这些符号(就判断为空值),直接输入符号 811 | A1 = 819 | clipboard := % A2 820 | Send, {LControl Down}v{LControl Up} ;A2内容贴出 821 | Sleep, 10 822 | Send, {Left 11} 823 | } 824 | else 825 | { 826 | A1 = 834 | clipboard := % A2 835 | Send,{LControl Down}v{LControl Up} ;A2内容贴出 836 | Sleep, 10 837 | Send, {Left 11} 838 | } 839 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 840 | } 841 | 842 | JTZXJB013() ;1.的具体执行脚本 843 | { 844 | d = 1. 845 | clipboard = %d% ;剪贴板复制 846 | Send,{LControl Down}v{LControl Up}{Space} 847 | } 848 | 849 | JTZXJB014() ;>的具体执行脚本 850 | { 851 | d = > 852 | clipboard = %d% ;剪贴板复制 853 | Send,{LControl Down}v{LControl Up}{Space} 854 | } 855 | 856 | JTZXJB015() ;下划线的具体执行脚本 857 | { 858 | d = 859 | clipboard := "" ;清空剪贴板,非OB软件编辑时剪贴板未清空会出现多余内容 860 | Send,{LControl Down}c{LControl Up} ;复制到内容到剪贴板 861 | Sleep, 100 862 | 863 | PDRN := RegExMatch(clipboard, "m).*\r\n$") 864 | ;判断RN是否包含换行符和回车符合内容 m模式进行 865 | ;两个正则都可以^[^\n]*\r\n$ .*\r\n$ 866 | 867 | if (PDRN > 0){ ;如果包含这些符号(就判断为空值),直接输入符号 868 | clipboard := "" 869 | Send, {LControl Down}v{LControl Up} 870 | Send, {Left 4} 871 | ;如果包含回车和换行,剪贴板变成[[]],后边直接粘贴,使用send会跟随大小写 872 | } 873 | else{ ;如果没有包含回车或换行 874 | FoundPos := RegExMatch(clipboard, ".*") ;判断剪贴板是否有符号 875 | if (FoundPos > 0) 876 | { 877 | clipboard := RegExReplace(clipboard, "|", "") 878 | ;如果有就清除剪贴板内容[[]]] 879 | Send, {LControl Down}v{LControl Up} 880 | ;Send, {Left 2} 881 | } 882 | else ;如果没有就加上 883 | { 884 | clipboard := RegExReplace(clipboard, "m)\s$", "") 885 | ;空白字符删除 886 | clipboard := RegExReplace(clipboard, "m)^", "") 887 | ;开头替换为 888 | clipboard := RegExReplace(clipboard, "m)$", "") ;尾部替换为 889 | Send, {LControl Down}v{LControl Up} 890 | Send, {Left 4} 891 | } 892 | } 893 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 894 | } 895 | 896 | JTZXJB016() ;""的具体执行脚本 897 | { 898 | d = "" 899 | d1 = " 900 | ;%d% ="" %d1% 901 | ;MsgBox, % d 902 | clipboard := "" ;清空剪贴板,非OB软件编辑时剪贴板未清空会出现多余内容 903 | Send,{LControl Down}c{LControl Up} ;复制到内容到剪贴板 904 | Sleep, 100 905 | 906 | PDRN := RegExMatch(clipboard, "m).*\r\n$") 907 | ;判断RN是否包含换行符和回车符合内容 m模式进行 908 | ;两个正则都可以^[^\n]*\r\n$ .*\r\n$ 909 | 910 | if (PDRN > 0) 911 | { ;如果包含这些符号(就判断为空值),直接输入符号 912 | clipboard := % d 913 | Send, {LControl Down}v{LControl Up} 914 | Send, {Left 1} 915 | ;如果包含回车和换行,剪贴板变成[[]],后边直接粘贴,使用send会跟随大小写 916 | } 917 | else{ ;如果没有包含回车或换行 918 | FoundPos := InStr(Clipboard,"""") ;查找是否包含"" 919 | ;FoundPos := RegExMatch(clipboard, " .* ") 920 | if (FoundPos > 0) 921 | { 922 | ;MsgBox, 有""" 923 | clipboard := RegExReplace(clipboard,"""") ;把引号替换为空 924 | ;clipboard :=RegExReplace(clipboard, " \x22 ", "") ;这个方式 925 | Send, {LControl Down}v{LControl Up} 926 | ;Send, {Left 1} 927 | return 928 | } 929 | else 930 | { 931 | Send, % d1 932 | Send, {LControl Down}v{LControl Up} 933 | Send, % d1 934 | Send, {Left 1} 935 | return 936 | } 937 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 938 | } 939 | } 940 | 941 | JTZXJB017() ;高亮的具体执行脚本 942 | { 943 | clipboard := "" ;清空剪贴板,非OB软件编辑时剪贴板未清空会出现多余内容 944 | Send,{LControl Down}c{LControl Up} ;复制到内容到剪贴板 945 | Sleep, 100 946 | 947 | PDRN := RegExMatch(clipboard, "m).*\r\n$") 948 | ;判断RN是否包含换行符和回车符合内容 m模式进行 949 | ;两个正则都可以^[^\n]*\r\n$ .*\r\n$ 950 | 951 | if (PDRN > 0){ ;如果包含这些符号(就判断为空值),直接输入符号 952 | clipboard := "====" 953 | Send, {LControl Down}v{LControl Up} 954 | Send, {Left 2} 955 | ;如果包含回车和换行,剪贴板变成[[]],后边直接粘贴,使用send会跟随大小写 956 | } 957 | else{ ;如果没有包含回车或换行 958 | FoundPos := RegExMatch(clipboard, "==.*==") ;判断剪贴板是否有符号 959 | if (FoundPos > 0) 960 | { 961 | clipboard := RegExReplace(clipboard, "==|==", "") 962 | ;如果有就清除剪贴板内容[[]]] 963 | Send, {LControl Down}v{LControl Up} 964 | ;Send, {Left 2} 965 | } 966 | else ;如果没有就加上 967 | { 968 | clipboard := RegExReplace(clipboard, "m)\s$", "") 969 | ;空白字符删除 970 | clipboard := RegExReplace(clipboard, "m)^", "==") 971 | ;开头替换为 972 | clipboard := RegExReplace(clipboard, "m)$", "==") ;尾部替换为 973 | Send, {LControl Down}v{LControl Up} 974 | Send, {Left 2} 975 | } 976 | } 977 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 978 | } 979 | 980 | JTZXJB018() ;NEAR的具体执行脚本 981 | { 982 | d = NEAR 983 | clipboard = %d% ;剪贴板复制 984 | Send,{LControl Down}v{LControl Up} 985 | } 986 | 987 | JTZXJB019() ;#打开的窗口的具体执行脚本 988 | { 989 | d = #打开的窗口 990 | clipboard = %d% ;剪贴板复制 991 | Send,{LControl Down}v{LControl Up} 992 | } 993 | ;菜单--Obsidian语法-命令执行-尾 994 | 995 | 996 | ;菜单--时间戳-命令执行-头 997 | JTZXJB020() ;时间戳到剪贴板的具体执行脚本 998 | { 999 | d = %A_YYYY%%A_MM%%A_DD%%A_Hour%%A_Min%%A_Sec% 1000 | clipboard = %d% ;剪贴板复制 1001 | } 1002 | 1003 | JTZXJB021() ;输入时间戳的具体执行脚本 1004 | { 1005 | d = %A_YYYY%%A_MM%%A_DD%%A_Hour%%A_Min%%A_Sec% 1006 | clipboard = %d% ;剪贴板复制 1007 | Send,{LControl Down}v{LControl Up} 1008 | } 1009 | 1010 | JTZXJB022() ;输入[[时间戳]]的具体执行脚本 1011 | { 1012 | d = %A_YYYY%%A_MM%%A_DD%%A_Hour%%A_Min%%A_Sec% 1013 | clipboard = [`[%d%`]`] 1014 | Send,{LControl Down}v{LControl Up} 1015 | } 1016 | ;菜单--时间戳-命令执行-尾 1017 | 1018 | 1019 | 1020 | 1021 | ;菜单--菜单组最高层A-命令执行-头 1022 | 1023 | 1024 | JTZXJB023() ;用Everything搜索的具体执行脚本 1025 | { 1026 | Process,Exist, Everything.exe ;检查进程是否存在 1027 | if ErrorLevel { ;检查进程是否存在 用ErrorLevel判断-头 1028 | 1029 | ;执行快捷键CTRL+c打开复制选中内容 1030 | Send, {LControl Down}c{LControl Up} 1031 | 1032 | ;下边这部分是让QQNRHQ运行完再接着运行下边的代码,否则两边同时跑会冲突导致QQNRHQ失效 1033 | ;MsgBox, % K ;判断返回值是什么 1034 | ;对QQ复制的加强项 1035 | K := QQNRHQ() 1036 | if ( K = "") 1037 | 1038 | ;QQNRHQ()是JTZXJB023()的子函数 判断是否是QQ,是就鼠标获取QQ聊天窗口框选内容 1039 | ;这标识QQNRHQ运行完后再运行 1040 | { 1041 | 1042 | ;执行快捷键CTRL+k打开Everything 1043 | Send, {LControl Down}k{LControl Up} 1044 | Sleep, 200 ;给一个开启缓冲时间,否则下边的检查会被跳过 1045 | 1046 | ;检查进程是否存在 用ErrorLevel判断-尾 1047 | ;if WinActive("ahk_exe Everything.exe."){ ;判断窗口被打开才执行操作,这个命令容易失效停用 1048 | WinGet, active_id, ProcessName, A ;获取活动窗口进程名,赋值到active_id 1049 | if (active_id ="Everything.exe") ;IF 判断是否为Obsidian 1050 | { 1051 | 1052 | ;MsgBox, The active window's 进程名 is Everything.exe. ;提示当前活动窗口进程名 1053 | Send, {LControl Down}v{LControl Up} 1054 | ;执行快捷键CTRL+v粘贴内容 1055 | 1056 | ;2个回车打开 1057 | ;Sleep, 10 1058 | ;Send, {Enter 2} 1059 | return 1060 | } 1061 | } 1062 | return 1063 | } 1064 | } ;检查进程是否存在 用ErrorLevel判断-尾 1065 | 1066 | QQNRHQ() 1067 | ;JTZXJB023()的子函数 判断是否是QQ,是就鼠标获取QQ聊天窗口框选内容 1068 | ;关联--QQNRHQ() 运行失效的解决办法20201010162223.mmap 1069 | { 1070 | 1071 | WinGet, active_id, ProcessName, A ;获取活动窗口进程名,赋值到active_id 1072 | if (active_id ="QQ.exe") ;IF 判断是否为Obsidian 1073 | { 1074 | 1075 | ;建立坐标模式否则下边鼠标获取坐标也不知道向那移动 1076 | CoordMode, Menu, Screen ;坐标模式,作用于菜单,屏幕上这个区域 1077 | CoordMode, Mouse, Screen ;坐标模式,作用于鼠标,屏幕这个区域 1078 | 1079 | WinActivate,ahk_exe QQ.exe ;激活一次防止二次复制丢失 1080 | ;获取最开始点击鼠标中键的位置,鼠标移动过去,利用右键进行复制 1081 | global MMX ;获取全局变量MMX 最开始点击中键的位置 1082 | global MMY ;获取全局变量MMY 最开始点击中键的位置 1083 | ;MsgBox,鼠标位置X"%MMX%"鼠标位置Y"%MMY%" ;显示获取的位置 1084 | ;MsgBox, 鼠标将移动 1085 | SetDefaultMouseSpeed, 0 ; 瞬时移动鼠标必须在MouseMove上 1086 | MouseMove, MMX-2,MMY ;鼠标移动到 X是左右 Y是上下 ,X+10 就是向右边移动10点 1087 | Sleep, 50 1088 | Send, {RButton Down}{RButton Up} ;鼠标右键 唤起选单, 1089 | 1090 | ;飞跃识图1/2--QQ聊天窗摘录到Ob--识别【复制(C)】信息 1091 | Text:="|<>**25$69.00000000000000000000000000000000000000000000000000000000000000000000000k0MA0000000Dzj5aDM00001UNzhbBU0000TzP5gkA00001UPzhg1U0000Dz35tU600000M1zdA0k00007z/Rsk600003clPBbBU0000Fw/lgTA00001swMtU1U000000007zs0000000000000000000000000000000000000000000000000000000000004" 1092 | 1093 | 1094 | ;MsgBox, 飞跃识图1/2--->"%Text%" 1095 | ;飞跃识图2/2--QQ聊天窗摘录到Ob--定位并移动到 20201010140041 1096 | Sleep, 100 ;这步是必要的没有就会失效 1097 | if (ok:=FindText(68-150000, 233-150000, 68+150000, 233+150000, 0, 0, Text)) ;运行完FindText再运行后边的这段代码意思 1098 | { 1099 | 1100 | CoordMode, Mouse,Screen 1101 | X:=ok.1.x, Y:=ok.1.y, Comment:=ok.1.id 1102 | ; Click, %X%, %Y% 1103 | 1104 | MouseMove, X+0, Y ,0 ;x y可以调节 1105 | Send,{Click, 1} ;1234567890 1106 | ;MsgBox, % ok 1107 | ;MsgBox, % ok 1108 | 1109 | } 1110 | SB := Round(ok.MaxIndex()) 1111 | ;MsgBox, 是否识别成功 "%SB%" ;Round(ok.MaxIndex())=0就是没找到 1112 | 1113 | 1114 | Sleep, 100 1115 | ; Send, {Down} ;下;此处存在问题 OB-20201006000124 1116 | ;Send, {Enter} 1117 | 1118 | ;MouseMove, MMX+50,MMY+31 1119 | ;鼠标移动到 X是左右 Y是上下 ,X+10 就是向右边移动10点 1120 | ;鼠标直接移动到界面进行点击"复制",但如果点击的是下边就会失效 1121 | ;Sleep, 10 1122 | ;Send, {LButton Down}{LButton Up} 1123 | ;Sleep, 100 1124 | 1125 | ;用命令直接点击控件 1126 | ;ControlClick, 复制, ahk_exe QQ.exe 1127 | ;没有效果,因为识别不了,QQ用的不是类名(ClassNN 1128 | 1129 | return 1130 | } 1131 | return 1132 | } 1133 | 1134 | 1135 | JTZXJB024() ;用Obsidian搜索的具体执行脚本 1136 | { 1137 | Send, {LControl Down}c{LControl Up} ;复制内容 1138 | 1139 | ;对QQ复制的加强项 1140 | QQNRHQ() ;JTZXJB023()的子函数 判断是否是QQ,是就鼠标获取QQ聊天窗口框选内容 1141 | 1142 | WinActivate,ahk_exe Obsidian.exe ;激活指定窗口 1143 | Sleep, 100 ;太快下边的判断会被跳过 1144 | 1145 | ;if WinActive("ahk_exe obsidian.exe") 1146 | ;判断窗口被打开才执行操作,WinActive稳定性差替换为下边两行 1147 | WinGet, active_id, ProcessName, A ;获取活动窗口进程名,赋值到active_id 1148 | if (active_id ="Obsidian.exe") ;IF 判断是否为Obsidian 1149 | { 1150 | ;Sleep, 30 1151 | Send, {LControl Down}{LShift Down}f{LShift Up}{LControl Up} ;激活搜索框 1152 | Send, {LControl Down}a{LControl Up} 1153 | Send, {BackSpace} ;清空搜索框 1154 | Send, {LControl Down}v{LControl Up}{Enter} 1155 | } 1156 | } 1157 | 1158 | 1159 | JTZXJB025() ;剪贴板搜索的具体执行脚本 1160 | { 1161 | Send, {LControl Down}f{LControl Up} 1162 | Sleep, 50 ;太快窗口没打开就粘贴了 1163 | Send, {LControl Down}v{LControl Up} 1164 | Sleep, 10 1165 | Send, {Enter} 1166 | } 1167 | 1168 | 1169 | ;菜单--菜单组最高层A--命令执行-尾 1170 | 1171 | 1172 | ;菜单--摘录到Obsidian--命令执行-头 1173 | 1174 | JTZXJB026() ;摘录到Obsidian的具体执行脚本 1175 | { 1176 | ;复制和QQ复制共存的情况下二次复制同样内容会产生问题,因为学习是用QQ把QQ的先停止。 1177 | ;QQ的单独做一个项目即可 1178 | Send, {LControl Down}c{LControl Up} ;复制 1179 | 1180 | ;对QQ复制的加强项 1181 | ;QQNRHQ() 1182 | ;JTZXJB023()的子函数 判断是否是QQ,是就鼠标获取QQ聊天窗口框选内容 1183 | 1184 | WinActivate,ahk_exe Obsidian.exe ;激活指定窗口 1185 | Sleep, 200 1186 | 1187 | ;if WinActive("ahk_exe obsidian.exe") 1188 | ;判断窗口被打开才执行操作 ;WinActive有时有问题,替换为下边两个 1189 | WinGet, active_id, ProcessName, A ;获取活动窗口进程名,赋值到active_id 1190 | if (active_id ="Obsidian.exe") ;IF 判断是否为Obsidian 1191 | { 1192 | ;MsgBox,XXX 1193 | ;Sleep, 30 1194 | ;激活输入框 ctrl+e两次 1195 | Send,^e^e^v 1196 | ;Sleep, 30 1197 | ;Send, {LControl Down}e{LControl Up} {LControl Down}e{LControl Up} {LControl Down}v{LControl Up} 1198 | return 1199 | } 1200 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 1201 | return 1202 | } 1203 | return 1204 | 1205 | JTZXJB033() ;QQ聊天窗摘录到Ob的具体命令执行 1206 | { 1207 | K := QQNRHQ() 1208 | if ( K = "") ;QQNRHQ运行完候再运行下边代码 1209 | { 1210 | ;JTZXJB023()的子函数 判断是否是QQ,是就鼠标获取QQ聊天窗口框选内容 1211 | Sleep, 100 1212 | WinActivate,ahk_exe Obsidian.exe ;激活指定窗口 1213 | Sleep, 100 1214 | 1215 | ;if WinActive("ahk_exe obsidian.exe") 1216 | ;判断窗口被打开才执行操作 ;WinActive有时有问题,替换为下边两个 1217 | WinGet, active_id, ProcessName, A ;获取活动窗口进程名,赋值到active_id 1218 | if (active_id ="Obsidian.exe") ;IF 判断是否为Obsidian 1219 | { 1220 | ;MsgBox,XXX 1221 | ;Sleep, 30 1222 | ;激活输入框 ctrl+e两次 1223 | Send,^e^e^v 1224 | ;Sleep, 30 1225 | ;Send, {LControl Down}e{LControl Up} {LControl Down}e{LControl Up} {LControl Down}v{LControl Up} 1226 | return 1227 | } 1228 | ;clipboard := "" ;不要清空剪贴板,尾行复制后内容被清空还能还原 1229 | return 1230 | } 1231 | } 1232 | return 1233 | 1234 | 1235 | ;菜单--摘录到Obsidian--各项执行-尾 1236 | 1237 | ;菜单--双向跳转-命令执行-头 1238 | 1239 | JTZXJB030() ;Obsidian-PotPlayer视频的具体执行脚本 1240 | { 1241 | 1242 | WinGet, active_id, ProcessName, A ;获取活动窗口进程名,赋值到active_id 1243 | if (active_id ="Obsidian.exe") ;如果当前窗口是Obsidian 1244 | { 1245 | Send, {LControl Down}c{LControl Up} 1246 | Sleep, 100 1247 | WinActivate, ahk_exe PotPlayerMini64.exe 1248 | WinGet, active_id, ProcessName, A 1249 | if (active_id ="PotPlayerMini64.exe") 1250 | { 1251 | WinActivate, ahk_class #32770 ;激活一下子窗口 1252 | WinGetClass, active_idb, A ;查看是否是子窗口 1253 | ;MsgBox, 这是64位是否获取了class #32770--->"%active_idb%" 1254 | if (active_idb = "#32770") ;判断窗口是否是 ahk_class #32770 1255 | { 1256 | ;Sleep, 10 1257 | ;MsgBox, 64位子窗口已经激活 1258 | ;Send, {Escape} 1259 | ;Send,{LAlt Down}9{LAlt Up} ;退出再打开,把光标移到到搜索框 1260 | ;Send,{LAlt Down}9{LAlt Up} 1261 | ;Send, !9!9 ;测试代码简洁是否运行效率高 1262 | 1263 | ;飞跃识图--potplayer--搜索:--1/2 1264 | Text搜索:="|<>*155$66.0000000000000000000007000000000040000000000400000000004000000000040004Q0800040004rbzk004000TYU800040004zbzk0040004YYWFU040007zVw1U04000A40H0004000JzVjU0040004l3sE0040004O1/1U040004A68lU04000RnwsM00400000000004000000000040000000000400000000004000000000040000000000700000000000U" 1265 | 1266 | Sleep, 50 1267 | ;飞跃识图--potplayer--搜索:--1/2 1268 | if (ok:=FindText(368-150000, 566-150000, 368+150000, 566+150000, 0, 0, Text搜索)) 1269 | { 1270 | CoordMode, Mouse,Screen 1271 | X:=ok.1.x, Y:=ok.1.y, Comment:=ok.1.id 1272 | ; Click, %X%, %Y% 1273 | MouseMove, X+50, Y ,0 1274 | Send,{Click, 2} 1275 | Send, {LControl Down}v{LControl Up} 1276 | Send, {Enter} 1277 | } 1278 | Sleep, 100 1279 | ;Send,{LAlt Down}99{LAlt Up} ;这个代码效率更高! 1280 | ;Send, {LControl Down}av{LControl Up} 1281 | ;Send, {Enter} 1282 | return 1283 | } else 1284 | { 1285 | Send,{LAlt Down}9{LAlt Up} ;激活自定义书签 1286 | Sleep, 100 1287 | Send, {LControl Down}v{LControl Up} 1288 | Send, {Enter} 1289 | return 1290 | } 1291 | 1292 | } 1293 | else ;------------------------------------ 1294 | WinActivate, ahk_exe PotPlayerMini.exe 1295 | WinGet, active_id, ProcessName, A 1296 | if (active_id ="PotPlayerMini.exe") ;查看是否已经激活主窗口 1297 | { 1298 | ;Sleep, 200 1299 | WinActivate, ahk_class #32770 ;激活一下子窗口 1300 | WinGetClass, active_idb, A ;查看是否是子窗口 1301 | ;MsgBox, 是否获取了class#32770--->"%active_idb%" 1302 | if (active_idb = "#32770") ;判断窗口是否是 ahk_class #32770 1303 | { 1304 | ;Sleep, 100 1305 | ;MsgBox, 子窗口已经激活 1306 | ;Send,{LAlt Down}9{LAlt Up} ;退出再打开,把光标移到到搜索框 1307 | ;Send,{LAlt Down}9{LAlt Up} 1308 | ;Send, !9!9 ;长短代码差不多效果 1309 | ;飞跃识图--potplayer--搜索:--1/2 1310 | Text搜索:="|<>*155$66.0000000000000000000007000000000040000000000400000000004000000000040004Q0800040004rbzk004000TYU800040004zbzk0040004YYWFU040007zVw1U04000A40H0004000JzVjU0040004l3sE0040004O1/1U040004A68lU04000RnwsM00400000000004000000000040000000000400000000004000000000040000000000700000000000U" 1311 | 1312 | Sleep, 50 1313 | ;飞跃识图--potplayer--搜索:--1/2 1314 | if (ok:=FindText(368-150000, 566-150000, 368+150000, 566+150000, 0, 0, Text搜索)) 1315 | { 1316 | CoordMode, Mouse,Screen 1317 | X:=ok.1.x, Y:=ok.1.y, Comment:=ok.1.id 1318 | ; Click, %X%, %Y% 1319 | MouseMove, X+50, Y ,0 1320 | Send,{Click, 2} 1321 | Send, {LControl Down}v{LControl Up} 1322 | Send, {Enter} 1323 | } 1324 | 1325 | Sleep, 100 1326 | ; Send,{LAlt Down}99{LAlt Up} ;这个代码效率更高! 1327 | ;Send, {LControl Down}av{LControl Up} 1328 | ;Send, {Enter} 1329 | return 1330 | }else 1331 | { 1332 | Send,{LAlt Down}9{LAlt Up} ;激活自定义书签 1333 | Sleep, 100 1334 | Send, {LControl Down}av{LControl Up} 1335 | Send, {Enter} 1336 | return 1337 | } 1338 | 1339 | return 1340 | } 1341 | return 1342 | } ;如果是Obsidian--尾 1343 | ;MsgBox, "%active_id%" 1344 | if (active_id ="PotPlayerMini64.exe") or (active_id ="PotPlayerMini.exe") 1345 | { 1346 | JTZXJB024() 1347 | return 1348 | } 1349 | return 1350 | } 1351 | 1352 | ;Obsidian-Chrome视频 1353 | JTZXJB039() 1354 | { 1355 | ;判断是否打开,用的是下边的GITHUB的猫 1356 | TextSFDK:="|<>*133$32.0070000Tz000Dzs00DzzU07zzw03zzzU0wRls0T00T07k07k1s00w0y00DUDU03s3s00y0y00DUDU03s3s00y0T00T07s0Dk1rkTw0Cw7y01U1z00A0TU01w7k00D1s000U808" 1357 | 1358 | Send, {LControl Down}c{LControl Up} 1359 | Sleep, 100 1360 | 1361 | 1362 | WinGet, active_id, ProcessName, A ;获取活动窗口进程名,赋值到active_id 1363 | if (active_id ="Obsidian.exe") ;如果当前窗口是Obsidian 1364 | { 1365 | 1366 | WinActivate, ahk_exe chrome.exe 1367 | WinGet, active_id, ProcessName, A 1368 | if (active_id ="chrome.exe") 1369 | { 1370 | if (ok:=FindText(562-150000, 1094-150000, 562+150000, 1094+150000, 0, 0,TextSFDK)) 1371 | ;识别Yinote是否打开,用的是输入框右下角的书签和分享图标 1372 | { 1373 | CoordMode, Mouse 1374 | X:=ok.1.x, Y:=ok.1.y, Comment:=ok.1.id 1375 | ; Click, %X%, %Y% 1376 | } 1377 | Sleep, 50 1378 | 1379 | if( Round(ok.MaxIndex()) =0) ;识别到Yinote没打开 1380 | { 1381 | Ka := JTZXJB039_3() 1382 | if(K= "") ;飞跃识图打开Yinote插件 1383 | { 1384 | Send, ^f 1385 | Sleep, 100 1386 | Send, ^v 1387 | Send, {Enter,2} 1388 | } 1389 | }else ;识别到Yinote是打开的 1390 | { 1391 | Send, ^f 1392 | Sleep, 100 1393 | Send, ^v 1394 | Send, {Enter,2} 1395 | } 1396 | 1397 | return 1398 | } 1399 | } else 1400 | ;否则是谷歌浏览器的话 JTZXJB024() 开启BOSIDIAN 搜索 1401 | { 1402 | WinGet, active_id, ProcessName, A ;获取活动窗口进程名,赋值到active_id 1403 | if (active_id ="chrome.exe") ;如果当前窗口是Obsidian 1404 | { 1405 | JTZXJB024() 1406 | } 1407 | } 1408 | 1409 | 1410 | } 1411 | JTZXJB039_3() ;JTZXJB039()的子项飞跃找Yinote图标 并点击 1412 | { 1413 | ;Yinote灰度阀值60 (暗色模式) 1414 | TextASMS:="|<>*60$25.zzzzzs0Tzw0Dzz0Dzk0DzzU7zzk7zzs1zzw0DzC87zz43zzW7zzlDzzMzzzYzzzzzzzzTzzzzzzzzzzzzzzzzzzw" 1415 | 1416 | ;灰度差值50(亮色模式) 1417 | TextLSMS:="|<>**50$23.00000zzU3zzk703Xy077w0CCE0Q47ks9BtnkNvb0krDVbi8HSQ0bksz01lz03Vy070Q0C0zzw0zzU0004" 1418 | 1419 | ;暗色模式的识别和点击 1420 | if (ok:=FindText(254-150000, 439-150000, 254+150000, 439+150000, 0, 0, TextASMS)) 1421 | { 1422 | CoordMode, Mouse 1423 | X:=ok.1.x, Y:=ok.1.y, Comment:=ok.1.id 1424 | ;MouseMove, X+0, Y ,0 1425 | Click, %X%, %Y% 1426 | } 1427 | 1428 | Sleep, 100 1429 | ;亮色模式的识别和点击 1430 | if (ok:=FindText(1558-150000, 79-150000, 1558+150000, 79+150000, 0, 0, TextLSMS)) 1431 | { 1432 | CoordMode, Mouse 1433 | X:=ok.1.x, Y:=ok.1.y, Comment:=ok.1.id 1434 | ;MouseMove, X+0, Y ,0 1435 | Click, %X%, %Y% 1436 | } 1437 | 1438 | } 1439 | 1440 | 1441 | JTZXJB031() ;Obsidian-ANKI的具体执行脚本 1442 | { 1443 | WinGet, active_id, ProcessName, A ;获取活动窗口进程名,赋值到active_id 1444 | if (active_id ="Obsidian.exe") ;如果当前窗口是Obsidian 1445 | { 1446 | Send, {LControl Down}c{LControl Up} 1447 | Sleep, 200 1448 | WinActivate, ahk_exe anki.exe 1449 | WinGet, active_id, ProcessName, A 1450 | if (active_id ="anki.exe") 1451 | { ;20200923175219 1452 | Sleep, 100 1453 | Send, {Escape}b 1454 | Sleep, 200 1455 | Send, {LControl Down}a{LControl Up} 1456 | Send, {LControl Down}v{LControl Up} 1457 | Send, {Enter} 1458 | return 1459 | } 1460 | } 1461 | if (active_id ="anki.exe") ;如果当前窗口是anki.exe 1462 | { 1463 | JTZXJB024() ;激活Obsidian搜索 1464 | } 1465 | 1466 | } 1467 | 1468 | 1469 | JTZXJB032() ;Obsidian-PDF的具体执行脚本---头 1470 | { 1471 | Send, {LControl Down}c{LControl Up} 1472 | Sleep, 200 1473 | WinGet, active_id, ProcessName, A ;获取活动窗口进程名,赋值到active_id 1474 | ;MsgBox, The active window's 进程名 is "%active_id%". ;提示当前活动窗口进程名 1475 | 1476 | if (active_id ="Obsidian.exe") ;IF 判断是否为Obsidian 1477 | { ;如果是Obsidian--头 1478 | 1479 | WinActivate, ahk_exe Acrobat.exe ;激活AcrobatPDF 1480 | ;WinActivate, ahk_exe 2345PdfReader.exe ;激活2345PdfReaderexe 1481 | Sleep, 100 1482 | WinGet, active_id, ProcessName, A ;检查是否激活为活动窗口是什么赋值到active_id 1483 | if (active_id ="Acrobat.exe") ;oror(active_id ="2345PdfReader.exe") 1484 | { ;激活搜索框粘贴搜索 1485 | JHSSKZT() 1486 | } 1487 | else 1488 | { ;1else--头 1489 | WinActivate, ahk_exe FoxitPhantom.exe ;激活FoxitPhantom.exe 1490 | WinActivate, ahk_class classFoxitPhantomPersonal ;激活classFoxitPhantomPersonal 因为exe可能激活不了,所以后补一个方式 1491 | Sleep, 100 1492 | WinGet, active_id, ProcessName, A ;检查是否激活为活动窗口是什么赋值到active_id 1493 | if (active_id ="FoxitPhantom.exe") 1494 | { 1495 | JHSSKZT() 1496 | } 1497 | else 1498 | { ;2else--头 1499 | WinActivate, ahk_exe 2345PdfReader.exe ;激活FoxitPhantom.exe 1500 | Sleep, 100 1501 | WinGet, active_id, ProcessName, A ;检查是否激活为活动窗口是什么赋值到active_id 1502 | if (active_id ="2345PdfReader.exe") 1503 | { 1504 | JHSSKZT() 1505 | } 1506 | return ;到这就结束,否则又循环到 1else--头 去了 1507 | } ;2else--尾 1508 | } ;1else--尾 1509 | return 1510 | } ;如果是Obsidian--尾 1511 | 1512 | 1513 | if (active_id ="Acrobat.exe") ro (active_id ="FoxitPhantom.exe") or (active_id ="2345PdfReader.exe") ;判断是否是这三个PDF软件为活动窗口 1514 | { 1515 | WinActivate, ahk_exe Obsidian.exe ;激活Obsidian.exe 1516 | Sleep, 100 1517 | WinGet, active_id, ProcessName, A ;检查是否激活为活动窗口是什么赋值到active_id 1518 | if (active_id ="Obsidian.exe") 1519 | { 1520 | ;在Obsidian内搜索 1521 | Send, {LControl Down}{LShift Down}f{LShift Up}{LControl Up} ;激活搜索框 1522 | Send, {LControl Down}a{LControl Up} 1523 | Send, {BackSpace} ;清空搜索框 1524 | Send, {LControl Down}v{LControl Up}{Enter} 1525 | } 1526 | return 1527 | } 1528 | } 1529 | JHSSKZT() ;激活PDF搜索框,粘贴,搜索 JTZXJB032()的附属脚本 1530 | { 1531 | Send, {LControl Down}f{LControl Up} 1532 | Send, {LControl Down}v{LControl Up} 1533 | Sleep, 100 1534 | Send, {Enter} 1535 | 1536 | } 1537 | 1538 | JTZXJB034() ;Obsidian-MindManager的具体执行脚本 1539 | { 1540 | WinGet, active_id, ProcessName, A ;获取活动窗口进程名,赋值到active_id 1541 | if (active_id ="Obsidian.exe") ;如果当前窗口是Obsidian 1542 | { 1543 | Send, {LControl Down}c{LControl Up} ;复制内容 1544 | Sleep, 200 ;必要等待切换程序时间 1545 | WinActivate, ahk_exe MindManager.exe ;激活MindManager 1546 | WinGet, active_id, ProcessName, A 1547 | if (active_id ="MindManager.exe") ;判断是不是MindManager为获得窗口 1548 | { 1549 | Sleep, 200 ;必要等待程序响应时间 1550 | ;Send, {LControl Down}g{LControl Up} ;一般搜索 1551 | Send, ^+!f ;打开高级搜索 1552 | Sleep, 100 ; 1553 | Send, {LControl Down}v{LControl Up} 1554 | Send, {Enter} 1555 | return 1556 | } 1557 | } 1558 | if (active_id ="MindManager.exe") ;如果当前窗口是MindManager.exe 1559 | { 1560 | JTZXJB024() ;激活Obsidian搜索 1561 | } 1562 | 1563 | } 1564 | 1565 | 1566 | JTZXJB038() ;MindManager-PDF 1567 | { 1568 | Send, {LControl Down}c{LControl Up} 1569 | Sleep, 200 1570 | WinGet, active_id, ProcessName, A ;获取活动窗口进程名,赋值到active_id 1571 | ;MsgBox, The active window's 进程名 is "%active_id%". ;提示当前活动窗口进程名 1572 | 1573 | if (active_id ="MindManager.exe") ;IF 判断是否为MindManager.exe 1574 | { ;如果是MindManager--头 1575 | 1576 | WinActivate, ahk_exe Acrobat.exe ;激活AcrobatPDF 1577 | ;WinActivate, ahk_exe 2345PdfReader.exe ;激活2345PdfReaderexe 1578 | Sleep, 100 1579 | WinGet, active_id, ProcessName, A ;检查是否激活为活动窗口是什么赋值到active_id 1580 | if (active_id ="Acrobat.exe") ;oror(active_id ="2345PdfReader.exe") 1581 | { ;激活搜索框粘贴搜索 1582 | JHSSKZT() 1583 | } 1584 | else 1585 | { ;1else--头 1586 | WinActivate, ahk_exe FoxitPhantom.exe ;激活FoxitPhantom.exe 1587 | WinActivate, ahk_class classFoxitPhantomPersonal ;激活classFoxitPhantomPersonal 因为exe可能激活不了,所以后补一个方式 1588 | Sleep, 100 1589 | WinGet, active_id, ProcessName, A ;检查是否激活为活动窗口是什么赋值到active_id 1590 | if (active_id ="FoxitPhantom.exe") 1591 | { 1592 | JHSSKZT() 1593 | } 1594 | else 1595 | { ;2else--头 1596 | WinActivate, ahk_exe 2345PdfReader.exe ;激活FoxitPhantom.exe 1597 | Sleep, 100 1598 | WinGet, active_id, ProcessName, A ;检查是否激活为活动窗口是什么赋值到active_id 1599 | if (active_id ="2345PdfReader.exe") 1600 | { 1601 | JHSSKZT() 1602 | } 1603 | return ;到这就结束,否则又循环到 1else--头 去了 1604 | } ;2else--尾 1605 | } ;1else--尾 1606 | return 1607 | } ;如果是MindManager--尾 1608 | 1609 | 1610 | if (active_id ="Acrobat.exe") ro (active_id ="FoxitPhantom.exe") or (active_id ="2345PdfReader.exe") ;判断是否是这三个PDF软件为活动窗口 1611 | { 1612 | WinActivate, ahk_exe MindManager.exe ;激活MindManager.exe 1613 | Sleep, 100 1614 | WinGet, active_id, ProcessName, A ;检查是否激活为活动窗口是什么赋值到active_id 1615 | if (active_id ="MindManager.exe") 1616 | { 1617 | ;在MindManager内搜索 1618 | Send, ^+!f ;激活搜索框 1619 | Send, {LControl Down}a{LControl Up} 1620 | Send, {BackSpace} ;清空搜索框 1621 | Send, {LControl Down}v{LControl Up}{Enter} 1622 | } 1623 | return 1624 | } 1625 | } 1626 | 1627 | 1628 | 1629 | 1630 | ;菜单--双向跳转-命令执行-尾 1631 | 1632 | 1633 | 1634 | 1635 | 1636 | ;菜单-编辑子菜单---命令执行--头 1637 | 1638 | JTZXJB037() ;转为新笔记的具体执行脚本 ;关联-20201006190240.mmap 1639 | { 1640 | WinActivate, ahk_exe obsidian.exe ;激活ob 1641 | if WinActive("ahk_exe obsidian.exe") 1642 | { 1643 | ;clipboard := "" ;清空剪贴板 1644 | ;InputBox, UserInput, 新笔记标题, 请输入保存所选文字的新笔记的标题。,,640,125 1645 | InputBox, BJBT, 设置笔记标题,请为Obsidian内框选的内容设置一个笔记标题,标题请勿包含*"\/<>:|?。被框选的内容将成为新笔记内容(可改选/重选),[[新笔记]]将会出现在当前笔记下【如果光标未选任何内容将默认为获取“整行/段内容”】,,350,200,,,Locale 1646 | if ErrorLevel 1647 | return ;如果点击取消则退出 1648 | else 1649 | { 1650 | WinActivate, ahk_exe obsidian.exe ;防止用户跳到其它窗口 1651 | Sleep, 100 1652 | clipboard := "" ;清空剪贴板 1653 | Sleep, 10 1654 | ;复制内容存到JTBNR 剪贴板内容 1655 | Send, ^x ;c复制选中内容,X剪贴内容, 1656 | ;直接剪切内容可防止鼠标未框选后边用标题覆盖清除失败 1657 | Sleep, 100 1658 | 1659 | 1660 | if (clipboard != "") ;如果如果复制的内容(剪贴板)不等于空 1661 | { ; 建立一个输入框让用户输入标题 1662 | 1663 | if ErrorLevel 1664 | return ;如果点击取消则退出 1665 | else 1666 | { 1667 | JTBNR := clipboard ;赋值JTBNR为剪贴板内容 1668 | WinActivate, ahk_exe obsidian.exe ;再次跳回防止用户跳到其它窗口 1669 | clipboard := "[[" BJBT "]]" ;这步同时也清空(覆盖)了被选[[这是笔记名字]]内容 1670 | Send, ^v ;这步把带双方的名字粘贴就创建了一个笔记 1671 | Sleep, 100 1672 | Send, ^n ;新建笔记本 1673 | Sleep, 300 ;这里需要多点时间,否则会被刷没 1674 | 1675 | ;命名新笔记,并粘贴内容 1676 | clipboard := BJBT 1677 | Send, ^v ;给新笔记标题命名,就进入了笔记 1678 | Send {Enter} ;回车到编辑区 1679 | Sleep, 100 1680 | clipboard := JTBNR 1681 | Send, ^v ;输入剪贴板内容 1682 | 1683 | Sleep, 100 1684 | Send, ^!{Left} ;ctrl alt 左 1685 | ;系统默认的返回按键 这里可以把^{Left} 设置到我的ahk里软件用默认即可 1686 | Sleep, 50 1687 | Send, {Left} 1688 | 1689 | return 1690 | } 1691 | 1692 | } 1693 | else 1694 | { 1695 | MsgBox, 未框选任何内容,请框选后再试。 1696 | return 1697 | } 1698 | 1699 | } return 1700 | } return 1701 | } 1702 | 1703 | 1704 | /* JTZXJB037() 之前的 1705 | { 1706 | WinActivate, ahk_exe obsidian.exe ;激活ob 1707 | if WinActive("ahk_exe obsidian.exe") 1708 | { 1709 | clipboard := "" ;清空剪贴板 1710 | 1711 | ;复制内容存到JTBNR 剪贴板内容 1712 | Send, ^c ;c复制选中内容,X剪贴内容 1713 | Sleep, 100 1714 | JTBNR := clipboard ;赋值JTBNR为剪贴板内容 1715 | 1716 | if (clipboard != "") ;如果如果复制的内容(剪贴板)不等于空 1717 | { ; 建立一个输入框让用户输入标题 1718 | ;InputBox, UserInput, 新笔记标题, 请输入保存所选文字的新笔记的标题。,,640,125 1719 | InputBox, BJBT, 请为笔记设置标题,,,400,100 1720 | if ErrorLevel 1721 | return ;如果点击取消则退出 1722 | else 1723 | clipboard := "[[" BJBT "]]" 1724 | Send, ^v ;这步把带双方的名字粘贴就创建了一个笔记 1725 | Sleep, 100 1726 | Send, ^n ;新建笔记本 1727 | Sleep, 300 ;这里需要多点时间,否则会被刷没 1728 | 1729 | ;命名新笔记,并粘贴内容 1730 | clipboard := BJBT 1731 | Send, ^v ;给新笔记标题命名,就进入了笔记 1732 | Send {Enter} ;回车到编辑区 1733 | Sleep, 100 1734 | clipboard := JTBNR 1735 | Send, ^v ;输入剪贴板内容 1736 | 1737 | Sleep, 100 1738 | Send, ^!{Left} ;ctrl alt 左 1739 | ;系统默认的返回按键 这里可以把^{Left} 设置到我的ahk里软件用默认即可 1740 | Sleep, 50 1741 | Send, {Left} 1742 | } 1743 | } 1744 | } 1745 | */ 1746 | 1747 | JTZXJB035() ;文本全局修改的具体执行脚本 1748 | { 1749 | IniRead, KWZ, %A_WorkingDir%\WLZS.ini, KWZ, key 1750 | ;读取脚本当前工作目录%A_WorkingDir%,获得设定的路径 1751 | clipboard := "" 清空剪贴板 1752 | 1753 | WinActivate, ahk_exe obsidian.exe ;激活ob 1754 | if WinActive("ahk_exe obsidian.exe") 1755 | { ;判断是否是ob 1756 | ClipSaved := ClipboardAll ;赋值ClipSaved为全部剪贴板ClipboardAll 1757 | Send, ^c ;复制选中内容 1758 | Sleep, 100 1759 | if (clipboard != "") ;如果如果复制的内容(剪贴板)不等于空 1760 | { 1761 | JTBWB := clipboard ;赋值JTBWB为剪贴板内容 1762 | FoundPos := RegExMatch(JTBWB, "\n") ;判断JTBWB是否有换行符 1763 | if (FoundPos > 0) ;多行情况保存为新笔记 1764 | { 1765 | MsgBox, 未选中内容或多行内容,请选取单行内容。 1766 | return 1767 | } 1768 | else 1769 | { 1770 | InputBox, XGHWB, 请修改内容,,,400,100,,,Locale,,%JTBWB% ;弹出JTBWB给用户修改 1771 | if ErrorLevel 1772 | ;选择取消ErrorLevel=1 确定=0 确定或取消XGHWB都会是输入值 1773 | ;MsgBox, 修改已被取消。 1774 | return ;结束 1775 | else 1776 | loop, Files,%KWZ%\*.md,R 1777 | ;获取路径下的子目录的所有.md文件 ,重复读取每个.md 1778 | { 1779 | FileEncoding ,UTF-8 1780 | ;FileEncoding为FileRead设置编码 1781 | FileRead, OutputVar, %A_LoopFileLongPath% 1782 | ;读取文件的内容到变量OutputVar 1783 | BXGWB := StrReplace(OutputVar,JTBWB,XGHWB) 1784 | ;搜索某个md内容查看是否有剪贴板的内容,把这些内容替换为修改后的 1785 | FileDelete, %A_LoopFileLongPath% 1786 | ;绝对路径A_LoopFileLongPath 1787 | FileEncoding ,UTF-8 1788 | FileAppend, %BXGWB%, %A_LoopFileLongPath% ,UTF-8-RAW 1789 | } 1790 | } ;不是多行情况-尾 1791 | } 1792 | 1793 | MsgBox, 未框选任何内容,请框选后再试。 1794 | return 1795 | ;剪贴板内容不等于空-尾 1796 | } ;判断是否是ob--尾 1797 | } ;文本全局修改的具体执行脚本-尾 1798 | 1799 | JTZXJB036() ;选择库目录具体执行脚本 1800 | { 1801 | IniRead, KWZ, %A_WorkingDir%\WLZS.ini, KWZ, key 1802 | ;读取脚本当前工作目录的WLZS.ini 威廉助手 1803 | ;KWZ=库位置 1804 | WinActivate, ahk_exe obsidian.exe 1805 | if WinActive("ahk_exe obsidian.exe") 1806 | { 1807 | FileSelectFolder, OutputVar, *%KWZ%,3,你的Obsidian库根目录在那 1808 | if OutputVar = 1809 | MsgBox, 未选择到根目录为空,请重新选择。 1810 | else 1811 | MsgBox, 已经保存 "%OutputVar%" 为全局修改功能使用的目录。 1812 | IniWrite, %OutputVar%, %A_WorkingDir%\WLZS.ini, KWZ, key 1813 | } 1814 | } 1815 | 1816 | ;菜单-编辑子菜单---命令执行--尾 1817 | 1818 | 1819 | ;有道OCR翻译 1820 | TZXJB040() 1821 | { 1822 | Send,^+y ;这里需要有道里边设置开机启动和也设置开启快捷键 1823 | Sleep, 250 1824 | ;WinActivate,ahk_exe YoudaoDict.exe ;激活指定窗口 1825 | WinGet, active_id, ProcessName, A ;获取活动窗口进程名,赋值到active_id 1826 | if (active_id ="YoudaoDict.exe") 1827 | { 1828 | ;1k屏幕 1829 | Text:="|<>*226$22.00000003ivUCvi0k0M0000A1s0kDk3Dzw0zzknwz3DVwAw3k3kD3DVwCzDkvzz0Dzw00000008" 1830 | ;4K屏幕 1831 | Textb:="|<>*225$31.DjjjU7rrrk3k00s0000E000000Q07s0D07y07U3z03nzzzU1zzzk0zzzsQTwDwDDw3y7bw0z3ny0TU1z0Dk0zU7sQTk3wDjw3y7rz3z3vzzzVNzzzk0zzzs00000U" 1832 | 1833 | if (ok:=FindText(1238-150000, 321-150000, 1238+150000, 321+150000, 0, 0,Text)) or (ok:=FindText(2052-150000, 1050-150000, 2052+150000, 1050+150000, 0, 0, Textb)) 1834 | { 1835 | CoordMode, Mouse 1836 | X:=ok.1.x, Y:=ok.1.y, Comment:=ok.1.id 1837 | Sleep, 100 1838 | Click, %X%, %Y% 1839 | return 1840 | } 1841 | } 1842 | 1843 | } 1844 | 1845 | ;有道翻译 1846 | TZXJB041() 1847 | { 1848 | Send,^c 1849 | Sleep, 100 1850 | 1851 | Send,^+y ;这里需要有道里边设置开机启动和也设置开启快捷键 1852 | Sleep, 100 1853 | ;WinActivate,ahk_exe YoudaoDict.exe ;激活指定窗口 1854 | 1855 | WinGet, active_id, ProcessName, A ;获取活动窗口进程名,赋值到active_id 1856 | ;MsgBox, % active_id ;到这步有点慢 1857 | if (active_id ="YoudaoDict.exe") 1858 | { ;MsgBox, 有道已经运行 1859 | ;Send,e 1860 | kk:=JHYDC2() ;激活有道后点击一下才能激活输入 1861 | if (kk="") 1862 | { 1863 | ;Send,{Backspace} 1864 | Send,^v 1865 | send,{Enter} 1866 | Sleep,100 1867 | return 1868 | } 1869 | } 1870 | } 1871 | JHYDC2() ;激活有道后点击一下才能激活输入 1872 | { 1873 | ;1k 1874 | Text:="|<>*154$38.00000000000003zzzz03zzzzw0zzzzz0Tzzzzs7zzzzy1zzzzzUTzzzzs7zzzzy1zzzzzUTzzzzs7yTzAy1zbzmDUT03k0s7szbXy1y0QUDUT3Xdns7VUg0y1m29DDUTW3E3s7l0osy1wa16TUT9YQ7s7n1kyS8" 1875 | ;4K 1876 | Textb:="|<>*149$53.7zzzzzzzkDzzzzzzzUTzzzzzzz0zzDzznby1zwDzz67w3zszzzATs7s00DU03kDk01n00TUTwTzXwTz0zkUD7U7y1zU0D467w3y1wD8yDs7sD0Pk0TkDUM0X00zUS8VV2Dlz0xkT34E3y1zVUD807w3y60CFwTs7w8E1XszkDslk301zUTlX23k7j0zXa70zwS1yDUTU03w3wzkzs0Ts7zzzzzzzl" 1877 | if (ok:=FindText(523-150000, 525-150000, 523+150000, 525+150000, 0, 0, Text)) or if (ok:=FindText(1453-150000, 532-150000, 1453+150000, 532+150000, 0, 0, Textb)) 1878 | { 1879 | SetDefaultMouseSpeed, 0 ; 瞬时移动鼠标必须在MouseMove上 1880 | CoordMode, Mouse 1881 | X:=ok.1.x, Y:=ok.1.y, Comment:=ok.1.id 1882 | Click, %X%, %Y% 1883 | 1884 | } 1885 | } 1886 | 1887 | JHYDCK() ;从右下角小图标激活有道;未使用 1888 | { 1889 | ;未划词时 1890 | Texta:="|<>*142$14.zzw7y0Xb8NnaQvUTyDzzzbztg63zlzzzy" 1891 | ;划词时右下角图标 1892 | Textb:="|<>*156$14.zzyDz1Xb8NnaQvkAy1DyHjwtkT0Dnzzzy" 1893 | 1894 | if (ok:=FindText(1557-150000, 1154-150000, 1557+150000, 1154+150000, 0, 0, Texta)) or (ok:=FindText(1557-150000, 1154-150000, 1557+150000, 1154+150000, 0, 0, Textb)) 1895 | { 1896 | CoordMode, Mouse 1897 | X:=ok.1.x, Y:=ok.1.y, Comment:=ok.1.id 1898 | Click, %X%, %Y% 1899 | } 1900 | 1901 | } 1902 | 1903 | ;菜单--威廉助手子菜单--命令执行--头 1904 | 1905 | JTZXJB027() ;跳转知乎详细说明的具体执行脚本 1906 | { 1907 | run https://zhuanlan.zhihu.com/p/261183846 1908 | } 1909 | 1910 | 1911 | JTZXJB028() ;跳转QQ群1026788769的具体执行脚本 1912 | { 1913 | run https://jq.qq.com/?_wv=1027&k=NPzwrl5D 1914 | } 1915 | 1916 | ;菜单--威廉助手子菜单--命令执行--尾 1917 | 1918 | 1919 | ;热键按下时用到的脚本--命令执行--头 1920 | 1921 | HQSBWZ() ;获取鼠标位置为全局变量 ;获取鼠标点击中键时的位置 1922 | { 1923 | CoordMode, Menu, Screen ;坐标模式,作用于菜单,屏幕上这个区域 1924 | CoordMode, Mouse, Screen ;坐标模式,作用于鼠标,屏幕这个区域 1925 | ;global ;global申明全局变量 1926 | MouseGetPos,MX,MY ;获取鼠标位置,X,Y ;global 设置为全局变量 1927 | global MMX := MX ;把MMY赋值MY,并设置为全局变量 1928 | global MMY := MY ;把MMY赋值MY,并设置为全局变量 1929 | ;MsgBox,鼠标位置X"%MX%"鼠标位置Y"%MY%" ;显示获取的位置 1930 | ;Sleep, 1000 ;延时 1931 | ;SetDefaultMouseSpeed, 0 ; 瞬时移动鼠标必须在MouseMove上 1932 | ;MouseMove, MX,MY ;鼠标移动到 1933 | } 1934 | 1935 | ;热键按下时用到的脚本--命令执行--头 1936 | 1937 | 1938 | ;-----具体执行脚本区-----尾 1939 | 1940 | 1941 | 1942 | 1943 | 1944 | 1945 | ;-----热键-----头 1946 | ;鼠标中键激活菜单 1947 | !q:: 1948 | ^.:: 1949 | MButton:: 1950 | HQSBWZ() ;获取鼠标位置为全局变量,放置在 Menu前,否则会失效 1951 | Menu, 菜单组最高层A, Show ;鼠标中键激活菜单 1952 | return 1953 | ;-----热键-----尾 1954 | 1955 | 1956 | 1957 | 1958 | 1959 | 1960 | ;------------------------大脚本结束------------------------ 1961 | 1962 | 1963 | 1964 | 1965 | 1966 | 1967 | ;-------热字------- 1968 | ;在Obsidian中使用 1969 | #IfWinActive ahk_class Chrome_WidgetWin_1 1970 | 1971 | 1972 | ;--通用拓展热字串 1973 | #IfWinActive 1974 | :*O:/ob::Obsidian 1975 | :*O:/ahk::AutoHotkey 1976 | :*O:/qu::Quicker 1977 | return 1978 | ;--时间戳热字串 1979 | /* 1980 | :*:/t:: 1981 | d = %A_YYYY%%A_MM%%A_DD%%A_Hour%%A_Min%%A_Sec% 1982 | clipboard = %d% ;剪贴板复制d 1983 | Send ^v ;ctrl+v 粘贴 1984 | return 1985 | */ 1986 | 1987 | 1988 | 1989 | 1990 | 1991 | ;-------辅助热键------- 1992 | 1993 | ;--在MinManager中使用(以下代码只在MinManager中) 1994 | #IfWinActive ahk_exe MindManager.exe 1995 | 1996 | WheelUp:: 1997 | Send, ^= 1998 | return 1999 | ;使用各种命令不稳定,主要用的就是脑图窗口,在其它窗口时暂停下工具即可 2000 | /* 2001 | MouseGetPos, , , , control ;判断鼠标所在位置的ClassNN控件的类名 2002 | MsgBox, % control 2003 | if (control="AfxFrameOrView140u1") or (control="AfxFrameOrView140u2") 2004 | ;AfxFrameOrView140u1 2005 | ;AfxFrameOrView140u2 2006 | { 2007 | MsgBox, % control 2008 | 2009 | Send, ^= 2010 | } 2011 | else 2012 | { ;否则 2013 | Send, {WheelUp} ;运行原来的按钮 2014 | } 2015 | return 2016 | */ 2017 | 2018 | WheelDown:: 2019 | Send, ^- 2020 | return 2021 | 2022 | ;--在Obsidian中使用 2023 | #IfWinActive ahk_exe Obsidian.exe 2024 | ;优化了系统默认按键,又不将其改变,【转为新笔记】依赖软件默认的快捷键 2025 | ^Left:: 2026 | Send, ^!{Left} 2027 | return 2028 | 2029 | ^Right:: 2030 | Send,^!{Right} 2031 | return 2032 | 2033 | ;在所有程序都可用 2034 | #IfWinActive 2035 | 2036 | 2037 | -------------------------------------------------------------------------------- /网页视频书签YINOTE.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/5eagull/Resources/24f7415468dec455fa67808f7d68c9bed8219e01/网页视频书签YINOTE.zip --------------------------------------------------------------------------------