Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Список процессов на WinAPI, Делюсь 
V
    Опции темы
sOckets
Дата 7.9.2006, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



В общем я написал вот на WinAPI програмульку , которая достаёт список процессов с помощью CreateToolhelp32SnapshotProcess32FirstProcess32Next. Жду комментарий , предупреждаю я новичок.Покажите что я не совсем правильно зделил, или может алгоритмы не совсем оптимизированы...в общем код.
Компилятор :  Microsoft ® Incremental Linker Version 6.00.8168
Команда      :  cl /MD prc.cpp gdi32.lib user32.lib /link /opt:nowin98 /MAP
Файлы          :  prc.cpp , options.h
Функции      :  Список процессов(название файлов) , ID процесса , Количество потоков.
Баги             :  если название EXE файла одинаковое , инфа даёться по первому попавшемуся...
Размер EXE : 5 120 байт
prc.cpp
Код

#include <windows.h>
#include <tlhelp32.h>
#include "options.h"
LONG WINAPI WndProc(HWND, UINT, WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
    memset(&w,0,sizeof(WNDCLASS));
    w.style = CS_HREDRAW | CS_VREDRAW;
    w.lpfnWndProc = WndProc;
    w.hInstance = hInstance;
    w.hCursor = LoadCursor(NULL, IDC_ARROW); 
    w.hbrBackground = bg_color;
    w.lpszClassName = "My Class";
    RegisterClass(&w);
    hwnd =         CreateWindow("My Class", "Процессы в системе",WS_VISIBLE,300, 200, 410, 310, NULL, NULL, hInstance, NULL);
    PList =         CreateWindow("ListBox", NULL, LBS_STANDARD|WS_CHILD|WS_BORDER|WS_VISIBLE, 10,10,300,288,hwnd,(HMENU) IDC_PList,hInstance,NULL);
    RefreshP =     CreateWindow("Button","Обновить",WS_CHILD|WS_BORDER|WS_VISIBLE,315,10,80,20,hwnd,(HMENU) IDC_RefreshP,hInstance,NULL);
    ExitB =     CreateWindow("Button","Выход",WS_CHILD|WS_BORDER|WS_VISIBLE,315,35,80,20,hwnd,(HMENU)IDC_ExitB,hInstance,NULL);
    PId =         CreateWindow("STATIC","ID процесса",WS_CHILD|WS_VISIBLE|WS_BORDER,315,60,80,16,hwnd,NULL,hInstance,NULL);
    Static_TID = CreateWindow("STATIC","Потоки",WS_CHILD|WS_VISIBLE|WS_BORDER,315,80,80,16,hwnd,NULL,hInstance,NULL);
    HFONT hf=CreateFont(-10, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "Tahome");
    SendMessage(PId, WM_SETFONT, (WPARAM)hf, 0);
    SendMessage(Static_TID, WM_SETFONT, (WPARAM)hf, 0);
    SendMessage(PList, WM_SETFONT, (WPARAM)hf, 0);
    SendMessage(ExitB, WM_SETFONT, (WPARAM)hf, 0);
    SendMessage(KillP, WM_SETFONT, (WPARAM)hf, 0);
    SendMessage(RefreshP, WM_SETFONT, (WPARAM)hf, 0);
    GetSystemProcessList();    
    CloseHandle(hSnapshot);
    ShowWindow(hwnd,nCmdShow);
    UpdateWindow(hwnd);
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
    if (HWND(lparam)==PList)
    {
       switch (HIWORD(wparam))
       {
           case LBN_SELCHANGE:
           {
                if (LOWORD (wparam) >= 1);
                {
                    itemIndex = SendMessage(PList,LB_GETCURSEL,0,0);
                    SendMessage (PList, LB_GETTEXT, itemIndex, (LPARAM) CurrentWord);
                    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
                    Entry.dwSize = sizeof(Entry);    
                    Process32First(hSnapshot, &Entry);
                    do {
                    if (strcmp(CurrentWord,Entry.szExeFile)==0)
                    {
                        PRID=Entry.th32ProcessID;
                        itoa(PRID,char_pid,10);
                        SetWindowText(PId,char_pid);
                        PRID=Entry.cntThreads;
                        itoa(PRID,char_pid,10);
                        SetWindowText(Static_TID,char_pid);
                        break;
                    }
                    } while (Process32Next(hSnapshot, &Entry ) );
                }
           }
       }
    }
    switch (Message){
    case WM_COMMAND:
        switch(wparam)
        {
            case IDC_RefreshP:
            {
                GetSystemProcessList();
                return 0;
            }
            case IDC_ExitB:
            {
                PostQuitMessage(0);
            }    
        } return 0;
    case WM_DESTROY: 
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, Message, wparam, lparam);
    }
    return 0;
}


options.h
Код

// ID Кнопок и элементов программы
#define IDC_RefreshP    101
#define IDC_ExitB        102
#define IDC_PList        103
#define IDC_Pid            104
#define MAX_WORD_LEN 200
// Окна
HBRUSH            bg_color=(HBRUSH)CreateSolidBrush((RGB(149,177,188)));
                                // Цвет формы
