天天看點

MFC工程中調用外部EXE資源...

最近在做網銀檢測工具,在其中需要檢測USBKey管理工具是否安裝,如果沒有安裝的話,需要修複安裝,廢話不多說,基本的操作流程是:

(1)、把外部EXE程式加入到VC工程資源Resource中,即Resource ->import —>自定義資源名稱

(2)、在工程名、rc下就會有相應的ocx控件資源清單項.

(3)、打開Projecft.rc 中找到

IDR_EXE2   EXE   DISCARDABLE     "res//*.*"

其中IDR_EXE2 是資源的的ID, EXE是定義資源的Type, "res//*.*"是資源的相對路徑。

(4)、在工程的某些函數處需要調用這些資源時,就要用到下面的windows API函數:

 FindResource()、LoadResource()、SizeofResource() 和LockResource() ,不要忘記最後 FreeResource()哦...

這幾個函數的參數原型可以上Google去百度下...隻要不是“敏感詞”就能sou到...

具體的調用流程就是如此easy:

  HINSTANCE  hInst  = NULL;

  HRSRC hResInfo = FindResource(hInst, MAKEINTRESOURCE(資源ID), “資源類型”); //定位我們的自定義資源

  DWORD  cbLen= SizeofResource(hInst, hResInfo);  //獲得資源的大小 (PS:這步我覺得可有可無)

  HGLOBAL hGlobal = LoadResource(hInst, hResInfo);  //加載資源執行個體..

  LPVOID lp= LockResource(hGlobal);   //鎖定資源..便于對資源操作...

  LockResource()函數傳回 LPVOID類型的值,使用者可以對資源的傳回值自定義例如:

   BYTE *bc; bc = (BYTE *)LockResource(hGlobal);Next 可以對資源對應bc進行操作了

 感覺自己廢話太多了...這些google上都有..具體到個人的工程中,那就用卡爾.馬克思的主義的“具體問題具體分析”了..

(5)、在我的工程中,是要将一個安裝檔案(exe格式)作為一個資源加入到MFC工程中,具體步驟就是前三步,第四步是相應源碼中實作的..套用魔術大師--劉謙的口頭禅:接下來就是見證奇迹的時刻了..不錯,下面就是具體問題具體分析了(估計是高中受政治課的迫害太深):

    CString filename = _T("CDYHKEY.exe"); //自定義一個檔案名稱,用于下面的調用

    HANDLE fp = ::CreateFile(filename,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);  //建立一個臨時檔案,就在目前目錄下(如果最後不想保留這個臨時檔案的話可以調用 DeleteFile(LPCSTR 檔案名稱)删除)

    DWORD a;  WriteFile(fp,lp,nDataLen,&a,NULL);//向臨時檔案中寫入lp對應的資源資料...

     CloseHandle(fp);   //關閉檔案句柄  (MS沒有這步的話直接ShellExecute 傳回值 < 32)  

     FreeResource(hMem);  //釋放資源檔案

   //接着就可以用ShellExecute()執行filename對應的資源檔案了...各參數的含義可以google之...

   int n = (int)ShellExecute(NULL,_T("open"),_T("CDYHKEY.exe"),_T(""),_T(""), SW_SHOW );

   傳回值n > 32 則執行成功,否則傳回值是什麼就找相應的錯誤代碼...

...............相關的操作至此over,

PS:11月19号 《哈利波特和死聖(上)》内地上映...等能一年終于等到了...再想看看赫敏,斯内普教授(傳說中的Prince of Half-Blood),下部據說2011年7月上映..好難等啊...

緻高傲的混血王子---哈迷中流傳的一段話,很發人深思:

      曾經看過一部電影,它說人在臨死前的那一刻,記憶中最美麗的片段會快速的在人的眼前倒帶,然後播放。那麼什麼是最美麗的片段呢?是她在秋千上的搖擺?還是在校園中榉樹下走過的她的身影?是消失的夕陽?還是短暫的快樂?如今她已經埋葬在陰冷的山谷中,身邊躺着的是她深愛的丈夫,而他卻流盡熱血,孤獨的倒在沉重的誓言下.....

     最感動的莫過于斯内普死前的對哈利的說的那句話:Look ..at ..me!!

繼續閱讀