我在一个工程1的一个按钮的click中
调用winexec('project2.exe');那么就运行工程2]如果我想实现 在工程1的一个按钮的click中
实现 运行工程2后自动触发工程2中form1的一个按钮click
怎么实现??声明一下 不能在form的create中 触发click
因为我只有 在工程1的一个按钮的click中 运行project2后触发它里面一个click简单的说就是 在project1中的按钮click 怎么 调用project2中一个按钮的click????

解决方案 »

  1.   

    FindWindow获取窗口句柄
    FindWindowEx获取按钮句柄,
    发送消息
    SendMessage(btnHandle,BN_CLICKED,0,0);
      

  2.   


    procedure TForm1.Button1Click(Sender: TObject);
    type
      //定义一个结构体,用来返回启动窗体的句柄
      PFindData = ^TFindData;
      TFindData = record
        hProcess: THandle;
        hWindow: THandle;
      end;  function EnumWindowsProc(Handle: THandle; lParam: LPARAM): Boolean; stdcall;
      var
        hProcess: THandle;
        FindData: PFindData;
      begin
        Result := True; //继续枚举一下窗体
        FindData := PFindData(lParam);
        GetWindowThreadProcessId(Handle, hProcess); //取得窗体进程ID号
        if hProcess = FindData^.hProcess then
        begin
          FindData^.hWindow := Handle; //已经找到!!
          Result := False;
        end;
      end;var
      FileName: string;
      ProcessInfo: TProcessInformation;
      StartUpInfo: TStartupInfo;
      hButton: THandle;
      AFindData: TFindData;
    begin
      FileName := ExtractFilePath(ParamStr(0)) + 'Project2.exe';  FillChar(StartUpInfo, SizeOf(StartUpInfo), $00);
      StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartUpInfo.wShowWindow := SW_SHOW;  if CreateProcess(nil, PChar(FileName), nil, nil,
        False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo,
        ProcessInfo) then
      begin
        //等就直到另外一下程序都准备好了
        WaitForInputIdle(ProcessInfo.hProcess, INFINITE);    AFindData.hProcess := ProcessInfo.dwProcessId;
        AFindData.hWindow := 0;
        EnumWindows(@EnumWindowsProc, Integer(@AFindData));
        if AFindData.hWindow <> 0 then
        begin
          hButton := FindWindowEx(AFindData.hWindow, 0, 'TButton', 'Button1');
          if hButton <> 0 then
            SendMessage(hButton, CN_COMMAND, BN_CLICKED, 0);
        end;    CloseHandle(ProcessInfo.hThread);
        CloseHandle(ProcessInfo.hProcess);
      end;
    end;
      

  3.   

    FindWindow获取窗口句柄 
    FindWindowEx获取按钮句柄, 
    发送消息 
    SendMessage(btnHandle,BN_CLICKED,0,0);
      

  4.   

    用 findwindowex可以实现
    想问一下winexec可以实现么?
      

  5.   

    用 findwindowex的方法可以实现
     
    想问一下winexec可以实现么?
    可以的话 怎么实现?????