С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
15Art94
0 / 0 / 0
Регистрация: 30.12.2013
Сообщений: 12
#1

Удаление процессов - C++

30.12.2013, 04:24. Просмотров 634. Ответов 9
Метки нет (Все метки)

Возникла проблема. Программа не может удалить созданные процессы. Уже голову сломал,не могу понять в чем проблема. Помогите пожалуйста.
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>
 
 
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    HWND zapproc,
         procclc,
         udalclc,
         listbox,
         stat;
    
    
 
int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{
    
    char szClassName[ ] = "WindowsApp";
    HWND hwnd;              
    MSG messages;           
    WNDCLASSEX wincl;        
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;     
    wincl.style = CS_DBLCLKS;               
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 
    wincl.cbClsExtra = 0;                     
    wincl.cbWndExtra = 0;                   
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    if (!RegisterClassEx (&wincl))
        return 0;
    hwnd = CreateWindowEx (0,szClassName,"Windows App",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,544,375,HWND_DESKTOP,NULL,hThisInstance,NULL );
    ShowWindow (hwnd, nFunsterStil);
    while (GetMessage (&messages, NULL, 0, 0))
    { 
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return messages.wParam;
}
 
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int i=0;
    int poziproc=0;
    const int count = 3;
    STARTUPINFO si;
    char process[]="";
    PROCESS_INFORMATION pi[count];
    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );
    switch (message)                  
    {
        case WM_CREATE:
            zapproc = CreateWindow("EDIT", "", WS_VISIBLE| WS_CHILD | WS_BORDER, 10,40,232,20, hwnd,NULL,NULL,NULL);
            procclc = CreateWindow("BUTTON", "Запустить процесс", WS_VISIBLE| WS_CHILD | WS_BORDER, 10,70,232,20, hwnd,(HMENU)1,NULL,NULL);
            udalclc = CreateWindow("BUTTON", "Удалить процесс", WS_VISIBLE| WS_CHILD | WS_BORDER, 10,270,232,20, hwnd,(HMENU)2,NULL,NULL);
            listbox = CreateWindow("LISTBOX", "",WS_VISIBLE| WS_CHILD , 10,100,232,150, hwnd,NULL,NULL,NULL);
            stat = CreateWindow("STATIC", "Примеры возможных процессов: \n 1. explorer.exe \n 2. notepad.exe \n 3. calc.exe",WS_VISIBLE| WS_CHILD , 272,40,232,250, hwnd,NULL,NULL,NULL);
            break;
        case WM_DESTROY:
            PostQuitMessage (0);       
            break;
            default:                      
            return DefWindowProc (hwnd, message, wParam, lParam);
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case 1:
                     GetWindowText(zapproc, process,20);
                     SendMessage (listbox,LB_ADDSTRING,0,(LPARAM) process);
                     !CreateProcess( NULL, process, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi[i]);
                     UpdateWindow(hwnd);
                     UpdateWindow(listbox);
                     i++;
                     break;
                case 2:
                     i = SendMessage (listbox, LB_GETCURSEL, 0, 0);
                     poziproc++;
                     !TerminateProcess(pi[i].hProcess, NO_ERROR);
                     break;
            }
    }
    return 0 ;
}
Добавлено через 28 минут
Помогите пожалуйста, никак не могу додуматься что тут не так
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2013, 04:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление процессов (C++):

