请教大家一个问题,我有一个EXE文件,是一个独立的程序,运行之后是有UI界面的,我现在想把它再包装一层,使它必须由我自己写的程序调用,直接运行它便不行,不知道如何处理?

解决方案 »

  1.   

    在被调用程序的初始化函数中使用FindWindow(),
    如果没有找的调用它的主程序句柄就直接return
    例如:
    CYourApp::InitInstance()if(FindWindow(NULL,"主程序")==NULL)
         return FALSE;
      

  2.   


    ShellExecute(handle, "open", "exe文件名", NULL, NULL, SW_SHOWNORMAL);

     WinExec("exe文件名", SW_SHOWNORMAL);
    当然你还可用CreateProcess
      

  3.   

    你可以把这个EXE文件作为资源,导入到你的程序中,在需要运行的时候,再将其作为exe文件释放出来。然后用CreateProcess或者ShellExcute或者WinExec来运行它。
      

  4.   

    先写一个 win32 的就可以, WinMain 中 调用 CreateProcess 创建进程。有UI 界面的 在CYourApp::InitInstance() 里面,
    检查父进程,如果不是 你自己写的 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; }
      

  5.   

    在你的程序中用ShellExecute,CreateProcess再运行exe