自定義快捷命令程序(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.pswp.cn/news/273617.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273617.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273617.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis 快速入門

簡介 Redis 是一個 Key-Value 存儲系統。和 Memcached 類似,它支持存儲的 value 類型相對更多,包括 string(字符串)、 list(鏈表)、 set(集合)和 zset(有序集合)。這些數據類型都支持 push/pop、add/remove 及取交集并集和差集及更豐富的操作&#xff0c…

7. Adapter

轉載于:https://www.cnblogs.com/anit/p/3930202.html

Redis 中常用命令

Redis 中常用命令 keys 返回滿足給定 pattern 的所有 key。 127.0.0.1:6379> keys *1) "name2"2) "myzset"3) "myset7"4) "name"5) "myset6"6) "mylist"7) "mylist2"8) "myset3"9) "…

CGI與Servlet的區別和聯系

1. 定義: CGI(Common Gateway Interface 公共網關接口)是HTTP服務器與你的或其它機器上的程序進行“交談”的一種工具,其程序須運行在網絡服務器上。 2. 功能: 絕大多數的CGI程序被用來解釋處理杰自表單的輸入信息,并在服 務器產生…

Redis sorted set 類型操作及常用命令

七個原則 Redis 是一個操作數據結構的語言工具,它提供基于 TCP 的協議以操作豐富的數據結構。在 Redis 中,數據結構這個詞的意義不僅表示在某種數據結構上的操作,更包括了結構本身及這些操作的時間空間復雜度。Redis 定位于一個內存數據庫&am…

Gradle中的buildScript代碼塊

在編寫Gradle腳本的時候,在build.gradle文件中經常看到這樣的代碼: build.gradle1 2 3 4 5 6 7 8 9 buildScript {repositories {mavenCentral() } }repositories {mavenCentral() }這樣子很容易讓人奇怪,為什么repositories要聲明兩次哪&…

Redis List 類型操作及常用命令

七個原則 Redis 是一個操作數據結構的語言工具,它提供基于 TCP 的協議以操作豐富的數據結構。在 Redis 中,數據結構這個詞的意義不僅表示在某種數據結構上的操作,更包括了結構本身及這些操作的時間空間復雜度。Redis 定位于一個內存數據庫&am…

Hibernate查詢之Criteria查詢

轉自:http://www.cnblogs.com/Laupaul/archive/2012/02/15/2353194.html Criteria是一種比hql更面向對象的查詢方式。Criteria 可使用 Criterion 和 Projection 設置查詢條件。可以設置 FetchMode( 聯合查詢抓取的模式 ) ,設置排序方式,Crite…

IntelliJ Idea 常用插件

必備插件 Lombok 使用此插件可以使得我們的代碼簡潔,不用去寫很多的set/get方法。使用之前需要引入 lombok 插件依賴。 JsonFormat 基于GsonFormat。快速將JSON字符串轉換為實體類。它支持Jackson注釋。 MyBatis Log Plugin 將 SQL 直接打印在控制臺,不用…

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…

Redis Hash 類型操作及常用命令

七個原則 Redis 是一個操作數據結構的語言工具,它提供基于 TCP 的協議以操作豐富的數據結構。在 Redis 中,數據結構這個詞的意義不僅表示在某種數據結構上的操作,更包括了結構本身及這些操作的時間空間復雜度。Redis 定位于一個內存數據庫&am…

Redis set 類型操作及常用命令

七個原則 Redis 是一個操作數據結構的語言工具,它提供基于 TCP 的協議以操作豐富的數據結構。在 Redis 中,數據結構這個詞的意義不僅表示在某種數據結構上的操作,更包括了結構本身及這些操作的時間空間復雜度。Redis 定位于一個內存數據庫&am…

緩存初解(五)---SpringMVC基于注解的緩存配置--web應用實例

之前為大家介紹了如何使用spring注解來進行緩存配置 (EHCache 和 OSCache)的簡單的例子,詳見 Spring基于注解的緩存配置--EHCache AND OSCache 現在介紹一下如何在基于注解springMVC的web應用中使用注解緩存,其實很簡單&#xff0…

Redis String 類型操作及常用命令

七個原則 Redis 是一個操作數據結構的語言工具,它提供基于 TCP 的協議以操作豐富的數據結構。在 Redis 中,數據結構這個詞的意義不僅表示在某種數據結構上的操作,更包括了結構本身及這些操作的時間空間復雜度。Redis 定位于一個內存數據庫&am…

于我,過去,現在和未來 —— 西格里夫·薩松

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,那么斷言為…

linux 二級域名設置

首先,你的擁有一個有泛域名解析的頂級域名,例如: domain.com  其次,在 httpd.conf 中打開 mod_rewrite  之后,在 httpd.conf 的最后,添加以下內容:  RewriteEngine on  RewriteMap lowe…

Spring Boot @Conditional 注解

Spring Boot Conditional注解 Conditional是Spring4新提供的注解,它的作用是按照一定的條件進行判斷,滿足條件的才給容器注冊Bean。 Conditional注解定義 Target({ElementType.TYPE, ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documente…

計算幾何 半平面交

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&…