获取控制台句柄

如何获取外部应用程序的控制台句柄?

我有一个作为控制台运行的程序。 我有第二个程序将调用GetConsoleScreenBufferInfo,但为此我需要第一个程序的控制台句柄。 是否有可能给出第一个程序的HWND我可以得到它的控制台句柄?

如果您只有HWND,请调用GetWindowThreadProcessId以从给定的HWND获取PID。 然后,调用AttachConsole将您的调用进程附加到给定进程的控制台,然后调用GetStdHandle以获取新连接的控制台的STDOUT句柄。 您现在可以使用该句柄调用GetConsoleScreenBufferInfo 。

记得清理,通过调用FreeConsole释放控制台的句柄。

编辑 :这是一些与该post一起使用的C ++代码

#include  #include  // ... // assuming hwnd contains the HWND to your target window if (IsWindow(hwnd)) { DWORD process_id = 0; GetWindowThreadProcessId(hwnd, &process_id); if (AttachConsole(process_id)) { HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); if (hStdOut != NULL) { CONSOLE_SCREEN_BUFFER_INFO console_buffer_info = {0}; if (GetConsoleScreenBufferInfo(hStdOut, &console_buffer_info)) { std::stringstream cursor_coordinates; cursor_coordinates << console_buffer_info.dwCursorPosition.X << ", " << console_buffer_info.dwCursorPosition.Y; MessageBox(HWND_DESKTOP, cursor_coordinates.str().c_str(), "Cursor Coordinates:", MB_OK); } } else { // error handling } FreeConsole(); } else { // error handling } }