comctl32/toolbar: fix TB_GETBUTTONTEXTA
[wine] / programs / taskmgr / endproc.c
1 /*
2  *  ReactOS Task Manager
3  *
4  *  endproc.c
5  *
6  *  Copyright (C) 1999 - 2001  Brian Palmer  <brianp@reactos.org>
7  *  Copyright (C) 2008  Vladimir Pankratov
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22  */
23     
24 #define WIN32_LEAN_AND_MEAN    /* Exclude rarely-used stuff from Windows headers */
25 #include <windows.h>
26 #include <commctrl.h>
27 #include <stdlib.h>
28 #include <memory.h>
29 #include <stdio.h>
30 #include <winnt.h>
31
32 #include "wine/unicode.h"
33 #include "taskmgr.h"
34 #include "perfdata.h"
35
36 static const WCHAR    wszWarnMsg[] = {'W','A','R','N','I','N','G',':',' ','T','e','r','m','i','n','a','t','i','n','g',' ','a',' ','p','r','o','c','e','s','s',' ','c','a','n',' ','c','a','u','s','e',' ','u','n','d','e','s','i','r','e','d','\n','r','e','s','u','l','t','s',' ','i','n','c','l','u','d','i','n','g',' ','l','o','s','s',' ','o','f',' ','d','a','t','a',' ','a','n','d',' ','s','y','s','t','e','m',' ','i','n','s','t','a','b','i','l','i','t','y','.',' ','T','h','e','\n','p','r','o','c','e','s','s',' ','w','i','l','l',' ','n','o','t',' ','b','e',' ','g','i','v','e','n',' ','t','h','e',' ','c','h','a','n','c','e',' ','t','o',' ','s','a','v','e',' ','i','t','s',' ','s','t','a','t','e',' ','o','r','\n','d','a','t','a',' ','b','e','f','o','r','e',' ','i','t',' ','i','s',' ','t','e','r','m','i','n','a','t','e','d','.',' ','A','r','e',' ','y','o','u',' ','s','u','r','e',' ','y','o','u',' ','w','a','n','t',' ','t','o','\n','t','e','r','m','i','n','a','t','e',' ','t','h','e',' ','p','r','o','c','e','s','s','?',0};
37 static const WCHAR    wszWarnTitle[] = {'T','a','s','k',' ','M','a','n','a','g','e','r',' ','W','a','r','n','i','n','g',0};
38 static const WCHAR    wszUnable2Terminate[] = {'U','n','a','b','l','e',' ','t','o',' ','T','e','r','m','i','n','a','t','e',' ','P','r','o','c','e','s','s',0};
39
40 void ProcessPage_OnEndProcess(void)
41 {
42     LVITEMW          lvitem;
43     ULONG            Index;
44     DWORD            dwProcessId;
45     HANDLE           hProcess;
46     WCHAR            wstrErrorText[256];
47
48     for (Index=0; Index<(ULONG)ListView_GetItemCount(hProcessPageListCtrl); Index++)
49     {
50         lvitem.mask = LVIF_STATE;
51         lvitem.stateMask = LVIS_SELECTED;
52         lvitem.iItem = Index;
53         lvitem.iSubItem = 0;
54
55         SendMessageW(hProcessPageListCtrl, LVM_GETITEMW, 0, (LPARAM) &lvitem);
56
57         if (lvitem.state & LVIS_SELECTED)
58             break;
59     }
60
61     dwProcessId = PerfDataGetProcessId(Index);
62
63     if ((ListView_GetSelectedCount(hProcessPageListCtrl) != 1) || (dwProcessId == 0))
64         return;
65
66     if (MessageBoxW(hMainWnd, wszWarnMsg, wszWarnTitle, MB_YESNO|MB_ICONWARNING) != IDYES)
67         return;
68
69     hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessId);
70
71     if (!hProcess)
72     {
73         GetLastErrorText(wstrErrorText, sizeof(wstrErrorText)/sizeof(WCHAR));
74         MessageBoxW(hMainWnd, wstrErrorText,wszUnable2Terminate, MB_OK|MB_ICONSTOP);
75         return;
76     }
77
78     if (!TerminateProcess(hProcess, 0))
79     {
80         GetLastErrorText(wstrErrorText, sizeof(wstrErrorText)/sizeof(WCHAR));
81         MessageBoxW(hMainWnd, wstrErrorText,wszUnable2Terminate, MB_OK|MB_ICONSTOP);
82     }
83
84     CloseHandle(hProcess);
85 }
86
87 void ProcessPage_OnEndProcessTree(void)
88 {
89     LVITEMW          lvitem;
90     ULONG            Index;
91     DWORD            dwProcessId;
92     HANDLE           hProcess;
93     WCHAR            wstrErrorText[256];
94
95     for (Index=0; Index<(ULONG)ListView_GetItemCount(hProcessPageListCtrl); Index++)
96     {
97         lvitem.mask = LVIF_STATE;
98         lvitem.stateMask = LVIS_SELECTED;
99         lvitem.iItem = Index;
100         lvitem.iSubItem = 0;
101
102         SendMessageW(hProcessPageListCtrl, LVM_GETITEMW, 0, (LPARAM) &lvitem);
103
104         if (lvitem.state & LVIS_SELECTED)
105             break;
106     }
107
108     dwProcessId = PerfDataGetProcessId(Index);
109
110     if ((ListView_GetSelectedCount(hProcessPageListCtrl) != 1) || (dwProcessId == 0))
111         return;
112
113     if (MessageBoxW(hMainWnd, wszWarnMsg, wszWarnTitle, MB_YESNO|MB_ICONWARNING) != IDYES)
114         return;
115
116     hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessId);
117
118     if (!hProcess)
119     {
120         GetLastErrorText(wstrErrorText, sizeof(wstrErrorText)/sizeof(WCHAR));
121         MessageBoxW(hMainWnd, wstrErrorText,wszUnable2Terminate, MB_OK|MB_ICONSTOP);
122         return;
123     }
124
125     if (!TerminateProcess(hProcess, 0))
126     {
127         GetLastErrorText(wstrErrorText, sizeof(wstrErrorText)/sizeof(WCHAR));
128         MessageBoxW(hMainWnd, wstrErrorText,wszUnable2Terminate, MB_OK|MB_ICONSTOP);
129     }
130
131     CloseHandle(hProcess);
132 }