Russian Qt Forum

Qt => Общие вопросы => Тема начата: G-virus от Декабрь 29, 2009, 13:58



Название: QProcess получение списка процессов
Отправлено: G-virus от Декабрь 29, 2009, 13:58
Привет форумчане. Помогите с такой проблемой. Как с помощью QProcess получать список запущенных процессов?


Название: Re: QProcess получение списка процессов
Отправлено: niXman от Декабрь 29, 2009, 14:17
никак.
какая ОС ?


Название: Re: QProcess получение списка процессов
Отправлено: G-virus от Декабрь 29, 2009, 14:17
никак.
какая ОС ?
винда XP

или как сделать, чтобы программа если обнаружит определенный процесс, то тут же его завершает?


Название: Re: QProcess получение списка процессов
Отправлено: niXman от Декабрь 29, 2009, 14:35
Так, минутку... В соседней теме, тебе нужно получить список процессов. Получил.
Остальное тут: http://msdn.microsoft.com/en-us/library/ms686714%28VS.85%29.aspx


Название: Re: QProcess получение списка процессов
Отправлено: G-virus от Декабрь 29, 2009, 14:40
Остальное тут: http://msdn.microsoft.com/en-us/library/ms686714%28VS.85%29.aspx

Так это же msdn для .NET Framework. А в QProcess ест какая-нибудь функция наподобие QProcess::kill(firefox.exe) ?


Название: Re: QProcess получение списка процессов
Отправлено: Alex Custov от Декабрь 29, 2009, 14:42
Так это же msdn для .NET Framework. А в QProcess ест какая-нибудь функция наподобие QProcess::kill(firefox.exe) ?

В винде есть kill()


Название: Re: QProcess получение списка процессов
Отправлено: SimpleSunny от Декабрь 29, 2009, 14:42
tasklist
taskkill
Если XP Pro.

P. S. То функции WinAPI, что более корректно, ИМХО.


Название: Re: QProcess получение списка процессов
Отправлено: G-virus от Декабрь 29, 2009, 14:44
В винде есть kill()

А функция проверки на существование процесса? Допустим так
Код
C++ (Qt)
/*************************/
 
if QProcess::exist(firefox.exe)
   QProcess::kill(firefox.exe)
 
/*************************/
 


Название: Re: QProcess получение списка процессов
Отправлено: panAlexey от Декабрь 29, 2009, 15:13
А функция проверки на существование процесса?
Код:
   CToolhelp thProcesses(TH32CS_SNAPPROCESS);
   PROCESSENTRY32 pe = { sizeof(pe) };
   BOOL fOk = thProcesses.ProcessFirst(&pe);
   for (; fOk; fOk = thProcesses.ProcessNext(&pe)) {
      TCHAR sz[1024];

      // Place the process name (without its path) & ID in the list
      PCTSTR pszExeFile = _tcsrchr(pe.szExeFile, TEXT('\\'));
      if (pszExeFile == NULL) pszExeFile = pe.szExeFile;
      else pszExeFile++; // Skip over the slash
      wsprintf(sz, TEXT("%s     (0x%08X)"), pszExeFile, pe.th32ProcessID);
      int n = ComboBox_AddString(hwndList, sz);

      // Associate the process ID with the added item
      ComboBox_SetItemData(hwndList, n, pe.th32ProcessID);
   }
http://www.knigka.info/2007/08/28/windows_dlja_professionalov_sozdanie_jeffektivnykh_win32ppilozhenijj_s_uchetom_specifiki_64razrjadnojj_versii_windows.html


Название: Re: QProcess получение списка процессов
Отправлено: G-virus от Декабрь 29, 2009, 18:20
Спасибо  :) буду разбираться


Название: Re: QProcess получение списка процессов
Отправлено: RZX от Август 18, 2010, 11:05
Может, кому пригодится для Windows (mingw/QtCreator/Qt4.6)...
получить список процессов в Qt
Класс systemWin32

Код:

// systemwin32.h
#ifndef SYSTEMWIN32_H
#define SYSTEMWIN32_H

#include <windows.h>
#include <w32api.h>
#include <tlhelp32.h>

#include <QMap>
#include <QString>
#include <QMessageBox>

class systemWin32
{
public:
    systemWin32();
    bool findProcess(QString findProcName);
    QString getProcessName(int idProcess);
    QStringList getAllProcessList();
private:
    QMap <int, QString> win32sysMap;
    QString copyToQString(WCHAR array[MAX_PATH]);

};

