请教大家一个问题,我有一个EXE文件,是一个独立的程序,运行之后是有UI界面的,我现在想把它再包装一层,使它必须由我自己写的程序调用,直接运行它便不行,不知道如何处理?
解决方案 »
- 怎么去掉MDI中的ChildFrame子窗口上的ICON图标??
- 为这个世界充满黑幕散分
- 怎样把坐标系上的100个点连成一条圆滑的曲线
- ==切分窗口的问题==
- 关于某种文件关联的问题
- asp中调用com报一个错误“不能运行进程外组件”,请问如何处理,大侠们帮忙啦?
- 讨论:英文版98和简体中文98的区别。中文如何处理汉字? 诚心邀请各位,请进!
- 怎么调用当前目录下应用程序??
- 遇到个非常棘手的问题 ocx 中char *转VARIANT数据结构后 用网页调用数据有乱码或者屁股多了一些数据(非中文)
- CopyFile()中使用相对路径的问题
- 这样画图,如何处理?
- 我的一个读串口的代码,一运行就死,请大家帮忙,谢谢!
如果没有找的调用它的主程序句柄就直接return
例如:
CYourApp::InitInstance()if(FindWindow(NULL,"主程序")==NULL)
return FALSE;
ShellExecute(handle, "open", "exe文件名", NULL, NULL, SW_SHOWNORMAL);
或
WinExec("exe文件名", SW_SHOWNORMAL);
当然你还可用CreateProcess
检查父进程,如果不是 你自己写的 exe ,就return FALSE ;下面的函数 父 进程不是 explorer.exe 返回 TRUE ;
参考 《软件加密技术内幕》
BOOL IsInDebugger()
{HANDLE hProcessSnap = NULL;
char Expchar[] ="\\EXPLORER.EXE";
char szBuffer[MAX_PATH]={0};
char FileName[MAX_PATH]={0};
PROCESSENTRY32 pe32 = {0};
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //得到所有进程的列表快照if (hProcessSnap == INVALID_HANDLE_VALUE)
return FALSE; pe32.dwSize = sizeof(PROCESSENTRY32);
if (!Process32First(hProcessSnap, &pe32)) // 查找进程
{
CloseHandle (hProcessSnap);
return FALSE;
}do // 遍历所有进程
{
if(pe32.th32ProcessID==GetCurrentProcessId() )//判断是否是自己的进程?
{ HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pe32.th32ParentProcessID); //打开父进程
if (hProcess)
{
if (GetModuleFileNameEx(hProcess, NULL, FileName, MAX_PATH) ) // 得到父进程名
{
GetWindowsDirectory(szBuffer,MAX_PATH); //得到系统所在目录
strcat(szBuffer,Expchar); //组合成类似的字串D:\Winnt\Explorer.EXE
if(strcmpi (FileName,szBuffer)) // 比较当前是否为Explorer.EXE进程
return TRUE; // 父进程若不是Explorer.EXE,则是调试器
}
else
{
return FALSE; // 无法获得进程名
}
CloseHandle (hProcess);
}
else
{
return FALSE;//无权访问该进程
} }
}
while (Process32Next(hProcessSnap, &pe32));CloseHandle (hProcessSnap);
return FALSE; }