文章目录

  • autoHotkey — 同个快捷键在不同网页的功能不同
    • 基本环境
    • 为什么要做这个事情
    • 实现过程
    • 代码
    • 效果

autoHotkey — 同个快捷键在不同网页的功能不同

基本环境

  • autohotkey

  • SciTE4AutoHotkey-Plus 编辑器, 非必须,打算长用ahk的可以考虑.

  • autohotkey基础教程系列(一) ———— 怎么学,哪里学,有哪些现成的demo

  • 这边的浏览器是edge 其他的浏览器我没有试过,但是应该没有问题.网页部分的代码是别人写的.

为什么要做这个事情

  1. 很多网页自带的快捷键不合理.要嘛与平时软件的差异较大,要嘛就是3键触发.
  2. 例如百度搜索中没有快速重新输入搜索内容的按键,这对程序员来说是很不友好的.
    虽然浏览器提供了ctrl+k 可以在地址行默认使用搜索引擎搜索,但是我只想好好用百度,为啥还要我再记一个快捷键???
  3. 不用网页相同功能,但是快捷键却不同. 例如石墨文档和csdn编辑时的排版快捷键.
  4. csdn的mark因为是双排并看到格式,所以大部分都书写都还挺舒服. 不过插入代码和链接写起来就显得费事了.
  5. 另外在csdn的markdown模式下,要批量将无序列表和有序列表对换,用快捷键的方式更合理一点.

个人认为的快捷键设计原则:

  1. 键少功能多. 少量的人机接口方式,实现更多的功能.
  2. 连击最多2次单击,且由双手食指触发. 因为食指灵敏, 且我们习惯了鼠标的双击动作.
  3. 如果为双键结合,那么修饰键最好按整体功能进行分离,例如 shift 用来修饰编辑文本的. alt用来处理窗口操作的.
  4. 尽可能保留已经习惯的触发键,例如s为保存,f为查找. c为复制
  5. 不同软件的同概念性的快捷键应该保持一致. 例如 ctrl f 为一般的搜索功能,那么可以把百度激活搜索框的快捷键设置为ctrl f. 这样就不需要每次都用鼠标去单击搜索框,也不需要安装vim等插件. 因为是搜索引擎.没有必要保留原本的ctrl+F的功能.
  6. 可将同概念性的功能按软件的先后层次进行顺序切换,例如,在百度里面, 如果没有在输入框中,则按一次ctrl+f先激活输入框,再按一次搜索打开的标签或者直接跳转到系统的全局搜索 ,例如everything这类工具,再按一次则切换回浏览器的输入框,完全没有必要设置那么多个快捷键。
  7. 设计的时候先考虑新添加的功能是否与旧功能具有概念相似性。切记一上来就是一个新的快捷键。这是很多人一开始常犯的毛病。
    举个具体的例子,在pycharm中,单独使用了一个ctrl +d 作为重复一行或者选中内容的快捷键. 其实完全没必要这么做. 只要在原始的复制ctrl+c加一个是否选取内容的判断就可以,当没有选择内容的时候,默认就是重复复制一行. 在选中多行,或者一行中局部内容的时候,直接重复填充反而会很乱. 还要额外去记一个快捷键.

实现过程

如何实现指定网页,看我前面的一篇文章,这边就不展开说了.

  • 指定网页生效

首先csdn markdown 编辑模式下的快捷键为,可以看到其中有挺多3键触发的,操作起来十分不便.以及我十分不喜欢的ctrl键. 每次都得吐槽一下.

那么我只需要把自己的快捷键映射到这上面就可以了.

代码

