自定义快捷命令程序(VC++加批处理)

一 概述

在看《从小工到专家-程序员修炼之道》时,看到建议使用Shell,很有感触。在很多时候,通过键盘操作,比鼠标的确会块很多,如果能用好shell命令(或批处理命令)   ,的确能节省我们很多的时候,特别是许多经常重复的工作。例如打开浏览器,进入csdn,cnblogs等感兴趣网站这样的工作,很多人会一天会重复许多次,每次重复这样的过程,单调且浪费不少时间,积少成多,浪费的时间很可观,其实可以使用命令行中,“浏览器.exe + 参数”的方式轻松的实现对兴趣网站的访问。其他的常用操作还有很多,例如“打开远程连接”,“通过VS2010打开自己最近在工作的项目”,“打开服务程序”,“打开常用文件夹”,使用自己常用的工具。

二 问题

如果都使用shell命令(或批处理命令),通过键盘进行这些操作,肯定会快的多。但是这些命令复杂而且不容易记住,怎么办?
我简单的列举了一下使用命令会遇到的问题,并在后面一 一进行解决。
1: 如何方便的打开命令行工具?如何轻松的实现输入命令?
2: Shell命令(或批处理命令)这么复杂,不容易记住。
3: 执行一个命令要输入太多代码,不比直接代开快。
4: 是否可以很轻松的添加自己的命令

三 使用场景

根据自己的理解,我通过批处理实现了一个使用命令行快速执行命令的程序。
我的程序叫XBAT,在开机时自动运行。XBAT的界面为一个可见的文本框,位于左面的右上角,占据很小的位置(见下图红色标出部分)。
使用场景:
1: 用户想用浏览器打开百度网站时,同时按下“Win + Z”键,XBAT文本框获得焦点
2: 用户输入“bd”,按下Enter键。
3: 浏览器打开百度站点。
现在这个程序我自己用起来得心应手,没有这个程序,我感觉很不方便。
我现在常用的是用它来打开iis,打开“服务”,打开“DEPENDS.EXE”,打开自己常用的文件夹,常用的sln,打开命令行,打开常用站点,常用文件夹。

四 实现

使用就是这样简单。
实现也不复杂。
1:XBAT中,捕获“Win + Z”快捷键,不管你在干什么,知道按下这组快捷键,就会将焦点设置到XBAT的文本框中。MFC的实现代码为:
static const long g_HotKeyCMD = WM_USER + 1;
::RegisterHotKey(this->m_hWnd, ::g_HotKeyCMD, MOD_WIN, 'Z');
BEGIN_MESSAGE_MAP(CXBATDlg, CDialog)
ON_MESSAGE(WM_HOTKEY, OnHotKay)
...
END_MESSAGE_MAP()
LRESULT CXBATDlg::OnHotKay(WPARAM wParam, LPARAM pParam)
{if (wParam == ::g_HotKeyCMD){// ...return 0;}//...return 0;
}

 


2: 用户输入命令,按下Enter键后,XBAT会以用户输入命令为参数调用一个批处理run.bat
BOOL CXBATDlg::PreTranslateMessage(MSG* pMsg)
{this->UpdateData();if(pMsg->wParam == VK_RETURN){static CString batPath = "";if (batPath == ""){CString strAppPath;CXBATDlg::GetAppPath(strAppPath);batPath = strAppPath + "MyBAT\\run.bat";}::ShellExecute(this->m_hWnd, "open", batPath, this->m_CMD.GetBuffer(), NULL, SW_HIDE);this->m_CMD = "";this->UpdateData(FALSE);return true; }return  CDialog::PreTranslateMessage(pMsg);
}

 


代码中的m_CMD为空户输入的命令
3: run.bat的工作原理:
run.bat会根据用户输入的bd,知道是要访问百度网站,就找到浏览器的exe文件,以百度地址为参数,调用浏览器命令,实现打开网站的操作。
if %1==bd (start /max "C:\...\360se.exe" "www.baidu.com"
)

 

4: 对run.bat进行重构
1) 我们需要打开的站点有很多,所以需要将打开浏览器的代码抽象出来,我的做法是把这些批处理放置到单独的文件“openurl.bat”中。
代码成了
if %1==bd (
call openurl "www.baidu.com"
)

 