MSG                msg;            // Сообщения
WNDCLASS        w;                // Класс окна
HWND            hwnd,            // Главное окно
                PList,            // ListBox - список процессов
                RefreshP,            // Кнопка для обновления списка процессов
                KillP,            // Кнопка убить процесс
                ExitB,            // Выход
                PId,                // ID процесса
                Static_TID;
// Переменные для получения списка процессов
static UINT        itemIndex;
static char        CurrentWord[MAX_WORD_LEN];
int                PRID;
char                char_pid[100];
HANDLE            hSnapshot;
PROCESSENTRY32    Entry;
// эта функция вызывается для каждого процесса в перечислении
void GetSystemProcessList()
{
    SendMessage(PList,LB_RESETCONTENT,NULL,NULL);
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    Entry.dwSize = sizeof(Entry);    
    Process32First(hSnapshot, &Entry);
    do {
    SendMessage(PList,LB_ADDSTRING,0,(LPARAM)Entry.szExeFile);
    } while (Process32Next(hSnapshot, &Entry ) );
}


Жду коментов ....

Это сообщение отредактировал(а) ilovewinsocks - 7.9.2006, 19:27


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
maxim1000
Дата 7.9.2006, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



общее замечание по коду:
Цитата(ilovewinsocks @  7.9.2006,  18:23 Найти цитируемый пост)
GetSystemProcessList

обычно не рекомендуется писать код в h-файлах
если хочется его использовать в разных файлах - выделить в отдельный cpp и подключить в проект, а в h-файлы - объявление

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


--------------------
qqq
PM WWW   Вверх
sOckets
Дата 7.9.2006, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Ок, буду знать. Что то раздел "WinAPI" умирает smile


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
Damarus
Дата 8.9.2006, 06:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 4
Всего: 29



ilovewinsocks, в некоторых случаях ID процесса и кол-во потоков отображаются не верно.

Добавлено @ 06:12 
А, ты уже и сам заметил smile 
PM MAIL ICQ Jabber   Вверх
sOckets
Дата 8.9.2006, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Угу , дело в том что если посмотреть на сорцы , то сравнение у меня идёт не по ID процесса , а по названию EXEшника...Вот допусим 4 svhost.exe :-) по этому инфа по второму процессу svhost.exe будет как по первому попавшемуся.
Вопрос , как сделать такое :
http://img179.imageshack.us/img179/7586/newlistboxxv4.jpg
LISTBOX но с несколькими полями.
И потом почему у меня пропадает кнопка ответить ? Уже надоело , уже нервов не хватает 

user posted image Opera
user posted image FireFox

Блин я уже на пределе , щя пойду когонить побью


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
Alexandr87
Дата 8.9.2006, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: нет
Всего: 39



гы опера. используй нормальный броузер и будет тебе счастье
PM Jabber   Вверх
sOckets
Дата 8.9.2006, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Опера нормальный браузер , лутший !
Странно , главное дома (щяс я из дома) всё нормально показывает , а вот на работе нет...


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
PuLN
Дата 8.9.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 1.8.2006

Репутация: нет
Всего: 2



пинай админа))
если сам не админ))
--------------------
*** хуже нет,когда не ответит тот,кто знает....*** наша жизнь-желтая стрела,подхваченная ветром времени(© PuLN)   
PM MAIL   Вверх
Alexandr87
Дата 8.9.2006, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: нет
Всего: 39



посмотри сюда, ни у одного тебя подобная проблемма
http://forum.vingrad.ru/index.php?showtopi...52&view=all
PM Jabber   Вверх
sOckets
Дата 8.9.2006, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



уже smile


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
Damarus
Дата 9.9.2006, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 4
Всего: 29



Цитата(ilovewinsocks @  8.9.2006,  08:47 Найти цитируемый пост)
Вопрос , как сделать такое :http://img179.imageshack.us/img179/7586/newlistboxxv4.jpgLISTBOX но с несколькими полями.

Это не ListBox, это ListView.
PM MAIL ICQ Jabber   Вверх
sOckets
Дата 11.9.2006, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Ок, спасибо.


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
sOckets
Дата 13.9.2006, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЖгуПоПонедельникам
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 24.8.2006
Где: ws2.lib

Репутация: нет
Всего: 2



Цитата
Это не ListBox, это ListView.

Дайте пожалуйста примерчик как его создавать

http://ru.livecode.org/index.php/%D0%9A%D0...w_%D0%B2_WinAPI
нашёл.

Это сообщение отредактировал(а) ilovewinsocks - 13.9.2006, 15:24


--------------------
Я Будущий сотрудник Google Inc. Юзаем Google Code Search для поиска исходников. Юзаем GMail как почту.
PM   Вверх
Damarus
Дата 13.9.2006, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 4
Всего: 29



PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0826 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.