#ifWinActive  ahk_exe msedge.exe ; 这边指定这个脚本在我的浏览器激活的时候才有用
Menu, Tray, Icon, % A_WinDir "\system32\netshell.dll", 86 ; Shows a world icon in the system tray
ModernBrowsers := "ApplicationFrameWindow,Chrome_WidgetWin_0,Chrome_WidgetWin_1,Maxthon3Cls_MainFrm,MozillaWindowClass,Slimjet_WidgetWin_1"
LegacyBrowsers := "IEFrame,OperaWindowClass"
; 以上的代码尽量不要修改Add_石墨文档地址 := "shimo"
Add_文献文档地址 := "papers"
Add_百度搜索地址 := "baidu"
Address_CSDN写作 := "editor.csdn"
; 这边加入自己想要指定的页面地址的一部分名称,
; 原理是判断当前地址中是否包含上述的文本Return  ;上面的代码是在脚本启动的时候就自动运行的,这边设置了自动运行的结束点;搜索
+f:: ;这边设置百度搜索功能的快捷键,因为我基本弃用了ctrl键,所以一律都是用的shift+的格式if 在这个网页中(Add_百度搜索地址) ; 这边将一个函数名设置为中文变量,因为会经常用到,这么看起来比较直观,可读性好一点; if 后面如果只有一行代码,正常情况下可以不加花括号,但是为了避免之后添加代码的时候忘了加括号,所以一律都提前加上{sendinput,^k ; 浏览器中  ctrl+k 是在地址栏中指定搜索引擎搜索内容}
Return
;任务框
+r::if 在这个网页中(Add_石墨文档地址){sendinput,+^Y   }if 在这个网页中(Address_CSDN写作){sendinput,+^k  ; 在csdn里面,基本上需要代办的功能,但是会经常插入代码,所以让这个快捷键映射的是插入代码}
Return
; 标题设置
+t::if 在这个网页中(Add_石墨文档地址){sendinput,+^k}if 在这个网页中(Address_CSDN写作){sendinput,  +^h ; 这个目前csdn里面用起来还不是很方便,用文本输入的形式就可以}
Return
;无序列表
+y::if 在这个网页中(Add_石墨文档地址){     sendinput,+^i}if 在这个网页中(Address_CSDN写作)        {sendinput,^+u ; }Return; 有序列表
+u::if 在这个网页中(Add_石墨文档地址){sendinput,+^u}if 在这个网页中(Address_CSDN写作){sendinput,+^o}
Return在这个网页中(url = "")
{index := 0 sURL := GetActiveBrowserURL()If (sURL != ""){index := InStr(sURL ,url)if index != 0index := 1}return index
};——————————————————————————————————————————————————————————————————————————————————————————-
;                               以下是获得网页地址的方法                                   |
;——————————————————————————————————————————————————————————————————————————————————————————-GetActiveBrowserURL() {global ModernBrowsers, LegacyBrowsersWinGetClass, sClass, AIf sClass In % ModernBrowsersReturn GetBrowserURL_ACC(sClass)Else If sClass In % LegacyBrowsersReturn GetBrowserURL_DDE(sClass) ; empty string if DDE not supported (or not a browser)ElseReturn ""
}; "GetBrowserURL_DDE" adapted from DDE code by Sean, (AHK_L version by maraskan_user)
; Found at http://autohotkey.com/board/topic/17633-/?p=434518GetBrowserURL_DDE(sClass) {WinGet, sServer, ProcessName, % "ahk_class " sClassStringTrimRight, sServer, sServer, 4iCodePage := A_IsUnicode ? 0x04B0 : 0x03EC ; 0x04B0 = CP_WINUNICODE, 0x03EC = CP_WINANSIDllCall("DdeInitialize", "UPtrP", idInst, "Uint", 0, "Uint", 0, "Uint", 0)hServer := DllCall("DdeCreateStringHandle", "UPtr", idInst, "Str", sServer, "int", iCodePage)hTopic := DllCall("DdeCreateStringHandle", "UPtr", idInst, "Str", "WWW_GetWindowInfo", "int", iCodePage)hItem := DllCall("DdeCreateStringHandle", "UPtr", idInst, "Str", "0xFFFFFFFF", "int", iCodePage)hConv := DllCall("DdeConnect", "UPtr", idInst, "UPtr", hServer, "UPtr", hTopic, "Uint", 0)hData := DllCall("DdeClientTransaction", "Uint", 0, "Uint", 0, "UPtr", hConv, "UPtr", hItem, "UInt", 1, "Uint", 0x20B0, "Uint", 10000, "UPtrP", nResult) ; 0x20B0 = XTYP_REQUEST, 10000 = 10s timeoutsData := DllCall("DdeAccessData", "Uint", hData, "Uint", 0, "Str")DllCall("DdeFreeStringHandle", "UPtr", idInst, "UPtr", hServer)DllCall("DdeFreeStringHandle", "UPtr", idInst, "UPtr", hTopic)DllCall("DdeFreeStringHandle", "UPtr", idInst, "UPtr", hItem)DllCall("DdeUnaccessData", "UPtr", hData)DllCall("DdeFreeDataHandle", "UPtr", hData)DllCall("DdeDisconnect", "UPtr", hConv)DllCall("DdeUninitialize", "UPtr", idInst)csvWindowInfo := StrGet(&sData, "CP0")StringSplit, sWindowInfo, csvWindowInfo, `" ;"; comment to avoid a syntax highlighting issue in autohotkey.com/boardsReturn sWindowInfo2
}GetBrowserURL_ACC(sClass) {global nWindow, accAddressBarIf (nWindow != WinExist("ahk_class " sClass)) ; reuses accAddressBar if it's the same window{nWindow := WinExist("ahk_class " sClass)accAddressBar := GetAddressBar(Acc_ObjectFromWindow(nWindow))}Try sURL := accAddressBar.accValue(0)If (sURL == "") {WinGet, nWindows, List, % "ahk_class " sClass ; In case of a nested browser window as in the old CoolNovo (TO DO: check if still needed)If (nWindows > 1) {accAddressBar := GetAddressBar(Acc_ObjectFromWindow(nWindows2))Try sURL := accAddressBar.accValue(0)}}If ((sURL != "") and (SubStr(sURL, 1, 4) != "http")) ; Modern browsers omit "http://"sURL := "http://" sURLIf (sURL == "")nWindow := -1 ; Don't remember the window if there is no URLReturn sURL
}; "GetAddressBar" based in code by uname
; Found at http://autohotkey.com/board/topic/103178-/?p=637687GetAddressBar(accObj) {Try If ((accObj.accRole(0) == 42) and IsURL(accObj.accValue(0)))Return accObjTry If ((accObj.accRole(0) == 42) and IsURL("http://" accObj.accValue(0))) ; Modern browsers omit "http://"Return accObjFor nChild, accChild in Acc_Children(accObj)If IsObject(accAddressBar := GetAddressBar(accChild))Return accAddressBar
}IsURL(sURL) {Return RegExMatch(sURL, "^(?<Protocol>https?|ftp)://(?<Domain>(?:[\w-]+\.)+\w\w+)(?::(?<Port>\d+))?/?(?<Path>(?:[^:/?# ]*/?)+)(?:\?(?<Query>[^#]+)?)?(?:\#(?<Hash>.+)?)?$")
}; The code below is part of the Acc.ahk Standard Library by Sean (updated by jethrow)
; Found at http://autohotkey.com/board/topic/77303-/?p=491516Acc_Init()
{static hIf Not hh:=DllCall("LoadLibrary","Str","oleacc","Ptr")
}
Acc_ObjectFromWindow(hWnd, idObject = 0)
{Acc_Init()If DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hWnd, "UInt", idObject&=0xFFFFFFFF, "Ptr", -VarSetCapacity(IID,16)+NumPut(idObject==0xFFFFFFF0?0x46000000000000C0:0x719B3800AA000C81,NumPut(idObject==0xFFFFFFF0?0x0000000000020400:0x11CF3C3D618736E0,IID,"Int64"),"Int64"), "Ptr*", pacc)=0Return ComObjEnwrap(9,pacc,1)
}
Acc_Query(Acc) {Try Return ComObj(9, ComObjQuery(Acc,"{618736e0-3c3d-11cf-810c-00aa00389b71}"), 1)
}
Acc_Children(Acc) {If ComObjType(Acc,"Name") != "IAccessible"ErrorLevel := "Invalid IAccessible Object"Else {Acc_Init(), cChildren:=Acc.accChildCount, Children:=[]If DllCall("oleacc\AccessibleChildren", "Ptr",ComObjValue(Acc), "Int",0, "Int",cChildren, "Ptr",VarSetCapacity(varChildren,cChildren*(8+2*A_PtrSize),0)*0+&varChildren, "Int*",cChildren)=0 {Loop %cChildren%i:=(A_Index-1)*(A_PtrSize*2+8)+8, child:=NumGet(varChildren,i), Children.Insert(NumGet(varChildren,i-8)=9?Acc_Query(child):child), NumGet(varChildren,i-8)=9?ObjRelease(child):Return Children.MaxIndex()?Children:} ElseErrorLevel := "AccessibleChildren DllCall Failed"}
}

