1. 程式人生 > >VC應用程式快捷方式帶引數

VC應用程式快捷方式帶引數

原始碼:下載

以前寫過一個簡訊平臺的客戶端程式,程式寫好的時候老闆幫我測試,提了個要求說:你的程式必須要避免能夠執行多次,而且又要根據不同的配置檔案必須能夠執行多個。聽了這話就有點暈,我當時也是,不知道應該怎麼辦。後來經老闆提醒說可以在快捷方式(他以前使用過一個軟體有這個功能)上考慮怎麼做。於是我考慮並且苦心尋找,終於實現了此功能。現寫出來分享給大家。

步驟一:首先簡單的來談談CCommandLineInfo類


類CcommandLineInfo,它是用來處理命令列資訊的類。其類原型定義如下:

複製程式碼 程式碼
以下是程式碼片段:
class CCommandLineInfo : public
Cobject { public: // Sets default values CCommandLineInfo(); //plain char* version on UNICODE for source-code backwards compatibility virtualvoid ParseParam(const TCHAR* pszParam, BOOL bFlag, BOOL bLast); #ifdef _UNICODE virtualvoid ParseParam(constchar* pszParam, BOOL bFlag, BOOL bLast);
#endif BOOL m_bShowSplash; BOOL m_bRunEmbedded; BOOL m_bRunAutomated; enum { FileNew, FileOpen, FilePrint, FilePrintTo, FileDDE, AppUnregister, FileNothing =-1 } m_nShellCommand; // not valid for FileNew Cstring m_strFileName; // valid only for FilePrintTo Cstring m_strPrinterName; Cstring m_strDriverName; Cstring m_strPortName;
~CCommandLineInfo(); // Implementation protected: void ParseParamFlag(constchar* pszParam); void ParseParamNotFlag(const TCHAR* pszParam); #ifdef _UNICODE void ParseParamNotFlag(constchar* pszParam); #endifvoid ParseLast(BOOL bLast); };
複製程式碼

CCommandLineInfo類具體的引數和函式都是什麼功能,我就不說了,具體的請參看MSDN吧(我怕自己說的不好,呵呵~)。

步驟二:得到快捷方式(是一個EXE檔案)的引數


關鍵程式碼如下:

複製程式碼 程式碼
以下是程式碼片段:
//begin 給EXE帶上引數     CCommandLineInfo cmdInfo; 
    ParseCommandLine(cmdInfo); 
    strFile.Format("%s",cmdInfo.m_strFileName); 
    if (strFile =="")  
{ 
        strFile ="configfile.ini"; 
    } 
//end 給EXE帶上引數
複製程式碼

步驟三:從配置檔案中得到公司名


關鍵程式碼如下:

複製程式碼 程式碼
以下是程式碼片段:
//begin 從配置檔案中得到公司名 char databuf[32]; 
    char filepath[1024]; 
    memset(databuf,0,32); 
    memset(filepath,0,1024); 
    GetCurrentDirectory(1024,filepath); 
    strcat(filepath ,"\\" ); 
    strcat(filepath ,strFile); 
    Cfile file; 
    if (!file.Open(filepath,Cfile::modeRead | Cfile::shareDenyWrite)) 
    { 
        Cstring str="%檔案不存在!"; 
        str.Replace("%",strFile); 
        AfxMessageBox(str);     
        returnfalse; 
    } 
    memset(databuf,0,32); 
    GetPrivateProfileString("main","company","",databuf,32,filepath); 
    strCompany = databuf; 
    memset(databuf,0,32); 
    Cstring strTitle = strCompany +"CMPP3簡訊平臺客戶端"; 
//end 從配置檔案中得到公司名
複製程式碼

步驟四:避免同一個應用程式執行多次


關鍵程式碼如下:

複製程式碼 程式碼
以下是程式碼片段:
//begin 避免同一個應用程式執行多次     HWND hWnd = ::FindWindow(NULL, (LPCSTR)strTitle); 
    if (hWnd)  
    { 
     AfxMessageBox("系統檢測到您已經運行了該個程式。\r\n如確實要執行請退出另外一個程式再執行該程式!");          
        returnfalse;     
    } 
//end 避免同一個應用程式執行多次
複製程式碼

步驟五:根據不同的公司顯示不同的簡訊平臺程式


可能有些人看了上面的還不是太明白。下面我再簡單描述一下具體的操作步驟。

1、下載文章附帶的原始碼到你機子,用VC6編譯執行。

2、如果你是在debug下編譯執行的,你開啟debug資料夾。把configfile.ini和configfile1.ini檔案放到debug資料夾下。如果你是在release下編譯執行,同理。

3、現在debug或release資料夾中只有一個ShortcutParameter.exe應用程式,你可以一直點它,但它只能執行一次。現給它建立快捷方式,給快捷方式帶引數讓它根據配置檔案中的不同的公司名都顯示應用程式。點ShortcutParameter.exe應用程式右鍵建立快捷方式,在建立的快捷方式右鍵->屬性->快捷方式->目標 裡面的ShortcutParameter.exe後面空格再加上configfile1.ini。例如:D:\ShortcutParameter\Debug\ShortcutParameter.exe configfile1.ini


示例圖如下:

 


4、分別執行兩個ShortcutParameter.exe應用程式,會發現打開了兩個ShortcutParameter.exe應用程式,但你會發現是兩個公司的了,看看標題欄。

呵呵~你執行成功後,是不是很開心。

具體程式還是請看原始碼吧。可能我描述的不太清楚,如有不解之處,請聯絡我。