Russian Qt Forum
Апрель 20, 2024, 03:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QProcess получение списка процессов  (Прочитано 21193 раз)
G-virus
Гость
« : Декабрь 29, 2009, 13:58 »

Привет форумчане. Помогите с такой проблемой. Как с помощью QProcess получать список запущенных процессов?
Записан
niXman
Гость
« Ответ #1 : Декабрь 29, 2009, 14:17 »

никак.
какая ОС ?
Записан
G-virus
Гость
« Ответ #2 : Декабрь 29, 2009, 14:17 »

никак.
какая ОС ?
винда XP

или как сделать, чтобы программа если обнаружит определенный процесс, то тут же его завершает?
« Последнее редактирование: Декабрь 29, 2009, 14:20 от G-virus » Записан
niXman
Гость
« Ответ #3 : Декабрь 29, 2009, 14:35 »

Так, минутку... В соседней теме, тебе нужно получить список процессов. Получил.
Остальное тут: http://msdn.microsoft.com/en-us/library/ms686714%28VS.85%29.aspx
Записан
G-virus
Гость
« Ответ #4 : Декабрь 29, 2009, 14:40 »


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

Сообщений: 2063


Просмотр профиля
« Ответ #5 : Декабрь 29, 2009, 14:42 »

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

В винде есть kill()
Записан
SimpleSunny
Гость
« Ответ #6 : Декабрь 29, 2009, 14:42 »

tasklist
taskkill
Если XP Pro.

P. S. То функции WinAPI, что более корректно, ИМХО.
Записан
G-virus
Гость
« Ответ #7 : Декабрь 29, 2009, 14:44 »

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

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

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #8 : Декабрь 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
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
G-virus
Гость
« Ответ #9 : Декабрь 29, 2009, 18:20 »

Спасибо  Улыбающийся буду разбираться
Записан
RZX
Гость
« Ответ #10 : Август 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

« Последнее редактирование: Август 22, 2010, 14:28 от RZX » Записан
developer
Гость
« Ответ #11 : Август 20, 2010, 13:49 »

http://www.windowsfaq.ru/content/view/50/37/  - очень полезная штука, может многое, сам использовал, можно как скрипты писать так и в командной строчке запускать. Поищи еще по гуглу wmic win xp
Записан
merke
Гость
« Ответ #12 : Август 24, 2010, 13:31 »

Так как же все таки удалить процесс??? Сейчас очень нужно!!!

Помогите пожалуйста!!!
Записан
Sancho_s_rancho
Гость
« Ответ #13 : Август 24, 2010, 13:57 »

Так как же все таки удалить процесс??? Сейчас очень нужно!!!

Помогите пожалуйста!!!
Не нервничать!
Сейчас дам исходники.
Записан
Sancho_s_rancho
Гость
« Ответ #14 : Август 24, 2010, 14:03 »

Вот менеджер процессов с возможностью грохнуть процесс. Написан на Qt, только для виндовс.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.069 секунд. Запросов: 22.