21xrx.com
2024-09-19 09:23:31 Thursday
登录
文章检索 我的文章 写文章
C++编写实现窗口内运行其它EXE应用程序
2023-06-27 03:22:19 深夜i     --     --
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 应用程序的功能了。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复