2013-08-02 147 views
5

Tôi đang tìm cách gây rối với C++ và xây dựng một số loại ứng dụng dành cho máy tính để bàn có thể tương tác với các cửa sổ khác. Một cái gì đó giống như trình quản lý ốp lát cửa sổ (ví dụ: thu nhỏ cửa sổ hiện tại, chụp cửa sổ vào lưới, v.v.). Điều này có thể thực hiện trong C++ không? Tôi đã từng làm việc với các công cụ dòng lệnh, vì vậy có một khuôn khổ tốt cho loại công việc này không? Bất cứ điều gì đúng hướng hoặc làm thế nào tôi có thể thực hiện một cái gì đó như thế này sẽ là tuyệt vời.Có thể sử dụng C++ để tương tác với các ứng dụng đang chạy không?

+0

Nó chắc chắn nhất có thể. – chris

+2

Phụ thuộc vào hệ điều hành và trình quản lý cửa sổ sẽ cho phép bạn (như trong đó, nó cung cấp các chức năng cần thiết). –

+0

Thông thường, có. Nhưng như Drew đã nói, nó phụ thuộc vào hệ điều hành và trình quản lý cửa sổ, vì vậy hãy cho chúng tôi biết điều đó và chúng tôi có thể giúp bạn thêm. Một số có API cho phép bạn thực hiện việc này một cách dễ dàng, trong khi một số có thể khó hơn một chút. – danielunderwood

Trả lời

4

Trong Windows

Bạn có thể sử dụng EnumWindows để lặp qua từng cửa sổ. Nó bắt đầu từ cửa sổ trên cùng và làm việc theo cách của nó xuống. Đoạn mã sau sẽ lặp qua từng cửa sổ có thể nhìn thấy và in ra văn bản của chiến thắng.

#include <windows.h> 
#include <stdio.h> 

BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lParam) { 
    char buff[255]; 

    if (IsWindowVisible(hWnd)) { 
     GetWindowText(hWnd, (LPSTR) buff, 254); 
     printf("%s\n", buff); 
    } 
    return TRUE; 
} 

int main() { 
    EnumWindows(EnumWindowsProc, 0); 
    return 0; 
} 

Vì bạn có tay cầm của từng cửa sổ, bạn có thể thực hiện thêm thao tác bằng cách gửi tin nhắn cho họ.


Tôi tạo ra một công cụ để chơi với các cửa sổ và hình dạng gọi Desktop Playground có sử dụng phương pháp này rất.

Tôi sinh ra một chuỗi và lưu trữ từng cửa sổ trong bảng băm với tọa độ và kích thước của chúng. Sau đó, tôi lặp lại thông qua và so sánh vị trí và kích thước hiện tại của chúng với phiên bản trước đó của chúng và thực hiện cuộc gọi lại để cho chuỗi chính của tôi biết cửa sổ là Created, Moved, Reiszed hoặc Destroyed.

1

Trên Windows, bạn có thể sử dụng chức năng SendMessage cho các cửa sổ hoặc quy trình hoạt động.

1

Câu hỏi này có liên quan cao đến hệ điều hành nào hoặc khung công tác GUI được sử dụng cho ứng dụng như vậy mà bạn muốn tạo.

Nếu hệ điều hành hỗ trợ giao diện cho tương tác như vậy, nó chắc chắn có thể được sử dụng với C++ nếu có một ngôn ngữ nhất định ràng buộc với GUI control API (C/C++) được cung cấp. Thông thường, không nên sử dụng các API này một cách tự nhiên từ mã của bạn, nhưng thông qua một thư viện C++ tóm tắt các bit cấp thấp và các hoạt động.

Ở cấp độ tiếp theo có các thư viện có sẵn, thậm chí hỗ trợ trừu tượng cho các GUI hệ thống và API điều khiển hệ thống đa dạng. Nếu bạn đang tìm mã di động OS, hãy xem ví dụ Qt framework.