function RunAppInPanel(const AppFileName: string; ParentHandle: HWND; var WinHandle: HWND): Boolean;
var
  si: STARTUPINFO;
  pi: TProcessInformation;
begin
  Result := False;

  // 启动进程
  FillChar(si, SizeOf(si), 0);
  si.cb := SizeOf(si);
  si.wShowWindow := SW_SHOW;
  if not CreateProcess(nil, PChar(AppFileName), nil, nil, true,
    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, si, pi) then Exit;

  // 等待进程启动
  WaitForInputIdle(pi.hProcess, 10000);

  // 取得进程的 Handle
  WinHandle := GetProcessWindow(pi.dwProcessID);
  if WinHandle > 0 then begin
    // 设定父窗体
    Windows.SetParent(WinHandle, ParentHandle);

    // 设定窗体位置
    SetWindowPos(WinHandle, 0, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOZORDER);

    // 去掉标题栏
    SetWindowLong(WinHandle, GWL_STYLE, GetWindowLong(WinHandle, GWL_STYLE)
      and (not WS_CAPTION) and (not WS_BORDER) and (not WS_THICKFRAME));

    Result := True;
  end;

  // 释放 Handle
  CloseHandle(pi.hProcess);
  CloseHandle(pi.hThread);
end;

//var hWin: HWND = 0;
//FormClose
//  if hWin > 0 then PostMessage(hWin, WM_CLOSE, 0, 0);
//FormResize
//  if hWin <> 0 then MoveWindow(hWin, 0, 0, panel1.ClientWidth, panel1.ClientHeight, True);

//if not RunAppInPanel(App, panel1.Handle, hWin) then ShowMessage('App not found');

相关文章:

  • 2022-12-23
  • 2021-12-17
  • 2022-12-23
  • 2021-11-24
  • 2022-12-23
  • 2021-08-24
  • 2022-12-23
猜你喜欢
  • 2021-09-13
  • 2022-12-23
  • 2021-06-07
  • 2021-07-06
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案