自定义快捷命令程序(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 找到选项 %%k

		set 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 iisreset

	goto start

)

if %1==iis (

	start C:\WINDOWS\system32\inetsrv\iis.msc

	goto start

)

if %1==fw  (

	start %SystemRoot%\system32\services.msc /s

	goto start

)

if %1==yc  (

	start %SystemRoot%\system32\mstsc.exe

	goto start

)

if %1==jsq (

	start %SystemRoot%\system32\calc.exe

	goto 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

时间: 2024-10-07 08:43:06

自定义快捷命令程序(VC++加批处理)的相关文章

编写一个文件加解密程序,通过命令行完成加解密工作

package wenjianyuliu; import java.io.File; import java.io.InputStream; import java.io.OutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; //编写一个文件加解密程序,通过命令行完成加解密工作 public class FileCode { private static final int numOfEncA

前面程序整合加自定义日志,日志会记录重目前还在找问题

前面程序整合加自定义日志 1.文件摆放 ├── xxxx │ ├── src.py │ └── fil_mode.py │ └── data_time.py │ └── loading.py │ └── data_time.py │ └── logger.py 2.运行文件 1.run src.py # 导入需要用到的所有内置模块 import logging import time import json import os from fil_mode import * from loadin

vc++ 加载,卸载自己的驱动程序

用vc++加载自己的驱动程序主要分为以下几个步骤: 1.加载驱动服务 主要要用到以下几个函数 SC_HANDLE WINAPI OpenSCManagerA( __in_opt        LPCSTR                lpMachineName, __in_opt        LPCSTR                lpDatabaseName, __in            DWORD                   dwDesiredAccess ); //创建

FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑

FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没有一个人对FFmpeg这个名称感到陌生.FFmpeg是一套非常知名的音视频处理的开源工具,它包含了开发完成的工具软件.封装好的函数库以及源代码供我们按需使用.FFmpeg提供了非常强大的功能,可以完成音视频的编码.解码.转码.视频采集.后处理(抓图.水印.封装/解封装.格式转换等),还有流媒体服务等

程序的加载和执行(六)——《x86汇编语言:从实模式到保护模式》读书笔记26

程序的加载和执行(六)--<x86汇编语言:从实模式到保护模式>读书笔记26 通过本文能学到什么? NASM的条件汇编 用NASM编译的时候,通过命令行选项定义宏 Makefile的条件语句 在make命令行中覆盖Makefile中的变量值 第13章习题解答 复习如何构造栈段描述符 我们接着上篇博文说. 在我修改后的文件中,用到了条件汇编. 比如: %ifdef DEBUG put_core_salt: ;打印内核的符号 ... ... put_usr_salt: ;打印用户的符号 ... .

linux启动后自动登录并运行自定义图形界面程序

在<Ubuntu CTRL+ALT+F1~F6 进入命令模式后不支持中文显示的解决办法>一文中提到linux启动在以后运行一个独占显示器的图形程序的两种办法. 1.不启动xserver,使用fb或者directfb图形模式: 2.启动xserver不启动桌面系统. 第一种方法性能并不一定高,因为支持fb的显卡驱动可能找不到,就是用上显卡驱动了也需要CPU大量参与.另外如果用这种方式可供选择的图形程序开发技术就受限了.所以这种方法通常用在嵌入式环境下. 第二种方法只要显卡驱动了,CPU就能得到解

Sublime Text常用快捷命令整理

时间:2014.05.23 地点:基地 --------------------------------------------------------------------------------- 一.常用快捷键 1.Tools下的Command Palette 快捷键就是:Ctrl+Shift+P 输入命令回车后便可执行. 2.文件切换 Ctrl+P 3.快速跳转到相应的函数 Ctrl+R (用Ctrl+P后跟@也可,其实Ctrl+R只是会自动在文本框里加上@而已,不过个人喜欢用Ctrl

maven的命令程序mvn脚本分析

    最近公司将svn迁移到git,而且使用maven管理代码仓库,所以小小的研究了一下,为自动化持续集成做知识准备,以下是分析了maven的命令程序mvn:     总体感觉与tomcat的启动脚本startup大同小异 #!/bin/sh # ---------------------------------------------------------------------------- # Licensed to the Apache Software Foundation (AS

Eclipse常用快捷命令

1.VS.Chrome.Eclipse调试命令对比: VS: F5: 继续运行 F10: 单步执行 F11: 进入函数内部 Shift + F11: 由函数内部返回调用处 Chrome: F8: 继续运行 F10: 单步执行 F11: 进入函数内部 Shift + F11: 由函数内部返回调用处 Eclipse: F5: 进入函数内部 F6: 单步执行 F7: 由函数内部返回调用处 F8: 运行至下一个断点 F11: 调试运行 Ctrl + F11: 直接运行 2.Eclipse常用快捷命令 窗