Можно ли использовать C ++ для взаимодействия с запущенными приложениями?

Я ищу возиться с C ++ и создавать какие-то настольные приложения, которые могут взаимодействовать с другими окнами. Что-то вроде менеджера листов окон (например, сворачивание текущих окон, привязка окон к сетке и т. Д.). Возможно ли это сделать в C ++? Я когда-либо работал только с командной строкой, так есть ли хорошая основа для такой работы? Что-нибудь в правильном направлении или как я могу сделать что-то подобное, было бы здорово.

5

Решение

Ты можешь использовать EnumWindows перебирать каждое из окон. Он начинается с самого верхнего окна и идет вниз. Следующий код будет проходить через каждый видимый окно и распечатать текст Winow.

#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;
}

Поскольку у вас есть дескриптор каждого окна, вы можете выполнять дальнейшие манипуляции, отправляя им сообщения.


Я создал инструмент для игры с окнами и фигурами, который называется Настольная игровая площадка который использует этот самый метод.

Я порождаю поток и сохраняю каждое окно в хеш-таблице с их координатами и размером. Затем я перебираю и сравниваю их текущую позицию и размер с предыдущей и выполняю обратные вызовы, чтобы сообщить моему основному потоку, было ли окно Created, Moved, Reiszed, или же Destroyed,

4

Другие решения

В Windows вы можете использовать Отправить сообщение функция для активных окон или процессов.

1

Этот вопрос тесно связан с тем, какую ОС или структуру GUI используют для такого приложения, которое вы хотите создать.

Если ОС поддерживает интерфейсы для такого взаимодействия, ее, безусловно, можно использовать с C ++, если имеется определенная языковая привязка к предоставляемому API управления GUI (C / C ++).
Обычно это не очень хорошая идея использовать эти API непосредственно из вашего кода, но через библиотеку C ++, которая абстрагирует биты низкого уровня и операции.

На следующем уровне доступны библиотеки, которые даже поддерживают абстракции для различных GUI для конкретных ОС и API-интерфейсов управления системой. Если вы ищете переносимый код ОС, проверьте Qt framework например.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector