Форум программистов, компьютерный форум CyberForum.ru

EnumProcess - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 5.00
iandi
1 / 1 / 0
Регистрация: 21.11.2010
Сообщений: 20
21.11.2010, 17:05     EnumProcess #1
Здравствуйте. Недавно начал изучать С++. Установил VS 9.0. В примерах нашел вот такую программу для отображения процессов и пид
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include "psapi.h"
 
void PrintProcessNameAndID( DWORD processID )
{
    TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
 
    // Get a handle to the process.
 
    HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                                   PROCESS_VM_READ,
                                   FALSE, processID );
 
    // Get the process name.
 
    if (NULL != hProcess )
    {
        HMODULE hMod;
        DWORD cbNeeded;
 
        if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), 
             &cbNeeded) )
        {
            GetModuleBaseName( hProcess, hMod, szProcessName, 
                               sizeof(szProcessName)/sizeof(TCHAR) );
        }
    }
 
    // Print the process name and identifier.
 
    _tprintf( TEXT("%s  (PID: %u)\n"), szProcessName, processID );
 
    CloseHandle( hProcess );
}
 
void main( )
{
    // Get the list of process identifiers.
 
    DWORD aProcesses[1024], cbNeeded, cProcesses;
    unsigned int i;
 
    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
        return;
 
    // Calculate how many process identifiers were returned.
 
    cProcesses = cbNeeded / sizeof(DWORD);
 
    // Print the name and process identifier for each process.
    for ( i = 0; i < cProcesses; i++ )
        if( aProcesses[i] != 0 )
            PrintProcessNameAndID( aProcesses[i] );
 
}
Но при компиляции выскакивают ошибки
C++
1
2
3
1>ex1.obj : error LNK2019: unresolved external symbol _GetModuleBaseNameW@16 referenced in function "void __cdecl PrintProcessNameAndID(unsigned long)" (?PrintProcessNameAndID@@YAXK@Z)
1>ex1.obj : error LNK2019: unresolved external symbol _EnumProcessModules@16 referenced in function "void __cdecl PrintProcessNameAndID(unsigned long)" (?PrintProcessNameAndID@@YAXK@Z)
1>ex1.obj : error LNK2019: unresolved external symbol _EnumProcesses@12 referenced in function _main
В чем может быть данная проблема?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
strag 93
1 / 1 / 0
Регистрация: 14.11.2010
Сообщений: 57
21.11.2010, 17:18     EnumProcess #2
тебе в тему VS++ , а так ошибка вроде , как

C++
1
unsigned long int
вот , попробуй

Добавлено через 1 минуту
Цитата Сообщение от iandi Посмотреть сообщение
unsigned long int i;
должно работать
iandi
1 / 1 / 0
Регистрация: 21.11.2010
Сообщений: 20
21.11.2010, 20:18  [ТС]     EnumProcess #3
С данной проблемой разобрался. Не была подгруженна библиотека psapi.lib. Но появился еще один вопрос. У меня есть массив char* BP[7] со значениями. Необходимо сравнить имя процесса с именами, записанными в массиве. Но szProcessName имеет тип TCHAR. Как можно в данном случае сравнить их?

Добавлено через 2 часа 9 минут
Опять же, с проблемой сравнения разобрался. Но появился еще один вопрос. Как теперь можно закрыть нужный процесс? Нашел ф-цию TerminateProcess, но не могу разобраться, пробовал
C++
1
TerminateProcess(hProcess, 0);
но результата никакого.
Ezhi
Сообщений: n/a
08.02.2011, 16:10     EnumProcess #4
<Удалено>

Добавлено через 12 минут
Цитата Сообщение от iandi Посмотреть сообщение
.... Нашел ф-цию TerminateProcess, но не могу разобраться, пробовал
C++
1
TerminateProcess(hProcess, 0);
но результата никакого.
hProcess = OpenProcess( PROCESS_TERMINATE, FALSE, processID );
MrLOLS
 Аватар для MrLOLS
13 / 13 / 1
Регистрация: 21.11.2010
Сообщений: 63
15.10.2015, 23:24     EnumProcess #5
У кого-то такой подход работает?
У меня ничего не происходит, может processID не тот имееться ввиду? От Администратора зпускал.
C
1
hProcess = OpenProcess( PROCESS_TERMINATE, FALSE, processID );
Добавлено через 8 минут
Нужно было переоткрыть процесс с полными правами
C
1
2
3
4
5
HANDLE tmpHandle = OpenProcess(PROCESS_ALL_ACCESS, TRUE, processID);
if (NULL != tmpHandle)
{
TerminateProcess(tmpHandle, 0);
}
Yandex
Объявления
15.10.2015, 23:24     EnumProcess
Ответ Создать тему
Опции темы

Текущее время: 13:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru