如何在某一个EXE的程序加上一个参数让其变成从属性
比如有两个EXE程序:   AB.EXE   ABC.EXE
在AB.EXE中可以调用那个ABC.EXE程序,ABC.EXE程序不能“独立运行”
若“独立运行”的话,就提示,“程序不能运行,必须在AB.EXE中
运行这个程序,因为这个程序是从属性程序只能被调用而不能独立运行”

解决方案 »

  1.   

    procedure CheckParentProc;    //检查自己的进程的父进程
    var
      Pn: TProcesseNtry32;
      sHandle:THandle;
      H,ExplProc,ParentProc:Hwnd;
      Found:Boolean;
      Buffer:array[0..1023]of Char;
      Path:string;
    begin
      H:= 0;
      ExplProc:= 0;
      ParentProc:= 0;
        //得到Windows的目录;
      SetString(Path,Buffer,GetWindowsDirectory(Buffer,Sizeof(Buffer)- 1));
      Path:= 'Explorer.EXE';//得到Explorer的路径
      //得到所有进程的列表快照
      sHandle:= CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
      Pn.dwSize := sizeof(TProcessEntry32);
      Found:= Process32First(sHandle,Pn);//查找进程
      while Found do //遍历所有进程
      begin
        if Pn.th32ProcessID = GetCurrentProcessId then
        begin
          ParentProc:= Pn.th32ParentProcessID;
          H:= OpenProcess(PROCESS_ALL_ACCESS,True,Pn.th32ParentProcessID);
        end;
        if LowerCase(Pn.szExefile)= 'explorer.exe'then
        begin
          ExplProc:= Pn.th32ProcessID;//Ex plorer的PID
        end;
        Found:= Process32Next(sHandle,Pn);//查找下一个
      end;
      //父进程不是Explorer,是调试器……
      if ParentProc <> ExplProc then
      begin
        TerminateProcess(H,0);
        Halt;
        Exit;
      end;
    end;在ABC.exe中检测父进程就可以了,双击执行程序的父进程是Explorer.exe ,你在ABC中判断父进程是否是AB.exe,把上面的代码中的Explorer稍微改下 ,改成判断AB.exe。
      

  2.   

    很简单,出入命令行参数即可,如果没有参数,则程序不允许,如果有参数,表示有自己程序调用,可以运行
    uses
    shellapi;ShellExecute的第四个参数可以当命令行参数
      

  3.   

    program photoflipbookbuilder;
    .
    .
    .
    .
    .
    .
    .
    begin
      if ParamCount = 0 then exit;
      Application.CreateForm(TfrmMain, frmMain);
      Application.Run;  
    end.
      

  4.   

    ABC.exe里用paramstr(1)取主程序的参数,判断ABC.EXE 的paramstr(1)是不是为空
    如果是空的就showmessage,是这样的吧?
    我也想知道paramstr(1)所取得的参数是怎么写入AB.EXE的
      

  5.   

    ShellExecute(handle, 'open', pchar('ABC.EXE'), '123456', nil, SW_HIDE);
    试试看
      

  6.   

    两个EXE程序: AB.EXE ABC.EXE
    在AB.EXE中可以调用那个ABC.EXE程序,ABC.EXE程序不能“独立运行”
    -------------------------------------------------------------
    我想问一下那个123456的参数设置在ABC.EXE程序中的什么地方呀
      

  7.   

    abc.exe运行后检查自己的第x个命令行参数是不是123456,是则继续,不是则退出
      

  8.   

    楼上的说得太复杂了吧?
    给个简单的:
    ABC.EXEprogram ABC;uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1};{$R *.res}begin
      if ParamStr(1) <> '12345' then Halt; //如果第一个参数不为12345则挂掉如果复杂点需要
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.
    那么,如何调用 ABC.EXE 呢?这位同学问得好!  ShellExecute(0,'open','ABC.exe', '12345',nil,SW_SHOWNORMAL);
      

  9.   

    注意的是 
      ShellExecute(0,'open','ABC.exe', '12345',nil,SW_SHOWNORMAL);这里面的ABC.exe要改为绝对路径比较好,那,为什么你这样写呢?这位同学问得好!
    因为我懒
      

  10.   

    paramstr(1)取的是当前运行的程序的参数吧?这个我也不太清楚。
      

  11.   

    找到处理的方法了,我在ABC.EXE中的设置paramstr(1)来获取主程序中的调用时的参数,
    主程序的AB.EXE中的调用方法如下: ShellExecute(0,'open','ABC.exe', '12345',nil,SW_SHOWNORMAL);谢谢各位顶帖子,给分》》》》》》》》》》》》》》》》