效果

  • 百度搜索效果 采用shift+f 进行搜索.
  • csdn 快速插入代码 shift+r


有人会说,我经常用的是Python,我想快速插入Python的代码怎么办.
快速的解决办法就是手动插入一次python代码,之后的快捷键便都是python的代码.

有人说,我能力比较强,我经常用多种代码. 能不能有办法解决.
水答: 一篇教程里面你还想有多少语言混编…
正答: 可以通过判断快捷键输入状态解决,在几种代码之间切换. 这部分基本上没什么需求,就不实现了.

  • csdn 列表类型批量切换 shift+y 或 u

autoHotkey —同个快捷键在不同网页中不同功能相关推荐

  1. 如何使用快捷键在网页中调用扫描仪进行扫描 - Dynamic Web TWAIN

    有很多朋友已经在CSDN上分享过如何使用Dynamic Web TWAIN在网页中调用文档扫描仪.其中有一位热心的朋友罗根菌,他在博客中发布的"如何快速实现在网页中调用文档扫描仪" ...

  2. 在chrome里查询修改html代码,我需要在网页中直接编辑CSS?打开Web代码检查器

    我需要在网页中直接编辑CSS?打开Web代码检查器 最受欢迎的支持问题是:"我必须编辑哪些CSS代码才能改变(-)的外观".几年前,CSS/HTML编辑器是最有用的web开发工具. ...

  3. dw cs6 html建站点,dreamweaver cs6网页中制作锚点链接的教程方法

    部分网友刚刚下载使用dreamweaver cs6的朋友们,可能还不是很熟悉其中制作锚点链接?下面这篇内容就为你们带来了dreamweaver cs6网页中制作锚点链接的教程方法. dreamweav ...

  4. html如何设置打印分页打印出来,网页中如何用 CSS 设置打印分页符

    Word 中按 Ctrl + Enter 创建一个分页符,方便打印,其实网页中也可以,用 CSS 的 page-break-after:always;. 第 1 页 第 2 页 第 3 页 任何浏览器 ...

  5. 如何将PDF文件或图片或网页中的公式变为可编辑的--mathpix快速输入公式

    说在前面: PDF文件或图片或网页中的公式,有自己写文章或者做PPT需要的,如果公式很复杂,或者你就是懒.若是用latex写文章,就想直接把公式变为可编辑的latex格式,是用word写文章或者做PP ...

  6. 如何下载网页中使用的JS及CSS文件

    关键字:下载网页中使用的JS及CSS文件 方法一: 凡浏览过的网页都会临时保存在:C:\Documents and Settings\Administrator(当前登陆用户名)\Local Sett ...

  7. python 实现获取与下载网页中图片的四种方案

    前言 当要获取页面上的图片,我们常规的做法是: 在图片上点击鼠标右键, 然后选择 图片另存为, 弹出保存窗口, 选择或输入保存的位置, 点击 确定 按钮即可. 那么,如果我们想要使用python在脚本 ...

  8. 为什么在html中链接打不开,网页中的链接打不开?三种小妙招总有一种合你意!...

    我们打开电脑要做的一件事肯定会有浏览网页,我们会发现经常看到网页中会有各种各样的链接,当我们点击打开的时候会发现打不开!这是怎么回事? 因为也有win7系统网友问过这样的问题,今天小编就给大家讲解一下 ...

  9. 用JavaScript获取网页中的js、css、Flash等文件

    目录 一.前言 二.从E书或网页中获取文件的一般步骤 三.从E书或网页中获取链接进来的css文件 四.从E书或网页中获取链接进来的js文件 五.从E书或网页中获取Flash文件 六.从E书或网页中获取 ...