#endif // SYSTEMWIN32_H

// systemwin32.cpp
#include "systemwin32.h"

systemWin32::systemWin32()
{
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (hSnap == NULL)
    {
        QMessageBox::critical(0, "Error!", "Error Load ToolHelp", QMessageBox::Close);
        return;
    }

    PROCESSENTRY32 proc = { sizeof(proc) };

    if (Process32First(hSnap, &proc))
    {
        QString filename;

        filename = copyToQString(proc.szExeFile);
        win32sysMap[proc.th32ProcessID] = filename;

        while (Process32Next(hSnap, &proc))
        {
            filename = copyToQString(proc.szExeFile);
            win32sysMap[proc.th32ProcessID] = filename;
        }
    }
}

// принимает имя процесса, возвращает true, если процесс запущен
bool systemWin32::findProcess(QString findProcName)
{
    QMapIterator<int, QString> i(win32sysMap);
    while (i.hasNext())
    {
        i.next();
        if (i.value() == findProcName) return true;
    }

    return false;
}

// получить имя процесса по ID-у
QString systemWin32::getProcessName(int idProcess)
{
    return win32sysMap[idProcess];
}

// имена процессов WinAPI представлены как массив WCHAR. Для удобства - возврат в QString
// хэз, может как-нить по другому можно сделать
QString systemWin32::copyToQString(WCHAR array[MAX_PATH])
{
    QString string;
    int i = 0;

    while (array[i] != 0)
    {
        string[i] = array[i];
        i++;
    }
    return string;
}

// получить список всех процессов
QStringList systemWin32::getAllProcessList()
{
    return win32sysMap.values();
}

// ну и кому вообще лень - оболочка для тестирования и pro файл

// main.cpp
#include <QtGui>

#include "systemwin32.h"


int main(int argc, char *argv[])
{

    QApplication app(argc, argv);

    QLabel *label = new QLabel;

    bool ok;
    QString processName = QInputDialog::getText(0, "Do you want to know that process is created?", "Input process name",
                                                QLineEdit::Normal, "", &ok);
    systemWin32 processesInWin;

    if (ok)
    {
        if (processesInWin.findProcess(processName))
        {
            QMessageBox::information(0, "Yes", "Process " + processName + " has been created!");
        }
        else
        {
            QMessageBox::information(0, "No", "Process " + processName + " hasn't been created!");
        }

    }


    int ret = QMessageBox::information(0, "Question", "Do you want see all list of process?", QMessageBox::Ok | QMessageBox::Cancel);

    if (ret == QMessageBox::Ok)
    {
        QStringList list(processesInWin.getAllProcessList());
        QString strings;

        for (int i = 0; i < list.size(); i++)
        {
            strings += list[i] + "\n";
        }

        label->setText(strings);
        label->show();
    }


    return app.exec();
}

// getprocesslist.pro
TARGET = getprocesslist
TEMPLATE = app
SOURCES += main.cpp \
    systemwin32.cpp
HEADERS += systemwin32.h



Название: Re: QProcess получение списка процессов
Отправлено: developer от Август 20, 2010, 13:49
http://www.windowsfaq.ru/content/view/50/37/  - очень полезная штука, может многое, сам использовал, можно как скрипты писать так и в командной строчке запускать. Поищи еще по гуглу wmic win xp


Название: Re: QProcess получение списка процессов
Отправлено: merke от Август 24, 2010, 13:31
Так как же все таки удалить процесс??? Сейчас очень нужно!!!

Помогите пожалуйста!!!


Название: Re: QProcess получение списка процессов
Отправлено: Sancho_s_rancho от Август 24, 2010, 13:57
Так как же все таки удалить процесс??? Сейчас очень нужно!!!

Помогите пожалуйста!!!
Не нервничать!
Сейчас дам исходники.


Название: Re: QProcess получение списка процессов
Отправлено: Sancho_s_rancho от Август 24, 2010, 14:03
Вот менеджер процессов с возможностью грохнуть процесс. Написан на Qt, только для виндовс.


Название: Re: QProcess получение списка процессов
Отправлено: RZX от Август 24, 2010, 14:20
2 Sancho_s_rancho:
То что надо! Огромное спасибо!!!


Название: Re: QProcess получение списка процессов
Отправлено: lell3 от Июль 25, 2017, 16:13
Вот менеджер процессов с возможностью грохнуть процесс. Написан на Qt, только для виндовс.

Спасибо огромное!!!!!