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‘);
原文:http://www.cnblogs.com/MaxWoods/p/3710446.html