最新文章

  1. Ajax Control Toolkit 32个服务器端控件
  2. Leedcode9-linked-list-cycle-i
  3. LiteOS内核源码分析:位操作模块
  4. android 手机无线投屏,安卓手机无线投屏问与答
  5. matlab 调度算法,基于遗传算法的车辆调度问题的matlab源程序
  6. java blog 引擎_推荐10个Java开源CMS系统
  7. listview优化几种写法(原创)
  8. 【转】SPARC处理器30年沉浮
  9. PCB设计规则总结和原因分析
  10. java图书馆登陆代码_图书馆系统(登录设计)
  11. Chem 3D中怎么创建立体模型
  12. 小技巧(1)「MacBook➕iPad」
  13. day03 springboot自动装配原理 面试回答
  14. vc++6.0使用串口控件例程
  15. java毕业设计大学生学科竞赛管理系统mybatis+源码+调试部署+系统+数据库+lw
  16. 评论:暗黑破坏神3新拍卖行手续费结构
  17. ES批量查询_mget与IDs的区别
  18. 解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\U0001f608' in position。。。
  19. 全国281个地级市工业用电量数据(2003-2016)
  20. 敏而好学不耻下问 _ 2010开学第一课

热门文章

  1. arcgis中如何导出奥维可识别的图_如何在奥维中加载ArcGIS发布的地图服务
  2. CameraBag Pro 2021.0 图片特效编辑器,一款优秀实用的照片滤镜工具
  3. 机器学习中的数学——概率分布
  4. chemoinformaticspython | 化学信息学软件包安装方法集合
  5. 在VS中怎么用vb画矩形_电路图中如何判别NPN与PNP
  6. Human Brain Mapping:多项目工作记忆的时空和波谱动态特性—基于MEG的研究
  7. 点云自适应滤波matlab代码,一种机载激光雷达点云的自适应滤波方法与流程
  8. 一样的歌 不一样的感觉
  9. 伺服电机抱闸(刹车)
  10. 写一个定时关机的vbs程序