Здесь есть удаление столбца, как добавить удаление строки - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { int n; do {cout &lt;&lt; &quot;Razmer massiva: &quot;; cin &gt;&gt; n;...

Описать класс «множество» (добавление и удаление элемента, пересечение, объединение и удаление множеств ) - C++
Описать класс «множество», позволяющий выполнять основные операции – добавление и удаление элемента, пересечение, объединение и удаление...

Создание программы со своей библиотекой ( удаление элементов с N по M в строке и удаление лишних пробелов(если 2 и более оставить один)) - C++
добрый день. помогите, пожалуйста понять мои ошибки в работе. Мне нужно написать программу со своей библиотекой, которая включает в себя...

Синхронизация процессов - C++
std::mutex позволяет синхронизировать несколько разных потоков. А есть ли в std что ни будь для синхронизации процессов? То есть, программа...

дерево процессов - C++
помогите написать дерево процессов, а то у меня более 2 потомков у родителя не получается.. надо 3, или лучше чтобы 1 родитель - потомок -...

Взаимодействие процессов - C++
Нужно написать задачу, в которой дано 10 процессов (там P1, P2, …, Р10, например) Функционирование и взаимодействие процессов следующее: ...

9
15Art94
0 / 0 / 0
Регистрация: 30.12.2013
Сообщений: 12
30.12.2013, 04:57  [ТС] #2
Возникла проблема. Программа не может удалить созданные процессы. Уже голову сломал,не могу понять в чем проблема. Помогите пожалуйста.
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>
 
 
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    HWND zapproc,
         procclc,
         udalclc,
         listbox,
         stat;
    
    
 
int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{
    
    char szClassName[ ] = "WindowsApp";
    HWND hwnd;              
    MSG messages;           
    WNDCLASSEX wincl;        
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;     
    wincl.style = CS_DBLCLKS;               
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 
    wincl.cbClsExtra = 0;                     
    wincl.cbWndExtra = 0;                   
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    if (!RegisterClassEx (&wincl))
        return 0;
    hwnd = CreateWindowEx (0,szClassName,"Windows App",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,544,375,HWND_DESKTOP,NULL,hThisInstance,NULL );
    ShowWindow (hwnd, nFunsterStil);
    while (GetMessage (&messages, NULL, 0, 0))
    { 
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return messages.wParam;
}
 
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int i=0;
    int poziproc=0;
    const int count = 3;
    STARTUPINFO si;
    char process[]="";
    PROCESS_INFORMATION pi[count];
    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );
    switch (message)                  
    {
        case WM_CREATE:
            zapproc = CreateWindow("EDIT", "", WS_VISIBLE| WS_CHILD | WS_BORDER, 10,40,232,20, hwnd,NULL,NULL,NULL);
            procclc = CreateWindow("BUTTON", "Запустить процесс", WS_VISIBLE| WS_CHILD | WS_BORDER, 10,70,232,20, hwnd,(HMENU)1,NULL,NULL);
            udalclc = CreateWindow("BUTTON", "Удалить процесс", WS_VISIBLE| WS_CHILD | WS_BORDER, 10,270,232,20, hwnd,(HMENU)2,NULL,NULL);
            listbox = CreateWindow("LISTBOX", "",WS_VISIBLE| WS_CHILD , 10,100,232,150, hwnd,NULL,NULL,NULL);
            stat = CreateWindow("STATIC", "Примеры возможных процессов: \n 1. explorer.exe \n 2. notepad.exe \n 3. calc.exe",WS_VISIBLE| WS_CHILD , 272,40,232,250, hwnd,NULL,NULL,NULL);
            break;
        case WM_DESTROY:
            PostQuitMessage (0);       
            break;
            default:                      
            return DefWindowProc (hwnd, message, wParam, lParam);
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case 1:
                     GetWindowText(zapproc, process,20);
                     SendMessage (listbox,LB_ADDSTRING,0,(LPARAM) process);
                     !CreateProcess( NULL, process, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi[i]);
                     UpdateWindow(hwnd);
                     UpdateWindow(listbox);
                     i++;
                     break;
                case 2:
                     i = SendMessage (listbox, LB_GETCURSEL, 0, 0);
                     poziproc++;
                     !TerminateProcess(pi[i].hProcess, NO_ERROR);
                     break;
            }
    }
    return 0 ;
}
0
ft4l
Невнимательный
127 / 127 / 29
Регистрация: 08.02.2013
Сообщений: 402
Записей в блоге: 1
30.12.2013, 06:13 #3
из msdn
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
#include <windows.h>
 
