2010-10-04 49 views
5

Làm cách nào để tôi có được giao diện điều khiển của ứng dụng bên ngoài?Xử lý bảng điều khiển

Tôi có một chương trình đang chạy dưới dạng bảng điều khiển. Tôi có một chương trình thứ hai mà sẽ gọi GetConsoleScreenBufferInfo, nhưng cho rằng tôi cần bàn điều khiển của chương trình đầu tiên. Có thể cho HWND của chương trình 1 tôi có thể có được bàn điều khiển của nó xử lý?

Trả lời

5

Nếu bạn chỉ có HWND, hãy gọi GetWindowThreadProcessId để lấy PID từ một HWND đã cho. Sau đó, hãy gọi AttachConsole để đính kèm quy trình gọi của bạn vào bảng điều khiển của quá trình đã cho, sau đó gọi GetStdHandle để có được xử lý cho STDOUT của bảng điều khiển mới được đính kèm của bạn. Bây giờ bạn có thể gọi GetConsoleScreenBufferInfo bằng cách sử dụng tay cầm đó.

Nhớ dọn dẹp, giải phóng tay cầm của bạn với bảng điều khiển bằng cách gọi FreeConsole.

Sửa: Dưới đây là một số mã C++ để đi với bài mà

#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 
    } 
} 
+0

tôi nhận được một lỗi lạ trên attachconsole. lỗi # 31 - "Một thiết bị gắn vào hệ thống không hoạt động" – Cornwell

+0

Theo msdn, nó không thành công vì quá trình này không tồn tại. Nhưng tôi kiểm tra pid và nó là chính xác. cả hai đều được tạo ra với cùng các đặc quyền. – Cornwell

+0

Quá trình gọi đính kèm có thể cần chạy như quản trị viên. –

Các vấn đề liên quan