行云无鸣

2011-08-15

打造一个快捷打开应用程序的页面

Filed under: 乱语 — 标签:, , , , — hellyguo @ 22:05

一直希望在Windows下快捷地运行程序,可惜始终找不到合适的快速启动软件来管理我如许多的应用。用过AltRun,可惜总不顺眼。还是坚持使用HoeKey。但软件多了,HoeKey管理热键就越来越多,和其他软件的冲突也越来越多,得不偿失了。为此,HoeKey就只精简地使用打开浏览器(firefox/chrome/ie)/邮件客户端(thunderbird)/TM/CMD几项。其他的程序,就是采用Run(win+r)来打开的。

今天突发奇想,能否在浏览器上做文章,通过编写一张固定的页面来实现程序的调用。尚幸,在IE/Firefox下轻松实现了。

  1. 我的程序,常用的都放在D:\GreenSoft下,通过TM的Alt+F7,查找出所有其下的Exe文件,打开为列表
  2. TM下,Ctrl+a全选,Ctrl+3拷贝全路径
  3. 将记录插入VIM中
  4. 通过正则表达式替换将路径替换为html项
    使路径中的斜杠变为双斜杠,在JS中能正常使用
    %s/\\[A-Za-z]/\\\\\1/g
    将路径扩展为html
    %s/\(.*\)/<li><a href="#" onclick="exec('\1')">\1<\/a><\/li>/g
  5. 添加javascript
    for ie

    function exec(strPath){
    try {
    var objShell = new ActiveXObject("wscript.shell");
    objShell.Run(strPath);
    objShell = null;
    }
    catch (e) {
    alert('找不到文件"' + strPath + '"(或它的组件之一)。请确定路径和文件名是否正确.')
    }
    }

    for firefox

    function exec(strPath){
    try {
    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath(strPath);
    file.launch();
    }
    catch (e) {
    alert(e)
    }
    }
  6. 保存此页面

效果:
在浏览器打开此页面,通过Ctrl+F定位后,点击执行即可
最后,附上最简单的调用cmd的页面代码

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GreenSoft可执行文件列表</title>
</head>
<script type="text/javascript">
function exec_ieonly(strPath){
try {
var objShell = new ActiveXObject("wscript.shell");
objShell.Run(strPath);
objShell = null;
}
catch (e) {
alert('找不到文件"' + strPath + '"(或它的组件之一)。请确定路径和文件名是否正确.')
}
}
function exec(strPath){
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(strPath);
file.launch();
}
catch (e) {
alert(e)
}
}
</script>
<body>
<div>
<ul>
<li>
<a href="#" onclick="exec('C:\\Windows\system32\cmd.exe')">cmd</a>
</li>
...
</ul>
</div>
</body>
</html>