我写了个程序,基于MFC框架,调用了另一个dos程序,带管道的。
现在程序运行没问题,我想把那个dos程序嵌入到我的主程序中,怎么实现呢?
现在程序运行没问题,我想把那个dos程序嵌入到我的主程序中,怎么实现呢?
解决方案 »
- 关于串口发送数据控制问题
- 不明白返回值有何区别,大家来看看,谢谢
- 做软件开发的兄弟们,你们都是什么杀毒软件呀!!!!!!!!!!!
- 透明窗体和荧光笔
- 关于IRichEditOle的一段代码错误
- is opengl and directx included in vc?
- 求教高手,完成端口可以和其他i/o模式并用么?
- 请教ExcelApplication.DisConnect时,如何避免关闭外部执行的EXCEL程序?
- *.LIB 的文件究竟有何作用?和 DLL 有无联系?是不是可以不要 DLL只用 LIB 也可?
- 请教:怎么使VC的对话框一直保持最前端??
- vc的for 循环怎么写?
- 编制在ListView的打印程序
另外我问的问题不是调用那个dos程序,而是怎样把那个调用的dos程序融合到我的exe文件里面去!
当然用winrar做个脚本这个办法就算啦
HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpVerb,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
示例如下 :
#include <shlobj.h>
#include <shlwapi.h>main()
{
LPMALLOC pMalloc;
LPITEMIDLIST pidlWinFiles = NULL;
LPITEMIDLIST pidlItems = NULL;
IShellFolder *psfWinFiles = NULL;
IShellFolder *psfDeskTop = NULL;
LPENUMIDLIST ppenum = NULL;
STRRET strDispName;
TCHAR pszParseName[MAX_PATH];
ULONG celtFetched;
SHELLEXECUTEINFO ShExecInfo;
HRESULT hr;
BOOL fBitmap = FALSE; hr = SHGetMalloc(&pMalloc);
hr = SHGetFolderLocation(NULL, CSIDL_WINDOWS, NULL, NULL, &pidlWinFiles); hr = SHGetDesktopFolder(&psfDeskTop); hr = psfDeskTop->BindToObject(pidlWinFiles, NULL, IID_IShellFolder, (LPVOID *) &psfWinFiles);
hr = psfDeskTop->Release(); hr = psfWinFiles->EnumObjects(NULL,SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &ppenum); while( hr = ppenum->Next(1,&pidlItems, &celtFetched) == S_OK && (celtFetched) == 1)
{
psfWinFiles->GetDisplayNameOf(pidlItems, SHGDN_FORPARSING, &strDispName);
StrRetToBuf(&strDispName, pidlItems, pszParseName, MAX_PATH);
pMalloc->Free(pidlItems);
if(StrCmpI(PathFindExtension(pszParseName), TEXT( ".bmp")) == 0)
{
fBitmap = TRUE;
break;
}
}
ppenum->Release(); if(fBitmap)
{
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = NULL;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = pszParseName;
ShExecInfo.lpParameters = NULL;
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_MAXIMIZE;
ShExecInfo.hInstApp = NULL; ShellExecuteEx(&ShExecInfo);
} pMalloc->Free(pidlWinFiles);
psfWinFiles->Release(); return 0;
}
首先我把那个dos文件设置为系统、隐藏属性,
然后把mfc的可执行程序和那个dos程序一起压缩,用winrar制作自解压文件,并使用了脚本命令:
Title=demo
Text
{
XXX版权信息等
}
Path=demotest
Overwrite=1
Silent=1
Shortcut=D,demo.exe
Setup=demo.exe
然后使用工具修改了那个自解压rar文件的图标,
这样用户双击这个可执行文件时,dos程序默认在后台解压了,同时实现了mfc调用那个dos
mfc程序退出之前,一个winexec指令删除那个dos文件:)
一切无影无踪啊,
虽然没有什么技术含金量,但也算基本达到功能了