void ErrorExit(LPTSTR lpszFunction) 
{ 
    TCHAR szBuf[80]; 
    LPVOID lpMsgBuf;
    DWORD dw = GetLastError(); 
 
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | 
        FORMAT_MESSAGE_FROM_SYSTEM,
        NULL,
        dw,
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &lpMsgBuf,
        0, NULL );
 
    wsprintf(szBuf, 
        "%s failed with error %d: %s", 
        lpszFunction, dw, lpMsgBuf); 
 
    MessageBox(NULL, szBuf, "Error", MB_OK); 
 
    LocalFree(lpMsgBuf);
    ExitProcess(dw); 
}
посмотрите GetLastError(), после !TerminateProcess() , не пойму для чего !
и int i=0; обнуляется при каждом вызве WindowProcedure()
static int i=0;??
... дальше не приглядывался
1
15Art94
0 / 0 / 0
Регистрация: 30.12.2013
Сообщений: 12
30.12.2013, 06:42  [ТС] #4
ft4l, просто мне нужно удалять выбранный процесс из списка, все остальное работает. а вот удаление нивкакую
0
kventin_zhuk
БНТУ ФИТР
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
30.12.2013, 07:16 #5
15Art94, У вас при каждом вызове оконной функции выполняется

C++
1
2
3
ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );
т.е при каждом вызове оконной функции старые ID процессов у вас обнуляются.

И память под вот эти вот переменные:


C++
1
2
3
4
5
6
int i=0;
    int poziproc=0;
    const int count = 3;
    STARTUPINFO si;
    char process[]="";
    PROCESS_INFORMATION pi[count];
в стеке выделяется при каждом вызове оконной функции. Нужно использовать static чтобы сохранить значения переменных между вызовами(глобальные переменные с ограниченной областью видимости)
1
15Art94
0 / 0 / 0
Регистрация: 30.12.2013
Сообщений: 12
30.12.2013, 07:24  [ТС] #6
kventin_zhuk, Спасибо)))
0
ft4l
Невнимательный
127 / 127 / 29
Регистрация: 08.02.2013
Сообщений: 402
Записей в блоге: 1
30.12.2013, 07:34 #7
если честно , я в cpp вообще не понимаю, а с /TC как си этот код не собирается.
добавил static int i,вынес из функции pi
только так не потеряло , хэндл процесса , хз почему , не понял :))
+ вывод информации
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <windows.h>
//#include <iostream>
//#include <stdio.h>
//#include <conio.h>
 
 
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    HWND zapproc,
         procclc,
         udalclc,
         listbox,
         stat;
    
 void ErrorShow(LPTSTR lpszFunction, HANDLE hendl) 
{ 
    TCHAR szBuf[100]; 
    LPVOID lpMsgBuf;
    DWORD dw = GetLastError(); 
 
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | 
        FORMAT_MESSAGE_FROM_SYSTEM,
        NULL,
        dw,
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &lpMsgBuf,
        0, NULL );
 
    wsprintf(szBuf, 
        "%s failed with error %d: %s\n\nhendl=%d", 
        lpszFunction, dw, lpMsgBuf, hendl); 
 
    MessageBox(NULL, szBuf, "Error", MB_OK); 
 
    LocalFree(lpMsgBuf);
}   
 
