Qt 4 - список запущеных приложений

Модератор: Модераторы разделов

Аватара пользователя
Hvzh
Сообщения: 711
Статус: Gone with Linux
ОС: Linux Mint 18.1

Qt 4 - список запущеных приложений

Сообщение Hvzh »

Срочно помогите, кто может! Задача следующая: под иксами запущено N-ное количество приложений. В общем случае как Qt-шные так и нет. Как мне средствами Qt узнать запущено ли конкретное приложение? Заголовок главного окна приложения известен
HP 255 G4 A6-6310 + Linux Mint 18.1 + Windoze7 under VmWare + OS X Mavericks under VmWare
Спасибо сказали:
MakkyWelly
Сообщения: 97
ОС: по обстоятельствам :)

Re: Qt 4 - список запущеных приложений

Сообщение MakkyWelly »

Как мне средствами Qt узнать запущено ли конкретное приложение? Заголовок главного окна приложения известен


По моему в Qt нет такого функционала, поэтому нужно либо парсить "ps aux", либо смотреть в /proc, либо писать свой код, вроде того что в ps. Вот примерно для ps набросок:

Код: Выделить всё

// Ps.h + Ps.c

#include <QObject>
#include <QProcess>

const PS = "ps" // way to 'ps' programm

class Ps : public QProcess {
    Q_OBJECT
  public:
    Ps(QString option = QString());
    ~Ps();
  public slots:
    void psOutput();
};

Ps::Ps(QString option) {
    if (option == QString()) {
        option = "aux";
    }
    connect (this, SIGNAL(readyReadStandardOutput()),
             this, SLOT(psOutput()));
    QStringList argv;
    argv << option;
    start(PS, argv);
}

Ps::~Ps() {
    terminate();
}

void Ps::psOutput() {
    QByteArray bytes = readAllStandardOutput();
    QStringList lines = QString(bytes).split("\n");
    //
    // parse every line there ...
    // I don't know how :)
    //
}

// main.c

#include <QApplication>
#include <logwindow.h>
#include <argumentlist.h>
#include <Ps.h>

int main (int argc, char* argv[]) {
    QApplication app(argc, argv);
    ArgumentList al;
    LogWindow lw("ps-window");
    lw.setWindowTitle("ps-window");
    QString option;
    if (al.size() > 1) option = al[1];
    Ps ps(option);
    lw.show();
    return app.exec();
}
die sheep! die to reverse the system
you accept (reject, respect);
next step,
kill next sacrifice, each sacrifice
Спасибо сказали:
Аватара пользователя
Hvzh
Сообщения: 711
Статус: Gone with Linux
ОС: Linux Mint 18.1

Re: Qt 4 - список запущеных приложений

Сообщение Hvzh »

Спасибо! Попробую этот способ. Но тут еще одна проблема: помимо поиска приложения после его нахождения его еще и во фронт нужно вывести. Я так подозреваю, что придется копать в сторону Xt... Не хотелось бы, если честно... Я думал, что в Qt есть какой-то свой функционал для этого...
HP 255 G4 A6-6310 + Linux Mint 18.1 + Windoze7 under VmWare + OS X Mavericks under VmWare
Спасибо сказали:
Doublespace
Сообщения: 275
ОС: Debian Lenny,Squeeze,Centos

Re: Qt 4 - список запущеных приложений

Сообщение Doublespace »

Если задача стоит избежать запуска второй копии этой же софтины, то решается использованием компонента
qtsingleapplication - http://qt.nokia.com/products/appdev/add-on...ngleapplication
Спасибо сказали:
MakkyWelly
Сообщения: 97
ОС: по обстоятельствам :)

Re: Qt 4 - список запущеных приложений

Сообщение MakkyWelly »

Ага, нужно использовать Xlib

Код: Выделить всё

#include <X11/Xlib.h>

// on POSIX-system it woude be display from DISPLAY in environment:
const DEFAUL_DISPLAY = NULL;

