21xrx.com
2025-03-21 21:14:18 Friday
文章检索 我的文章 写文章
C++编写实现窗口内运行其它EXE应用程序
2023-06-27 03:22:19 深夜i     15     0
C++ 窗口 运行 EXE应用程序

在C++编程中,有时我们需要在自己的程序窗口内运行其它 EXE 应用程序,比如启动一个游戏,运行一个图片编辑软件等。本文将介绍如何使用 C++ 编写实现窗口内运行其它 EXE 应用程序的方法。

首先,我们需要使用 Windows API 中的 CreateProcess() 函数来启动目标应用程序。该函数的声明如下:

BOOL WINAPI CreateProcess(
 _In_opt_   LPCTSTR lpApplicationName,
 _Inout_opt_ LPTSTR lpCommandLine,
 _In_opt_   LPSECURITY_ATTRIBUTES lpProcessAttributes,
 _In_opt_   LPSECURITY_ATTRIBUTES lpThreadAttributes,
 _In_     BOOL bInheritHandles,
 _In_     DWORD dwCreationFlags,
 _In_opt_   LPVOID lpEnvironment,
 _In_opt_   LPCTSTR lpCurrentDirectory,
 _In_     LPSTARTUPINFO lpStartupInfo,
 _Out_    LPPROCESS_INFORMATION lpProcessInformation
);

其中,lpApplicationName 参数是应用程序的完整路径名称,如果设置为 NULL,则需要在 lpCommandLine 参数中指定应用程序的完整路径名称;lpCommandLine 参数则是应用程序的命令行参数,可以设置为 NULL。

接着,我们需要使用 Windows API 中的 SetParent() 函数将目标应用程序的窗口设为当前程序窗口的子窗口。该函数的声明如下:

HWND WINAPI SetParent(
 _In_   HWND hWndChild,
 _In_opt_ HWND hWndNewParent
);

其中,hWndChild 参数是目标应用程序的主窗口句柄,可以使用 GetWindow() 函数来获取;hWndNewParent 参数则是当前应用程序窗口的句柄。

最后,我们需要使用 Windows API 中的 ShowWindow() 函数来显示目标应用程序的窗口。该函数的声明如下:

BOOL WINAPI ShowWindow(
 _In_ HWND hWnd,
 _In_ int nCmdShow
);

其中,hWnd 参数是目标应用程序的主窗口句柄,可以使用 GetWindow() 函数来获取;nCmdShow 参数则是显示窗口的方式,可以设置为 SW_SHOW 或 SW_MAXIMIZE 等值。

下面是一个简单的示例代码:

#include <windows.h>
int main()
{
  STARTUPINFO si = { sizeof(si) };
  PROCESS_INFORMATION pi;
  TCHAR szCommandLine[MAX_PATH] = TEXT("notepad.exe");
  if (CreateProcess(NULL, szCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
  {
    WaitForInputIdle(pi.hProcess, INFINITE);
    HWND hWndTarget = FindWindow(NULL, TEXT("无标题 - 记事本"));
    if (hWndTarget) SetParent(hWndTarget, GetForegroundWindow());
    ShowWindow(hWndTarget, SW_SHOWMAXIMIZED);
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
  }
  return 0;
}

上述代码中,我们启动了记事本应用程序,然后将它的窗口设为当前程序窗口的子窗口,并最大化显示。注意,需要在 WaitForInputIdle() 函数中等待目标进程变为空闲状态,以确保能够正确获取目标窗口句柄。

通过上述方法,我们就可以在 C++ 编程中实现窗口内运行其它 EXE 应用程序的功能了。

  
  

评论区