自定义快捷命令程序(VC++加批处理)
生活随笔
收集整理的這篇文章主要介紹了
自定义快捷命令程序(VC++加批处理)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一 概述
在看《從小工到專家-程序員修煉之道》時(shí),看到建議使用Shell,很有感觸。在很多時(shí)候,通過(guò)鍵盤操作,比鼠標(biāo)的確會(huì)塊很多,如果能用好shell命令(或批處理命令)? ?,的確能節(jié)省我們很多的時(shí)候,特別是許多經(jīng)常重復(fù)的工作。例如打開瀏覽器,進(jìn)入csdn,cnblogs等感興趣網(wǎng)站這樣的工作,很多人會(huì)一天會(huì)重復(fù)許多次,每次重復(fù)這樣的過(guò)程,單調(diào)且浪費(fèi)不少時(shí)間,積少成多,浪費(fèi)的時(shí)間很可觀,其實(shí)可以使用命令行中,“瀏覽器.exe + 參數(shù)”的方式輕松的實(shí)現(xiàn)對(duì)興趣網(wǎng)站的訪問(wèn)。其他的常用操作還有很多,例如“打開遠(yuǎn)程連接”,“通過(guò)VS2010打開自己最近在工作的項(xiàng)目”,“打開服務(wù)程序”,“打開常用文件夾”,使用自己常用的工具。
二 問(wèn)題
如果都使用shell命令(或批處理命令),通過(guò)鍵盤進(jìn)行這些操作,肯定會(huì)快的多。但是這些命令復(fù)雜而且不容易記住,怎么辦? 我簡(jiǎn)單的列舉了一下使用命令會(huì)遇到的問(wèn)題,并在后面一 一進(jìn)行解決。 1: 如何方便的打開命令行工具?如何輕松的實(shí)現(xiàn)輸入命令? 2: Shell命令(或批處理命令)這么復(fù)雜,不容易記住。 3: 執(zhí)行一個(gè)命令要輸入太多代碼,不比直接代開快。 4: 是否可以很輕松的添加自己的命令三 使用場(chǎng)景
根據(jù)自己的理解,我通過(guò)批處理實(shí)現(xiàn)了一個(gè)使用命令行快速執(zhí)行命令的程序。 我的程序叫XBAT,在開機(jī)時(shí)自動(dòng)運(yùn)行。XBAT的界面為一個(gè)可見的文本框,位于左面的右上角,占據(jù)很小的位置(見下圖紅色標(biāo)出部分)。 使用場(chǎng)景: 1: 用戶想用瀏覽器打開百度網(wǎng)站時(shí),同時(shí)按下“Win + Z”鍵,XBAT文本框獲得焦點(diǎn) 2: 用戶輸入“bd”,按下Enter鍵。 3: 瀏覽器打開百度站點(diǎn)。 現(xiàn)在這個(gè)程序我自己用起來(lái)得心應(yīng)手,沒(méi)有這個(gè)程序,我感覺(jué)很不方便。 我現(xiàn)在常用的是用它來(lái)打開iis,打開“服務(wù)”,打開“DEPENDS.EXE”,打開自己常用的文件夾,常用的sln,打開命令行,打開常用站點(diǎn),常用文件夾。四 實(shí)現(xiàn)
使用就是這樣簡(jiǎn)單。 實(shí)現(xiàn)也不復(fù)雜。 1:XBAT中,捕獲“Win + Z”快捷鍵,不管你在干什么,知道按下這組快捷鍵,就會(huì)將焦點(diǎn)設(shè)置到XBAT的文本框中。MFC的實(shí)現(xiàn)代碼為: 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會(huì)以用戶輸入命令為參數(shù)調(diào)用一個(gè)批處理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會(huì)根據(jù)用戶輸入的bd,知道是要訪問(wèn)百度網(wǎng)站,就找到瀏覽器的exe文件,以百度地址為參數(shù),調(diào)用瀏覽器命令,實(shí)現(xiàn)打開網(wǎng)站的操作。 if %1==bd (start /max "C:\...\360se.exe" "www.baidu.com" )
?
4: 對(duì)run.bat進(jìn)行重構(gòu) 1) 我們需要打開的站點(diǎn)有很多,所以需要將打開瀏覽器的代碼抽象出來(lái),我的做法是把這些批處理放置到單獨(dú)的文件“openurl.bat”中。 代碼成了 if %1==bd ( call openurl "www.baidu.com" )?
2) 將要打開的網(wǎng)站和類似的“bd”命令放置到一個(gè)文件中單獨(dú)配置,這個(gè)文件叫“store.txt”。 除了能打開網(wǎng)站以外,還需要能打開一些exe文件,打開文件夾,打開VS的sln。也就是說(shuō)要針對(duì)多種操作類型,需要對(duì)操作類型進(jìn)行定義: s: 打開sln(使用vs2010,提供一個(gè)opensln.bat批處理,里面代碼: start "C:\...\VSLauncher.exe" "%1"?
) u: 打開網(wǎng)站(使用瀏覽器,使用openurl批處理,里面就一行代碼: start /max "C:\...\360se.exe" %1?
) o: 對(duì)象文件,直接執(zhí)行(提供一個(gè)openexe.bat批處理,里面就一行代碼: start "" %1?
) f: 打開文件夾(提供一個(gè)openfolder.bat批處理,里面就一行代碼: start %1?
) 后來(lái)有添加了打開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 找到選項(xiàng) %%kset found=1) )?
store.txt的內(nèi)容如下: kfgj E:\開發(fā)工具 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
?
說(shuō)到這兒,就有一個(gè)我頭疼的問(wèn)題,在store.txt中,我無(wú)法在諸如“:\開發(fā)工具”中包含空格,不知道有沒(méi)有人知道怎么處理? 在run.bat中,還有一些操作不能包括在這幾種操作中,只好單獨(dú)處理了,特別是帶參數(shù)的。(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 )?
五 結(jié)束
除了這些功能外,我還添加了按“win+C”打開“store.txt”文件,按“Win+V”打開XBAT的文件夾。 XBAT的不足有: 1: 雖然軟件界面很小,但是還是存在,而且是在界面的頂層,特別是播放視頻的時(shí)候,看著不舒服。 2: 在store的文件夾等路徑中,不能包含空格。 3: 有時(shí)候會(huì)被360認(rèn)為有危險(xiǎn)。 4: 添加新的命令不方便,需要打開store.txt自己動(dòng)手添加 5: 暫時(shí)XBAT只接受簡(jiǎn)單的指令,無(wú)法輸入帶參數(shù)的指令,例如查找文件等 源代碼下載地址: http://download.csdn.net/detail/xumingxsh/7801215 Release版下載地址: http://download.csdn.net/detail/xumingxsh/7801733轉(zhuǎn)載于:https://www.cnblogs.com/Rong-/p/3929791.html
總結(jié)
以上是生活随笔為你收集整理的自定义快捷命令程序(VC++加批处理)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux 文件拆分 合并,Linux下
- 下一篇: c++ dll发消息到主窗口_PyQt5