2) 将要打开的网站和类似的“bd”命令放置到一个文件中单独配置,这个文件叫“store.txt”。
除了能打开网站以外,还需要能打开一些exe文件,打开文件夹,打开VS的sln。也就是说要针对多种操作类型,需要对操作类型进行定义:
s: 打开sln(使用vs2010,提供一个opensln.bat批处理,里面代码:
start "C:\...\VSLauncher.exe" "%1"

 

u: 打开网站(使用浏览器,使用openurl批处理,里面就一行代码:
start /max "C:\...\360se.exe" %1

 

o: 对象文件,直接执行(提供一个openexe.bat批处理,里面就一行代码:
start "" %1

 

f: 打开文件夹(提供一个openfolder.bat批处理,里面就一行代码:
start %1

 

后来有添加了打开pdf什么的。
run.bat的批处理就需要修改为:
set found=0
@echo off&setlocal enabledelayedexpansion 
for /f "tokens=1,2,3 delims= " %%i in (store.txt) do (if %%i==%1 ( set p=%%j&set p1=!p:#p#=%path%!&set p2=!p1:#f#=%folder%!&set p3=!p2:#s#=%SystemRoot%!if %%k==s (call opensln !p3!)if %%k==f (call openfolder !p3!)if %%k==u (call openurl !p3!)if %%k==o (call openexe !p3!)echo 找到选项 %%kset found=1)
)

 


store.txt的内容如下:
kfgj E:\开发工具 f
gjrj E:\工具软件 f
dzs E:\电子书 f
bd www.baidu.com u
cbs http://www.cnblogs.com u
csdn www.csdn.net u
a http://localhost/admin u
h http://localhost/ u
126 www.126.com u
wk http://wenku.baidu.com u
rz F:\.../...xls o
ss F:\...\.....sln s

 

说到这儿,就有一个我头疼的问题,在store.txt中,我无法在诸如“:\开发工具”中包含空格,不知道有没有人知道怎么处理?
在run.bat中,还有一些操作不能包括在这几种操作中,只好单独处理了,特别是带参数的。(javascript中有REPL,不知道批处理中是否也可以这样,如果可以,就能防止在store.txt中了)
if %found%==1 (goto start
)
if %1==iisreset (start iisresetgoto start
)
if %1==iis (start C:\WINDOWS\system32\inetsrv\iis.mscgoto start
)
if %1==fw  (start %SystemRoot%\system32\services.msc /sgoto start
)
if %1==yc  (start %SystemRoot%\system32\mstsc.exegoto start
)
if %1==jsq (start %SystemRoot%\system32\calc.exegoto start
)

 


五 结束

除了这些功能外,我还添加了按“win+C”打开“store.txt”文件,按“Win+V”打开XBAT的文件夹。
XBAT的不足有:
1: 虽然软件界面很小,但是还是存在,而且是在界面的顶层,特别是播放视频的时候,看着不舒服。
2: 在store的文件夹等路径中,不能包含空格。
3: 有时候会被360认为有危险。
4: 添加新的命令不方便,需要打开store.txt自己动手添加
5: 暂时XBAT只接受简单的指令,无法输入带参数的指令,例如查找文件等
源代码下载地址:
http://download.csdn.net/detail/xumingxsh/7801215
Release版下载地址:
http://download.csdn.net/detail/xumingxsh/7801733

转载于:https://www.cnblogs.com/Rong-/p/3929791.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7. Adapter

转载于:https://www.cnblogs.com/anit/p/3930202.html

jQuery 学习笔记(jQuery: The Return Flight)

第一课. ajax:$.ajax(url[, settings]) 练习代码: $(document).ready(function() {$("#tour").on("click", "button", function() {$.ajax(/photos.html, {success: function(response) {$(.photos).html(response).fadeI…

于我,过去,现在和未来 —— 西格里夫·萨松

In me, past, present, future meet            于我,过去、现在和未来To hold long chiding conference              商讨聚会 各执一词 纷扰不息My lusts usurp the present tense             林林总总的 欲望,…

Java assert关键字

Java assert关键字 Assert 简介 Java2在1.4中新增了一个关键字:assert。在程序开发过程中使用它创建一个断言(assertion)。语法格式有两种: assert condition; 这里condition是一个必须为真(true)的表达式。如果表达式的结果为true,那么断言为…

计算几何 半平面交

LA 4992 && hdu 3761 Jungle Outpost 杭电的有点坑啊。。一直爆内存,后来发现大白的半平面交模板那里 point *p new point[n]; line *q new line[n]这里出了问题,应该是在函数里面申请不了比较大的数组,所以爆内存。。我在全局定义…

Maven 强制导入jar包

场景 有时候因为各种原因(依赖有了,jar包有了),项目中就是没有这个jar包。 在需要强导的项目中创建lib文件夹,将需要强导的jar包访问lib中。添加依赖${pom.basedir}:获取当前所在的项目目录 ${pom.basedir&…

《Java 高并发》03 线程的生命周期

相关概念 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。 一个进程是一个独立的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含…

Spring boot 整合dynamic实现多数据源

项目git地址:Jacob-dynamic 准备工作 # 创建数据库db1 CREATE DATABASE db1CHARACTER SET utf8 COLLATE utf8_bin # 创建user表 CREATE TABLE user (id int(11) DEFAULT NULL,name varchar(255) DEFAULT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8 # 添加数据 INSERT…

Could not autowire. No beans of 'JavaMailSender' type found..md

Could not autowire. No beans of JavaMailSender type found. 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>2.1.5.RELEASE</version> </depe…

极客Web前端开发资源集锦

本周我们带来的前端推荐包含当前热门的bootstrap&#xff0c;html5&#xff0c;css3等技术内容和新闻话题&#xff0c;如果你还想近一步学习如何开发&#xff0c;还可以关注我们的极客课程库&#xff0c;里面涵盖了现代开发技术的‘学’与‘习’的全新功能。希望对大家有所帮助…

使用 Spring Cloud 实现微服务系统

使用 Spring Cloud 实现微服务系统 准备工作&#xff1a;为了方便创建项目&#xff0c;以及各版本以来关系&#xff0c;此次创建项目使用 Spring Assistant插件。 创建单体服务中心项目 启用服务端的服务注册&#xff0c;发现功能 EnableEurekaServer SpringBootApplication pu…

android 小工具:pc 上用 curl 命令打开手机浏览器,浏览指定网址

测试 API 时或其它情况经常需要在手机浏览器中输入 url 一长串的 url 输起来真是麻烦 AirDroid 很强大也不用数据线&#xff0c;但有时老断开连接&#xff0c;不是很爽。发到手机 qq 吧还得手动粘贴 所以自己开发了一个小工具 pc 上用 curl 发一条命令&#xff0c;命令中输入要…

iOS: How To Make AutoLayout Work On A ScrollView

转载自&#xff1a; http://natashatherobot.com/ios-autolayout-scrollview/ Posted on June 11th, 2014 Ok, I’ll admit. I’ve been seriously struggling with AutoLayout ever since it’s been introduced. I understand the concept, and I LOVE the idea of it, but w…

windows 中搭建Zookeeper的搭建

个人博客 &#xff1a;https://www.siyuan.run CSDN&#xff1a;https://blog.csdn.net/siyuan 微信小程序&#xff1a;思远Y 下载 下载地址&#xff1a; https://mirrors.cnnic.cn/apache/zookeeper/ PS&#xff1a;zookeeper 从3.5.5以后的版本带有bin标识的包&#xff0c;否…

Vs Code:Remote SSH

Remote SSH 简介 Remote - SSH 扩展允许您使用任何带有 SSH 服务器的远程计算机作为开发环境。由于几乎每个桌面和服务器操作系统都有可配置的 SSH 服务器&#xff0c;因此该扩展可以在各种情况下大大简化开发。 您可以&#xff1a; 在部署的同一操作系统上进行开发&#xff…

样条之贝塞尔(Bezier)

我曾经发过两篇关于贝塞尔的文章&#xff1a;数学图形(1.47)贝塞尔(Bzier)曲线&#xff0c;数学图形之贝塞尔(Bzier)曲面。那是使用我自己定义的脚本语言生成贝塞尔图形。由于我自己定义的脚本语法功能有限&#xff0c;所以最多只能支持5次贝塞尔函数&#xff0c;而这里将实现N…

设计模式 之 工厂模式

项目源码&#xff1a;https://gitee.com/Jacob-gitee/DesignMode 个人博客&#xff1a;https://jacob.org.cn 女娲造人的故事 东汉《风俗通》记录了一则神话故事&#xff1a;“开天辟地&#xff0c;未有人民&#xff0c;女娲搏黄土做人”&#xff0c;讲述的内容就是大家非常熟…

设计模式 之 单例模式

项目源码&#xff1a;https://gitee.com/Jacob-gitee/DesignMode 个人博客&#xff1a;https://jacob.org.cn 宗旨 Ensure a class has only one instance,and provide a global point of access to it.&#xff08;确保某一个类只有一个实例&#xff0c;而且自行实例化并向整个…

设计模式 之 抽象工厂模式

项目源码&#xff1a;https://gitee.com/Jacob-gitee/DesignMode 个人博客 &#xff1a;https://jacob.org.cn 女娲的失误 工厂模式中讲了女娲造人的故事。人是造出来了&#xff0c;世界也热闹了&#xff0c;可是低头一看&#xff0c;都是清一色的类型&#xff0c;缺少关爱、仇…

设计模式 之 模板模式

项目源码&#xff1a;https://gitee.com/Jacob-gitee/DesignMode 个人博客 &#xff1a;http://jacob.org.cn 女娲的失误 工厂模式中讲了女娲造人的故事。人是造出来了&#xff0c;世界也热闹了&#xff0c;可是低头一看&#xff0c;都是清一色的类型&#xff0c;缺少关爱、仇…