最近在做网银检测工具,在其中需要检测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!!