近期把其他博客的日志导出成Markdown后导入到自己的blog。想在本地预览后,看到不好的地方就进行修改,想法是美好的,现实是残酷的!找文件太麻烦了,定位到了文件夹,还需要找文件。反正就是觉得很不爽!最终通过自定义URL协议的方式完美的解决。
尝试ActiveXObject
IE下可以通过ActiveXObject调用本地的程序打开文件。尽管局限于IE,但是如果能实现的话将就下也OK的。 理所当然认为IE下是没有问题,就找chrome下能否执行ActiveXObject的兼容对象。
在chrome下,没啥很好的替代实现。同时在IE11下,ActiveXObject调用shell对象报automation服务器不能创建对象,需要额外开启功能、降低IE的安全性等等,也很麻烦!!
1 2 3 4 |
|
尝试Flash
有想过使用flash解决,毕竟剪贴板复制功能的ZeroClipboard.swf
是那么的完美^_^。但是swf不能执行exe程序,没办法只能再寻求其他办法。
自定义URL协议
最后看到了URL Protocol的实现方式,是的哦,Github-Windows、以及QQ等这些网页的工具不都是调用系统的程序吗?!
然后试着按照网页的教程,试着弄弄!又是一个新鲜事物,有挑战的事情做起来就更有激情!
添加注册表项reg-npp-windows.bat
:(可以先导出github-windows的注册表项参考。这里使用用bat来实现,注册脚本中可以通过相对路径指向执行的程序)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
点击URL真正调用的是npp-windows.bat
命令(即上面的注册脚本的NPP_APP
):
1 2 3 4 5 6 7 |
|
start
命令新起一个子进程打开程序,这样可以启动后面的程序,同时关闭/退出掉黑窗口!
请求参数有整个url加上双引号,如"npp-windows://e/about.md"
。数字17,-1
获取真正的路径。由于根下的文件会被自动加反斜杠"npp-windows://about.md/"
,所以加上e/
进行修复。
在网页使用链接,然后加上npp-windows
的协议就可以打开文件进行修改编辑了。
<a class="shellExecuteLink" href="npp-windows://e/{{ page.path }}" title="本地编辑"><i class="icon-edit"> </i></a>
对BAT的命令相当的迷惑:
"D:\local\usr\npp\notepad++.exe" "%~dp0..\..\..\%fileRelativePath:~17,-1%"
OKstart D:\local\usr\npp\notepad++.exe "%~dp0..\..\..\%fileRelativePath:~17,-1%"
OKstart "D:\local\usr\npp\notepad++.exe" "%~dp0..\..\..\%fileRelativePath:~17,-1%"
弹出Windows无法打开此文件的框
闪黑窗口优化尝试
功能已经实现了,但是仍然有一个黑窗口一闪而过!
爱折腾的程序员啊!!
找啊找,发现vbs可以后台执行命令。直接在命令行是可以执行npp-windows.vbs的,同时那种不弹窗的效果也是自己想要的!!但把vbs作为url-protocol协议的执行程序时,点击页面链接却没一点反应!但是运行bat和exe程序是没有问题的。
其实windows下的bat和vbs程序都是可以转成exe的。 下载了ScriptCryptor Compiler破解版,把vbs转成exe后就可以被url-protocol调用了,且没有闪窗的现象了!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
同时上面的vbs程序有一个与bat同样的问题:在文件没有关闭的前,vbs程序是一直等待的!如果使用这种方式,编辑很多文件就会存在很多进程。
而直接在Wsh.Run
后面加上start
前缀就报系统找不到指定的文件的错误!整来整去最后还是调用bat文件,解决主进程一直等待的问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
然后修改添加注册表项的命令reg-npp-windows.bat,重新覆盖注册下就可以了。
1
|
|
尽管没有黑窗口了闪现,但是速度慢了很多!! 两种方式换着用呗,修改也简单: 改下程序的名字,重新注册下就行了。
其他
URL-protocol的用户选择设置会被chrome缓冲,可以通过C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Local State
文件的protocol_handler
节点来修改。
参考
- Using a WScript.shell activeX to execute a command line
- 在html中利用WScript.Shell启用本地程序
- 通过网页链接打开应用程序客户端的两种实现方式
- 浏览器打开本地程序,全面支持ie,firefox,opera,chrome,自定义url protocol
- 自定义URL Protocol调用Winfrom程序(exe)并实现传值——类似网页链接调用QQ、旺旺
- 自定义URL Protocol Handler
- liquid页面渲染语言
–END