int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{
    
    char szClassName[ ] = "WindowsApp";
    HWND hwnd;              
    MSG messages;           
    WNDCLASSEX wincl;        
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;     
    wincl.style = CS_DBLCLKS;               
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 
    wincl.cbClsExtra = 0;                     
    wincl.cbWndExtra = 0;                   
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    if (!RegisterClassEx (&wincl))
        return 0;
    hwnd = CreateWindowEx (0,szClassName,"Windows App",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,544,375,HWND_DESKTOP,NULL,hThisInstance,NULL );
    ShowWindow (hwnd, nFunsterStil);
    while (GetMessage (&messages, NULL, 0, 0))
    { 
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return messages.wParam;
}
 
    const int count = 3;
    PROCESS_INFORMATION pi[count];
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static int i=0;
    int poziproc=0;
    STARTUPINFO si;
    char process[]="";
    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    // ZeroMemory( &pi, sizeof(pi) );
    switch (message)                  
    {
        case WM_CREATE:
            zapproc = CreateWindow("EDIT", "", WS_VISIBLE| WS_CHILD | WS_BORDER, 10,40,232,20, hwnd,NULL,NULL,NULL);
            procclc = CreateWindow("BUTTON", "Запустить процесс", WS_VISIBLE| WS_CHILD | WS_BORDER, 10,70,232,20, hwnd,(HMENU)1,NULL,NULL);
            udalclc = CreateWindow("BUTTON", "Удалить процесс", WS_VISIBLE| WS_CHILD | WS_BORDER, 10,270,232,20, hwnd,(HMENU)2,NULL,NULL);
            listbox = CreateWindow("LISTBOX", "",WS_VISIBLE| WS_CHILD , 10,100,232,150, hwnd,NULL,NULL,NULL);
            stat = CreateWindow("STATIC", "Примеры возможных процессов: \n 1. explorer.exe \n 2. notepad.exe \n 3. calc.exe",WS_VISIBLE| WS_CHILD , 272,40,232,250, hwnd,NULL,NULL,NULL);
            break;
        case WM_DESTROY:
            PostQuitMessage (0);       
            break;
            default:                      
            return DefWindowProc (hwnd, message, wParam, lParam);
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case 1:
                     GetWindowText(zapproc, process,20);
                     SendMessage (listbox,LB_ADDSTRING,0,(LPARAM) process);
                     !CreateProcess( NULL, process, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi[i]);
ErrorShow("CreateProcess", pi[i].hProcess);
                     UpdateWindow(hwnd);
                     UpdateWindow(listbox);
                     i++;
                     break;
                case 2:
                     i = SendMessage (listbox, LB_GETCURSEL, 0, 0);
                     poziproc++;
                     !TerminateProcess(pi[i].hProcess, NO_ERROR);
ErrorShow("TerminateProcess", pi[i].hProcess);
                     break;
            }
    }
    return 0 ;
}
Код
J:\SRC>cl /TP test.c /link kernel32.lib user32.lib bufferoverflowu.lib
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.4035 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.

test.c
test.c(101) : warning C4552: '!' : operator has no effect; expected operator with side-effect
test.c(110) : warning C4552: '!' : operator has no effect; expected operator with side-effect
Microsoft (R) Incremental Linker Version 7.10.4035
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:test.exe
kernel32.lib
user32.lib
bufferoverflowu.lib
test.obj
при том что без static вообще обваливается запуск калькулятора...
я не знаю как правильнее... не совсем понял как это должно работать
1
kventin_zhuk
БНТУ ФИТР
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
30.12.2013, 07:35 #8
15Art94,

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <conio.h>
 
 
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    HWND zapproc,
         procclc,
         udalclc,
         listbox,
         stat;
    
    
 
