Если у вас есть только HWND, вызовите GetWindowThreadProcessId , чтобы получить PID из данного HWND.После этого вызовите AttachConsole , чтобы присоединить ваш вызывающий процесс к консоли данного процесса, затем вызовите GetStdHandle , чтобы получить дескриптор STDOUT вашей недавно подключенной консоли.Теперь вы можете вызвать GetConsoleScreenBufferInfo , используя этот дескриптор.
Не забудьте очистить, освободив свой дескриптор для консоли, вызвав 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
}
}