如何获取外部应用程序的控制台句柄?
我有一个程序作为控制台运行。我有一个第二个程序将调用 GetConsoleScreenBufferInfo,但为此我需要第一个程序的控制台句柄。给定第一个程序的 HWND 是否有可能我可以获得它的控制台句柄?
如果您只有 HWND,请致电获取窗口线程进程ID http://msdn.microsoft.com/en-us/library/ms633522(VS.85).aspx从给定的 HWND 获取 PID。之后,致电连接控制台 http://msdn.microsoft.com/en-us/library/ms681952(v=VS.85).aspx将您的调用进程附加到给定进程的控制台,然后调用获取标准句柄 http://msdn.microsoft.com/en-us/library/ms683231(VS.85).aspx获取新连接的控制台的 STDOUT 句柄。您现在可以致电获取控制台屏幕缓冲区信息 http://msdn.microsoft.com/en-us/library/ms683171(v=VS.85).aspx使用该手柄。
请记住进行清理,通过调用 FreeConsole 释放控制台的句柄。
Edit:这是与该帖子相关的一些 C++ 代码
#include <sstream>
#include <windows.h>
// ...
// 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
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)