int bringToTop(long id)
    Display *dsp = XOpenDisplay(DEFAUL_DISPLAY);
    if (*dsp == NULL) {
        return -1;
    }
    XRaiseWindow(dsp, id);
    // TODO: check BadWindow error. -2
    XSetInputFocus(dsp, id, RevertToNone, CurrentTime);
    // TODO: check error! -3
    XCloseDisplay(dsp);
    // TODO: check BadGC error. -4
    return 0;
}


Я там правильно на NULL проверяю? Вот такой макрос в порядке:

Код: Выделить всё

// где VAR это *var = функция_которую_мы_вызвали
#define check_for_null(VAR, CODE) if ((VAR) == NULL) { return CODE; }
die sheep! die to reverse the system
you accept (reject, respect);
next step,
kill next sacrifice, each sacrifice
Спасибо сказали:
Аватара пользователя
Hvzh
Сообщения: 711
Статус: Gone with Linux
ОС: Linux Mint 18.1

Re: Qt 4 - список запущеных приложений

Сообщение Hvzh »

Doublespace писал(а):
10.02.2010 15:35
Если задача стоит избежать запуска второй копии этой же софтины, то решается использованием компонента
qtsingleapplication - http://qt.nokia.com/products/appdev/add-on...ngleapplication

Задача такая: запускаются две проги - одна основная, другая вспомогательная. В зависимости от того, что происходит в основной, нужно периодически выводить во фронт вспомогательную и через некоторое время снова ее прятать. Проги друг от друга никак не зависят.
HP 255 G4 A6-6310 + Linux Mint 18.1 + Windoze7 under VmWare + OS X Mavericks under VmWare
Спасибо сказали:
Аватара пользователя
Hvzh
Сообщения: 711
Статус: Gone with Linux
ОС: Linux Mint 18.1

Re: Qt 4 - список запущеных приложений

Сообщение Hvzh »

MakkyWelly писал(а):
10.02.2010 15:43
Ага, нужно использовать Xlib

Вот только id как получить?
HP 255 G4 A6-6310 + Linux Mint 18.1 + Windoze7 under VmWare + OS X Mavericks under VmWare
Спасибо сказали:
Doublespace
Сообщения: 275
ОС: Debian Lenny,Squeeze,Centos

Re: Qt 4 - список запущеных приложений

Сообщение Doublespace »

Так может их просто через DBus связать и пусть общаются? Или вторая прога не ваша?
Спасибо сказали:
Аватара пользователя
Hvzh
Сообщения: 711
Статус: Gone with Linux
ОС: Linux Mint 18.1

Re: Qt 4 - список запущеных приложений

Сообщение Hvzh »

Doublespace писал(а):
10.02.2010 16:14
Так может их просто через DBus связать и пусть общаются? Или вторая прога не ваша?

Наша. Вот как это сделать?
HP 255 G4 A6-6310 + Linux Mint 18.1 + Windoze7 under VmWare + OS X Mavericks under VmWare
Спасибо сказали:
Doublespace
Сообщения: 275
ОС: Debian Lenny,Squeeze,Centos

Re: Qt 4 - список запущеных приложений

Сообщение Doublespace »

В примерчиках по dbus в комплекте qt посмотрите.
Спасибо сказали:
Olegator
Сообщения: 2493
ОС: SuseLinux 11.2 KDE 4.3

Re: Qt 4 - список запущеных приложений

Сообщение Olegator »

Hvzh писал(а):
10.02.2010 16:18
Наша. Вот как это сделать?

посмотрите доку в qtassistant по qtbus там и пример есть
Спасибо сказали:
Аватара пользователя
Hvzh
Сообщения: 711
Статус: Gone with Linux
ОС: Linux Mint 18.1

Re: Qt 4 - список запущеных приложений

Сообщение Hvzh »

Ок, полез смотреть
HP 255 G4 A6-6310 + Linux Mint 18.1 + Windoze7 under VmWare + OS X Mavericks under VmWare
Спасибо сказали: