Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2011, 17:35   #1
NightWish
 
Аватар для NightWish
 
Регистрация: 12.11.2008
Сообщений: 9
Восклицание Монитор процессов, потоков и окон р е ш и т е

Помогите пожалуйста...
Монитор процессов, потоков и окон

Цель работы: знакомство с функциями Win32, обеспечивающими получение информации о выполняющихся в данный момент процессах MS Windows 9x, Me, 2000, XP и используемых ими окнах.
Первый этап получения информации о выполняющихся в системе процессах - получение снимка (snapshot) системы, который содержит информацию о состоянии системы в момент выполнения снимка. Снимок создается с помощью функции CreateToolHelp32Snapshot (dwFlags, th32ProcessID), первый аргумент определяет, какая информация будет записана в снимок- возможные значения приведены в таблице.
Флаг Описание
TH32CS_SnapHEAPLIST В снимок включается список куч, принадлежащих указанному процессу
TH32CS_SnapPROCESS В снимок включается список процессов, присутствующих в системе
TH32CS_SnapTHREAD В снимок включается список потоков
TH32CS_SnapMODULE В снимок включается список модулей, принадлежащих указанному процессу
TH32CS_SnapALL В снимок включается список куч, процессов, потоков и модулей

Второй аргумент определяет процесс, информация о котором необходима (если требуется список куч и модулей). В остальных случаях он игнорируется.

HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD dwFlags,
DWORD th32ProcessID
);
Второй этап - извлечение из снимка списка процессов. Для выполнения этой операции служат функции:
Process32First ( hSnapshot, LPProcessEntry32)
Process32Next ( hSnapshot, LPProcessEntry32).
Первый аргумент - хэндл созданного снимка (возвращает функция CreateToolHelp32Snapshot).
Второй аргумент- структура, содержащая 10 полей.
Первое поле этой структуры - dwSize - должно перед вызовом функции содержать размер структуры в байтах - sizeof (ProcessEntry32).
Второе поле - cntUsage - содержит число ссылок на процесс, то есть число потоков, которые в настоящий момент используют какие-либо данные процесса.
Третье поле - th32ProcessID - является идентификатором процесса.
Шестое поле -cntThreads - определяет число потоков, принадлежащих процессу.
Седьмое поле - th32ParentProcessID - является идентификатором родительского по отношению к текущему процесса.
Поле pcPriClassBase cодержит базовый приоритет процесса.
Поле szExeFile[MAX_PATH] cодержит полное имя файла, создавшего процесс. Значение MAX_PATH равно 260.
Для того, чтобы получить информацию о первом процессе в снимке, необходимо вызвать функцию Process32First. В случае успешного завершения функция возвращает TRUE. Для того, чтобы просмотреть все оставшиеся процессы, нужно вызывать функцию Process32Next до тех пор, пока она не возвратит FALSE.
В список используемых модулей - uses - необходимо добавить модуль TlHelp32

вот код программы на 1-2 этап

void CScanProcessDlg::OnBnClickedButupda te()
{
m_TreeView.DeleteAllItems();
HANDLE hSnap;
hSnap = CreateToolhelp32Snapshot(TH32CS_SNA PPROCESS, 0);
if (hSnap == NULL) AfxMessageBox(_T("Îøèáêà çàãðóçêè ToolHelp"));
PROCESSENTRY32 proc;
proc.dwSize=sizeof(PROCESSENTRY32);

if (Process32First(hSnap, &proc))
{
while (Process32Next(hSnap, &proc))
if(proc.th32ParentProcessID==0)
{
CString Proc=String(proc.szExeFile, proc.th32ProcessID, proc.th32ParentProcessID);
Predok=m_TreeView.InsertItem(Proc,0 ,1);
PoiskPotomka(proc.th32ProcessID, Predok);
CTreeCMod.DeleteAllItems();
CListBoxTHREAD.ResetContent();
CTreeWindow.DeleteAllItems();
SetDlgItemText(IDC_COMBO, _T(" "));
}
else
if(PoiskSiroti(proc.th32ParentProce ssID)==0)
AddItem(proc.szExeFile, proc.th32ProcessID, proc.th32ParentProcessID, Predok);

CloseHandle(hSnap);
}
}

Третий этап - извлечение из снимка списка потоков. Для выполнения этой операции служат функции
Thread32First ( hSnapshot, LPTHREADEntry32)
Thtead32Next ( hSnapshot, LPTHREADEntry32).
Первый аргумент - хэндл созданного снимка (возвращает функция CreateToolHelp32Snapshot).
Второй аргумент- структура, содержащая 7 полей.
Первое поле этой структуры - dwSize - должно перед вызовом функции содержать размер структуры в байтах - sizeof (THREADEntry32).
Поле th32OwnerProcessID содержит идентификатор родительского процесса.
Поле tpBasePri содержит текущий приоритет потока.
Поле tpDeltaPri содержит разность между текущим уровнем приоритета потока и базовым уровнем, то есть тем, который присваивается при создании потока.
NightWish вне форума Ответить с цитированием
Старый 16.03.2011, 17:35   #2
NightWish
 
Аватар для NightWish
 
Регистрация: 12.11.2008
Сообщений: 9
По умолчанию

продолжение......


вот код программы на 3 этап

void CScanProcessDlg::AddTHREAD()
{
CListBoxTHREAD.ResetContent();
CTreeWindow.DeleteAllItems();

CString str, S, StrDes;
LPTSTR M;
DWORD ID, Thed;
char chID[20];
HANDLE hSnap;
int intHWND;

hSnap = CreateToolhelp32Snapshot(TH32CS_SNA PTHREAD, 0);
if (hSnap == NULL) AfxMessageBox(_T("Îøèáêà çàãðóçêè ToolHelp"));

THREADENTRY32 thread;

thread.dwSize=sizeof(THREADENTRY32) ;

CWnd* pWnd = GetDesktopWindow();

if(IDTekProc==4)
{
Thed=GetWindowThreadProcessId(pWnd->m_hWnd, &ID);
StrDes=itoa((int)pWnd->m_hWnd, chID, 16);
StrDes+=" - (Desktop)";
HTREEITEM PredokWind=CTreeWindow.InsertItem(S trDes,4,5);
PoiskPotWindow(pWnd, Thed, PredokWind);
}

pWnd=pWnd->GetWindow(GW_CHILD);

if (Thread32First(hSnap, &thread))
while (Thread32Next(hSnap, &thread))
{
if(IDTekProc==thread.th32OwnerProce ssID)
{
CListBoxTHREAD.AddString(StrThread( thread.th32ThreadID, thread.tpBasePri, thread.tpDeltaPri, thread.th32OwnerProcessID));

while (pWnd!=0)
{
Thed=GetWindowThreadProcessId(pWnd->m_hWnd, &ID);
if(thread.th32ThreadID==Thed)
{
HTREEITEM PredokWind=CTreeWindow.InsertItem(S trWindow(pWnd, Thed),4,5);
PoiskPotWindow(pWnd, Thed, PredokWind);
}
pWnd=pWnd->GetWindow(GW_HWNDNEXT);
}
}
}
CloseHandle(hSnap);
}

В список используемых модулей - uses - необходимо добавить модуль TlHelp32

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

ВЫПОЛНЕНИЕ РАБОТЫ

1. Используя приведенные выше сведения, построить дерево процессов, выполняющихся в системе, используя элемент управления TreeView.
Для добавления нового узла к дереву используется метод
NodeNew :=TreeView1.Items.Add (node, ‘текст’). Переменная node: TtreeNode определяет узел, к которому добавляется узел того же уровня. Для добавления узлов к корню вместо node можно указать nil.
Для добавления дочернего узла к созданному используется метод
NodeNew :=TreeView1.Items.AddChild (NodeNew, ‘текст’). Переменная NodeNew: TtreeNode определяет узел, к которому добавляется дочерний узел.
Важнейшие свойства node – text – название узла и AbsoluteIndex – номер, присвоенный ему при создании дерева.
Для добавления пиктограмм к узлам необходимо использовать компонент ImageList, который должен быть указан в свойстве Images компонента TreeView и содержать по крайней мере 2 пиктограммы - для выбранного и не выбранного узла дерева. Свойство node – SelectedIndex – определяет номер пиктограммы для пометки выбранного узла дерева.
Свойство node – Parent – определяет родительский узел данного узла.
2. Для выбранного процесса вывести сведения о его приоритете и потоках, используя компонент StringGrid).
3. Добавить возможность завершения процессов системы (с ручным вводом идентификатора и с указанием процесса курсором окна просмотра ListBox). Проверить работу приложения.
ВНИМАНИЕ! НЕ завершайте все подряд, чтобы не перезагружать компьютер. Сначала сохраните свое приложение на диске, а уже потом проверяйте.
4. Добавить возможность изменения приоритета выбранного процесса. Желаемый уровень приоритета должен выбираться из списка возможных значений.
Приоритет процесса устанавливается функцией SetPriorityClass(). Рекомендуется проверять возвращаемое функцией значение, чтобы убедиться, что желаемое действие выполнено. Для задания значений приоритета процесса следует использовать символические константы.
5. Получить и вывести на экран сведения о модулях, используемых выбранным процессом (поле th32ModuleID).
6. Построить дерево созданных системой окон.

задания для бригад
1. Для выбранного процесса построить список созданных им окон с указанием состояния каждого окна (видимое-невидимое). ( Бригады 1, 3, 5)
2. К дереву процессов добавить дерево созданных каждым процессом окон. (Бригады 2, 4, 6)
3. Для дерева созданных системой окон обеспечить возможность получения справки о создавшем каждое окно процессе (название и приоритет) и потоке (приоритет и описатель)
(Бригады 7, 8, 9, 10)
NightWish вне форума Ответить с цитированием
Старый 17.03.2011, 08:23   #3
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

есть опыт написания приложений по работе с процессами, вызываемым ими библиотекам, их зависимостям

могу помочь за вознаграждение
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 17.03.2011, 12:18   #4
NightWish
 
Аватар для NightWish
 
Регистрация: 12.11.2008
Сообщений: 9
По умолчанию

Цитата:
Сообщение от RUSt88 Посмотреть сообщение
есть опыт написания приложений по работе с процессами, вызываемым ими библиотекам, их зависимостям

могу помочь за вознаграждение

Свяжись со мной сегодня вечером в районе с 8-30 до 23-00 по скайпу или аське. Там и поговорим ок?

Мне просто если и делать , то сегодня в кратчайшие сроки. Завтра уже сдавать надо. А я сел в тупик. По мимо это есть много еще задач, все не успеваю.


Спасибо что ответил...
NightWish вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
монитор korean1 Компьютерное железо 7 25.02.2011 09:25
CS Монитор iGlass Работа с сетью в Delphi 10 14.06.2010 16:29
О приоритетах потоков и процессов Altera Свободное общение 9 01.05.2010 10:41
Исследование диспетчеризации процессов и потоков Наталья111 Помощь студентам 1 06.01.2010 23:06
монитор процессов и потоков на делфи Танка Помощь студентам 1 29.05.2009 16:41