int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{
    
    char szClassName[ ] = "WindowsApp";
    HWND hwnd;              
    MSG messages;           
    WNDCLASSEX wincl;        
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;     
    wincl.style = CS_DBLCLKS;               
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 
    wincl.cbClsExtra = 0;                     
    wincl.cbWndExtra = 0;                   
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    if (!RegisterClassEx (&wincl))
        return 0;
    hwnd = CreateWindowEx (0,szClassName,"Windows App",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,544,375,HWND_DESKTOP,NULL,hThisInstance,NULL );
    ShowWindow (hwnd, nFunsterStil);
    while (GetMessage (&messages, NULL, 0, 0))
    { 
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return messages.wParam;
}
 
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int i=0;
    int poziproc=0;
    const int count = 3;
    STARTUPINFO si;
    char process[30];
    static PROCESS_INFORMATION pi[count];
    
    switch (message)                  
    {
        case WM_CREATE:
            
            zapproc = CreateWindow("EDIT", "", WS_VISIBLE| WS_CHILD | WS_BORDER, 10,40,232,20, hwnd,NULL,NULL,NULL);
            procclc = CreateWindow("BUTTON", "Запустить процесс", WS_VISIBLE| WS_CHILD | WS_BORDER, 10,70,232,20, hwnd,(HMENU)1,NULL,NULL);
            udalclc = CreateWindow("BUTTON", "Удалить процесс", WS_VISIBLE| WS_CHILD | WS_BORDER, 10,270,232,20, hwnd,(HMENU)2,NULL,NULL);
            listbox = CreateWindow("LISTBOX", "",WS_VISIBLE| WS_CHILD , 10,100,232,150, hwnd,NULL,NULL,NULL);
            stat = CreateWindow("STATIC", "Примеры возможных процессов: \n 1. explorer.exe \n 2. notepad.exe \n 3. calc.exe",WS_VISIBLE| WS_CHILD , 272,40,232,250, hwnd,NULL,NULL,NULL);
            break;
        case WM_DESTROY:
            PostQuitMessage (0);       
            break;
            default:                      
            return DefWindowProc (hwnd, message, wParam, lParam);
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case 1:
                     ZeroMemory( &si, sizeof(si) );
                     si.cb = sizeof(si);
 
                     GetWindowText(zapproc, process,20);
                     SendMessage (listbox,LB_ADDSTRING,0,(LPARAM) process);
                     CreateProcess( NULL, process, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi[i]);
                     UpdateWindow(hwnd);
                     UpdateWindow(listbox);
                     i++;
                     break;
                case 2:
                     i = SendMessage (listbox, LB_GETCURSEL, 0, 0);
                     poziproc++;
                     TerminateProcess(pi[i].hProcess, NO_ERROR);
                     SendMessage (listbox, LB_DELETESTRING, i, 0);
                     break;
            }
    }
    return 0 ;
}
Вот - что-то удаляет, но баги есть Так же прошу заметить, что вот это

C++
1
char process[]="";
Очень плохо.
В статических массивах размерность не указывается, когда далее следует явная их инициализация. Инициализируется пустой строкой, а по сути - символом конца строки \0. Фактически статический имеем массив в один символ.

А вот здесь вы пытаетесь в этот массив впихнуть текст из Edita, и влезете куда-нибудь....
C++
1
GetWindowText(zapproc, process,20);
1
15Art94
0 / 0 / 0
Регистрация: 30.12.2013
Сообщений: 12
30.12.2013, 07:55  [ТС] #9
Спасибо ОГРОМНОЕ
0
ft4l
Невнимательный
127 / 127 / 29
Регистрация: 08.02.2013
Сообщений: 402
Записей в блоге: 1
30.12.2013, 08:23 #10
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void ErrorShow(const TCHAR* format, ...) {
 
    va_list args = NULL;
    TCHAR TextBuf[100];
    register TCHAR* cTmp = (TCHAR*)TextBuf;
    DWORD dw =  GetLastError();
 
    va_start(args, format);
        cTmp += wvsprintf(cTmp, format, args);
    va_end(args);
        {
    cTmp += wsprintf(cTmp, TEXT("\n\n\tCode%#08X\r\n\t"), dw);
    cTmp += FormatMessage(
    FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
                NULL, dw, LANG_NEUTRAL, cTmp, 500, NULL );
        }
 
    MessageBox(NULL, TextBuf, TEXT("Message"), 0);
}
усовершенствованная ErrorShow, просмотр любого колличества переменных , типа
C
1
ErrorShow("handle= %#08x\ni=%d", pi[i].hProcess, i);
1
30.12.2013, 08:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2013, 08:23
Привет! Вот еще темы с ответами:

Получить список процессов - C++
Как в c++ получить список процессов?

Список процессов с иконками - C++
Каким образом можно отабразить собственные иконки приложений в списке процессов? Процессы перечисляю так: HANDLE hProcessSnap; ...

Получение списка процессов - C++
Попытался скинуть в файл список всех процессов: Вариант 1: PROCESSENTRY32 PE32; HANDLE hSnapshot =...

C++ и количество запущенных процессов - C++
Перед мной стоит задача. Вычислить количество процессов, запущенных на системе. Перечисляю процессы я так: PROCESSENTRY32...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.