Существует ли процесс (C++)

163
14 августа 2018, 16:50

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

Answer 1

Ну, раз правильно понял :), то что-то вроде (не компилировал - это набросок для понимания) вызова

EnumWindows(CheckProg,LPARAM(searched_title));

searched_title - искомое название окна, а CheckProg - функция обратного вызова вроде

BOOL CALLBACK CheckProg(HWND hwnd, LPARAM lParam)
{
    char * searched_title = (char*)lParam;
    char txt[256];
    // Можно проверить на видимость окна, например...
    ULONG style = GetWindowLong(hwnd,GWL_STYLE);
    if (style & WS_VISIBLE == 0) return TRUE;
    // Получаем строку заголовка
    if (GetWindowText(hwnd,txt,256))
    {
        // Совпадение. Выполняем, что надо
        ....
        return FALSE;  // Все, дальшейшее перечисление в EnumWindows не нужно
    }
    return TRUE;  // Чтоб EnumWindows работал дальше
}

Примерно так...

Update

Вот код, перечисляющий все - видимые, невидимые - окна. Компилировал VC++2017 без замечаний. Работает. Скорее всего у вас проблемы или в неверном названии окна, или в использовании Unicode (если работаете с ним).

См. также http://rextester.com/IGMOUX1928

#include <iostream>
#include <iomanip>
#include <windows.h>
#pragma comment(lib,"user32")
using namespace std;
BOOL CALLBACK CheckProg(HWND hwnd, LPARAM lParam)
{
    char * searched_title = (char*)lParam;
    char txt[256];
    if (GetWindowText(hwnd,txt,256))
    {
        cout << "Found title [" << txt << "]\n";
    }
    return TRUE;
}
int main(int argc, const char * argv[])
{
    EnumWindows(CheckProg,LPARAM("test.exe"));
}
READ ALSO
Критерий сравнения и классы

Критерий сравнения и классы

Хочу написать шаблон класса AVL_tree но столкнулся с проблемой: а как передать критерий сравения? Всмысле как написать конструктор для класса,...

121
Ошибка при вызове WSAPoll()

Ошибка при вызове WSAPoll()

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

154
Visual Studio Code Директива #include [закрыт]

Visual Studio Code Директива #include [закрыт]

Мне нужно сделать проект под линукс на плюсах, не когда ранее не программировал под негоСейчас вот поставил Visual Studio Code на Ubuntu установил все...

124
Как прокручивать окно при помощи WS_VSCROLL(C++ WINAPI)

Как прокручивать окно при помощи WS_VSCROLL(C++ WINAPI)

В своем оконном приложении на WINAPI решил использовать вертикальный скролл(Естественно, прописав в аргументах окна)Сам скролл появился, однако...

141