讓mfc程式支援命令列引數
一般情況下,如果我們的vc工程是console控制台型別或者是win32型別的情況下,這兩類的工程型別比較容易獲得命令列引數,即,通過其入口點函式
int main(int argc, char *argv)
int apientry winmain(hinstance hinstance, hinstance hprevinstance, lptstr lpcmdline, int ncmdshow)
複製**
else if (nresponse == idcancel)
return false;}
複製**
我們要獲取程式的命令列引數,一般是在主對話方塊介面顯示之前,即 cprojcleanerdlg dlg; 之前獲取。獲取的方法主要是呼叫 getcommandline 和 commandlinetoargvw 函式。
getcommandline 函式的原型定義如下:
lptstr winapi getcommandline(void);
複製**
沒有引數,返回值是乙個lptstr型別的字串指標,即命令列引數的字串。
預設情況下,每個程式都會有乙個命令列引數,即可執行程式本身的路徑,第二個引數才是真正的附加命令列引數。舉個例子,呼叫getcommandline函式獲取到的命令列引數的字串大致如下:
"e:/software/projcleaner.exe" "-help"
複製**
其中,"e:/software/projcleaner.exe" 為可執行檔案的路徑,"-help" 為附加的引數。
呼叫完 getcommandline 函式獲取到了命令列引數之後,我們就要呼叫 commandlinetoargvw 函式去分解得到的命令列引數字串,commandlinetoargvw 函式的原型定義如下:
lpwstr *commandlinetoargvw(
lpcwstr lpcmdline,
int *pnumargs);
複製**
他有兩個引數,第乙個引數 lpcmdline 即通過 getcommandline 函式獲取到的命令列引數字串指標,第二個引數是乙個 int 型別的指標,用這個引數返回命令列引數中的引數個數,預設情況下,pnumargs 會返回1,如果有附加的命令列引數,該值會大於1,比如:
"e:/software/projcleaner.exe" "-help"
複製**
剛開始我還不以為然,可是最近從網上蒐集到了一些軟體的例子原始碼,想**到我們 vc驛站 - www.cctry.com
,在清理工程目錄過程中確實感到有點不方便,於是我就想也讓我的這個《工程目錄清理器》支援命令列引數,同時整合到資料夾的系統右鍵選單裡面,這樣執行起來就方便多了。說做就做,於是把《工程目錄清理器》的**修改了一下,主要的核心**就是上面提到的。此外,再給大家說一下如何整合到資料夾的系統右鍵選單:
1、在[hkey_classes_root/directory/shell] 分支下建立乙個自己命名的子鍵,例如,我的叫做:projcleaner;
2、將新建子鍵projcleaner下的預設鍵值設定為你想在資料夾右鍵選單中顯示的字串,比如我的設定為:工程目錄清理器;
3、在剛才新建的子鍵projcleaner下面再新建一子鍵,但是名字必須是command;
4、將剛才新建子鍵command下面的預設鍵值設定為:e:/software/projcleaner.exe "%1",其中 e:/software/projcleaner.exe 是工程目錄清理器軟體所在的路徑,這個大家可以根據自己的程式位置來寫,但是後面的 "%1" 大家一定要記得加上,他代表的就是右鍵單擊資料夾所在的路徑,即我們呼叫 getcommandline 函式所獲得的附加引數。
具體,見如下兩幅圖:
經過了以上4個步驟之後,當我們右鍵單擊某個資料夾之後,在彈出的選單中就已經有我們新增的一項即「工程目錄清理器」,如下圖:
修改後的 initinstance() 函式**如下:
;swprintf(szpath, _t("%s%s%s"), _t("確定要清理 [ "), lpszargv[1], _t(" ] 目錄嗎?")); //格式化字串;
if (messagebox(null, szpath, _t("友情提示"), mb_okcancel|mb_iconquestion) == idok)
return false;
} line end;
cprojcleanerdlg dlg;
m_pmainwnd = &dlg;
int_ptr nresponse = dlg.domodal();
if (nresponse == idok)
else if (nresponse == idcancel)
return false;}
複製**
中的原始碼資訊。
具體開啟關聯資料夾右鍵選單的設定在:執行「工程目錄清理器」-> 「設定資訊」按鈕 -> 「關聯資料夾右鍵選單」勾上 -> "應用設定" 即可!
說道這裡也差不多講完了,大家有什麼問題再跟帖提問吧……
讓MFC支援命令列引數
如果在c dlg dlg 之前加入,這個過程就是程式框架出來之前。簡介 lptstr winapi getcommandline void 沒有引數,返回值是乙個lptstr型別的字串指標,即命令列引數的字串。lpwstr commandlinetoargvw lpcwstr lpcmdline,i...
關於main ,讓程式可以執行命令列引數
ms c c應用程式的啟動函式為maincrtstartup 或者winmaincrtstartup 他們都在這個函式內部定義了main 函式,或者winmain 然後以他們的返回值為引數呼叫庫函式exit 因此也就預設了main 應該作為它的連線物件,如果找不到這樣的函式定義,自然就會報錯了。ma...
MFC程式中如何接受命令行引數
方法一 getcommandline 方法二 for int i 0 i argc i for int i 1 i argc i rcmdinfo.parseparam pszparam,bflag,blast 這裡有個繼承ccommandlineinfo類的例子 目標 讓應用程式處理這裡所見的命令...