Se si dispone solo di un HWND, chiamare GetWindowThreadProcessId per ottenere un PID da un determinato HWND. Successivamente, chiamare il numero AttachConsole per allegare il processo di chiamata alla console del processo specificato, quindi chiamare GetStdHandle per ottenere un handle per STDOUT della console appena collegata. È ora possibile chiamare GetConsoleScreenBufferInfo utilizzando tale maniglia.
Ricordarsi di eseguire la pulizia, liberando l'handle dalla console chiamando FreeConsole.
Edit: Ecco il codice C++ di andare con quel post
#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
}
}
fonte
2010-10-04 21:39:29
ottengo un errore di strano su di attachconsole. errore # 31 - "Un dispositivo collegato al sistema non funziona" – Cornwell
Secondo msdn, fallisce perché il processo non esiste. Ma controllo il pid ed è corretto. sono stati entrambi creati con gli stessi privilegi. – Cornwell
Il processo di chiamata attach probabilmente deve essere eseguito come amministratore. –