A程序是一个exe执行文件
B程序可以启动A程序。如果A已经启动,则激活A到当前程序,如果A未启动则启动A程序
EXE

解决方案 »

  1.   

    先遍历所有进程,发现有A程序进程就SetForegroundWindow到前台,如果没有就启动A程序
    启动其他程序可以在以下方式任选一种
    CreateProcess
    WinExec
    WinExecEx
    ShellExcute
      

  2.   

    如何将一个exe执行文件setforegroundwindow到前台?
    我试了很多次都没有成功。
      

  3.   

    首先确认找到的句柄是对的,然后用下面的代码试下:http://bbs.csdn.net/topics/390383307
    function BringWindowToTopEx(hWnd: HWND): Boolean;
    begin
      if IsIconic(hWnd) then
        ShowWindow(hWnd, SW_RESTORE);
      if GetForegroundWindow <> hWnd then
        SetForegroundWindow(hWnd);//enabled
        //BringWindowToTop(hWnd);//not enabled
        //ForceForegroundWindow(hWnd);//enabled
        {SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
        SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);//enabled}
        //SwitchToThisWindow(hWnd, True);//enabled
      Result := GetForegroundWindow = hWnd;
    end;
     
    function BringWindowToTopMost(hWnd: HWND; bTopMost: Boolean): Boolean;
    begin
      if IsIconic(hWnd) then
        ShowWindow(hWnd, SW_RESTORE);
      if bTopMost then
        SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE)
      else
        SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
    end;
     
    function BringWindowToTopXY(hWnd: HWND; X, Y: Integer;
      hWndInsertAfter: HWND): Boolean;
    begin
      Result := BringWindowToTopEx(hWnd);
      Result := SetWindowPos(hWnd, hWndInsertAfter, X, Y, 0, 0, SWP_NOSIZE)
        and Result;
    end;