2016年9月13日星期二

autohotkey脚本实例:复制选中的内容,然后搜索或者打开链接

第1版:复制当前选中的内容并搜索

工作需要,我要经常搜索。以往都要经过繁琐的步骤:在Excel或记事本中选中——复制——切换到浏览器——定位到搜索框——粘贴——按Enter键。数量少时还好说,有时一天要搜索上百次,频繁的Ctrl+C、Ctrl+V按得手指酸痛。
接触了Autohotkey,尝试制作脚本减轻工作量,提高效率。经过搜索尝试,第一版代码见下:
  1. $^c:: ;^表示Ctrl键。前面加一个$就不会递归了。说实话,我也不太清楚啥意思,是从知乎上查到了。
  2. Send,^c ;表示同时发送 Ctrl+c 两个键,即复制选中的内容。
  3. Sleep 100 ;等待100毫秒
  4. Run https://www.so.com/s?ie=utf-8&shb=1&src=home_haosou.com&q=%clipboard%
  5. ;使用360搜索复制的内容。%clipboard% 表示剪贴板的内容。

第2版:快捷键改为Shift+C,及打开链接

第一版用起来遇到两个问题。
  • Ctrl+C是系统级的快捷键。有时候,我按下Ctrl+C只是想复制,不想搜索。所以修改快捷键为Shift+C。
  • 有时复制的是链接,我希望打开链接,而不是搜索。
又是一番搜索尝试,第二版代码:
  1. +c:: ; +表示Shift键。
  2. Send,^c ;表示同时发送 Ctrl+c 两个键,即复制选中的内容。
  3. Sleep 100 ;等待100毫秒
  4. StringLeft,myvar1,clipboard,4 ;取剪贴板的前4个字符
  5. StringLeft,myvar2,clipboard,7 ;取剪贴板的前7个字符
  6. if ( myvar1 != "www.") and (myvar2 != "http://") and (myvar2 != "https:/")
  7. ; != 表示不等于;and 表示左右两边的条件要同时成立。粗略判断是否为链接。
  8. Run https://www.so.com/s?ie=utf-8&shb=1&src=home_haosou.com&q=%clipboard%
  9. ;使用360搜索复制的内容。%clipboard% 表示剪贴板的内容。
  10. else
  11. Run %clipboard% ;打开链接
  12. return

第3版:同时打开多个链接

某些时候需要查看多条链接。一条条打开还是慢,希望选中多条链接后能一次性打开。
又是一番折腾,第3版代码:
  1. +c:: ; +表示Shift键。
  2. Send,^c ;表示同时发送 Ctrl+c 两个键,即复制选中的内容。
  3. Sleep 100 ;等待100毫秒
  4. StringLeft,myvar1,clipboard,4 ;取剪贴板的前4个字符
  5. StringLeft,myvar2,clipboard,7 ;取剪贴板的前7个字符
  6. if ( myvar1 != "www.") and (myvar2 != "http://") and (myvar2 != "https:/")
  7. ; != 表示不等于;and 表示左右两边的条件要同时成立。粗略判断是否为链接。
  8. Run https://www.so.com/s?ie=utf-8&shb=1&src=home_haosou.com&q=%clipboard%
  9. ;使用360搜索复制的内容。%clipboard% 表示剪贴板的内容。
  10. else
  11. {
  12. Loop,parse, clipboard, `t`n, ;循环解析剪贴板的内容,tab和换行符是表示分隔的符号
  13. {
  14. Run %A_LoopField% ; %A_LoopField% 表示每次解析得到的内容
  15. Sleep 20
  16. }
  17. }
  18. return

第4版 选中多行文本时,希望能同时搜索

一个查询词占一行,选中多行后,我想同时搜索这些查询词。并且,如果中间有空行,则删除空行,不搜索。
代码见下:
  1. +c:: ;+ 表示Shift键。
  2. Send,^c ;表示同时发送 Ctrl+c 两个键,即复制选中的内容。
  3. Sleep 100 ;等待100毫秒
  4. StringLeft,myvar1,clipboard,4 ;取剪贴板的前4个字符
  5. StringLeft,myvar2,clipboard,7 ;取剪贴板的前7个字符
  6. Result := RegExReplace(clipboard, "(*BSR_ANYCRLF)\R+", "`n") ;去除文本中的空行。不过发现无法删除最后一行
  7. if ( myvar1 != "www.") and (myvar2 != "http://") and (myvar2 != "https:/")
  8. ; != 表示不等于;and 表示左右两边的条件要同时成立。粗略判断是否为链接。
  9. Loop,parse, Result, `n, ;循环解析剪贴板的内容,换行符是表示分隔的符号
  10. {
  11. myvar3 := Trim(A_LoopField, OmitChars=" `t") ;去除首尾的空格和tab
  12. myvar4 := StrLen(myvar3) ;取得该行的长度
  13. { if (myvar4)>0 ;长度大于0,表示不是空行
  14. { Run https://www.so.com/s?ie=utf-8&shb=1&src=home_haosou.com&q=%A_LoopField%
  15. ; %A_LoopField% 表示每次解析得到的内容
  16. Sleep 20
  17. }
  18. else
  19. return
  20. }
  21. }
  22. else
  23. {
  24. Loop,parse, clipboard, `t`n, ;循环解析剪贴板的内容,tab和换行符是表示分隔的符号
  25. {
  26. Run %A_LoopField% ; %A_LoopField% 表示每次解析得到的内容
  27. Sleep 20
  28. }
  29. }
  30. return

没有评论: