AttachConsole 函数

将调用进程附加到指定进程的控制台作为客户端应用程序。

语法

BOOL WINAPI AttachConsole(
  _In_ DWORD dwProcessId
);

参数

dwProcessId [in]
要使用其控制台的进程的标识符。 此参数的取值可为下列值之一:

含义
pid 使用指定进程的控制台。
ATTACH_PARENT_PROCESS(DWORD)-1 使用当前进程的父进程的控制台。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError

备注

一个进程最多可以连接到一个控制台。 如果调用进程已附加到控制台,则返回的错误代码为 ERROR_ACCESS_DENIED。 如果指定的进程没有控制台,则返回的错误代码为 ERROR_INVALID_HANDLE。 如果指定的进程不存在,则返回的错误代码为 ERROR_INVALID_PARAMETER

进程可以使用 FreeConsole 函数从其控制台分离自身。 如果其他进程共享控制台,则不会销毁控制台,但调用 FreeConsole 的进程无法引用它。 当连接到它的最后一个进程终止或调用 FreeConsole时,控制台将关闭。 进程调用 FreeConsole后,它可以调用 AllocConsole 函数来创建新的控制台或 AttachConsole ,以附加到另一个控制台。

此函数主要适用于与 /SUBSYSTEM: WINDOWS链接的应用程序,这意味着操作系统在输入程序的 main 方法之前不需要控制台。 在该实例中,在调用AttachConsole之前, GetStdHandle检索到的标准句柄在启动时可能无效。 这种情况的例外是,如果应用程序由其父进程通过句柄继承来启动。

若要编译使用此函数的应用程序,请将 _WIN32_WINNT 定义为 0x0501 或更高版本。 有关详细信息,请参阅使用 Windows 标头

要求

   
最低受支持的客户端 Windows XP [仅桌面应用]
最低受支持的服务器 Windows Server 2003 [仅桌面应用]
标头 ConsoleApi.h (via WinCon.h, include Windows.h)
Kernel32.lib
DLL Kernel32.dll

另请参阅

控制台函数

控制台

AllocConsole

FreeConsole

GetConsoleProcessList