最近在做網銀檢測工具,在其中需要檢測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!!