4 * taskmgr.c : Defines the entry point for the application.
6 * Copyright (C) 1999 - 2001 Brian Palmer <brianp@reactos.org>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
23 #define WIN32_LEAN_AND_MEAN /* Exclude rarely-used stuff from Windows headers */
38 #define STATUS_WINDOW 2001
40 /* Global Variables: */
41 HINSTANCE hInst
; /* current instance */
43 HWND hMainWnd
; /* Main Window */
44 HWND hStatusWnd
; /* Status Bar Window */
45 HWND hTabWnd
; /* Tab Control Window */
47 int nMinimumWidth
; /* Minimum width of the dialog (OnSize()'s cx) */
48 int nMinimumHeight
; /* Minimum height of the dialog (OnSize()'s cy) */
50 int nOldWidth
; /* Holds the previous client area width */
51 int nOldHeight
; /* Holds the previous client area height */
53 BOOL bInMenuLoop
= FALSE
; /* Tells us if we are in the menu loop */
55 TASKMANAGER_SETTINGS TaskManagerSettings
;
58 void FillSolidRect(HDC hDC
, LPCRECT lpRect
, COLORREF clr
)
61 ExtTextOut(hDC
, 0, 0, ETO_OPAQUE
, lpRect
, NULL
, 0, NULL
);
64 void FillSolidRect2(HDC hDC
, int x
, int y
, int cx
, int cy
, COLORREF clr
)
73 ExtTextOut(hDC
, 0, 0, ETO_OPAQUE
, &rect
, NULL
, 0, NULL
);
76 void Draw3dRect(HDC hDC
, int x
, int y
, int cx
, int cy
, COLORREF clrTopLeft
, COLORREF clrBottomRight
)
78 FillSolidRect2(hDC
, x
, y
, cx
- 1, 1, clrTopLeft
);
79 FillSolidRect2(hDC
, x
, y
, 1, cy
- 1, clrTopLeft
);
80 FillSolidRect2(hDC
, x
+ cx
, y
, -1, cy
, clrBottomRight
);
81 FillSolidRect2(hDC
, x
, y
+ cy
, cx
, -1, clrBottomRight
);
84 void Draw3dRect2(HDC hDC
, LPRECT lpRect
, COLORREF clrTopLeft
, COLORREF clrBottomRight
)
86 Draw3dRect(hDC
, lpRect
->left
, lpRect
->top
, lpRect
->right
- lpRect
->left
,
87 lpRect
->bottom
- lpRect
->top
, clrTopLeft
, clrBottomRight
);
90 void Font_DrawText(HDC hDC
, LPCTSTR lpszText
, int x
, int y
)
97 hFontDC
= CreateCompatibleDC(hDC
);
98 hFontBitmap
= LoadBitmap(hInst
, MAKEINTRESOURCE(IDB_FONT
));
99 hOldBitmap
= (HBITMAP
)SelectObject(hFontDC
, hFontBitmap
);
101 for (i
= 0; i
< (int)_tcslen(lpszText
); i
++) {
102 if ((lpszText
[i
] >= '0') && (lpszText
[i
] <= '9')) {
103 BitBlt(hDC
, x
+ (i
* 8), y
, 8, 11, hFontDC
, (lpszText
[i
] - '0') * 8, 0, SRCCOPY
);
105 else if (lpszText
[i
] == 'K')
107 BitBlt(hDC
, x
+ (i
* 8), y
, 8, 11, hFontDC
, 80, 0, SRCCOPY
);
109 else if (lpszText
[i
] == '%')
111 BitBlt(hDC
, x
+ (i
* 8), y
, 8, 11, hFontDC
, 88, 0, SRCCOPY
);
114 SelectObject(hFontDC
, hOldBitmap
);
115 DeleteObject(hFontBitmap
);
119 static BOOL
OnCreate(HWND hWnd
)
124 HMENU hUpdateSpeedMenu
;
125 HMENU hCPUHistoryMenu
;
132 SendMessage(hMainWnd
, WM_SETICON
, ICON_BIG
, (LPARAM
)LoadIcon(hInst
, MAKEINTRESOURCE(IDI_TASKMANAGER
)));
134 /* Initialize the Windows Common Controls DLL */
135 InitCommonControls();
137 /* Get the minimum window sizes */
138 GetWindowRect(hWnd
, &rc
);
139 nMinimumWidth
= (rc
.right
- rc
.left
);
140 nMinimumHeight
= (rc
.bottom
- rc
.top
);
142 /* Create the status bar */
143 hStatusWnd
= CreateStatusWindow(WS_VISIBLE
|WS_CHILD
|WS_CLIPSIBLINGS
|SBT_NOBORDERS
, _T(""), hWnd
, STATUS_WINDOW
);
147 /* Create the status bar panes */
151 SendMessage(hStatusWnd
, SB_SETPARTS
, 3, (long)nParts
);
153 /* Create tab pages */
154 hTabWnd
= GetDlgItem(hWnd
, IDC_TAB
);
156 hApplicationPage
= CreateDialog(hInst
, MAKEINTRESOURCE(IDD_APPLICATION_PAGE
), hWnd
, ApplicationPageWndProc
);
157 hProcessPage
= CreateDialog(hInst
, MAKEINTRESOURCE(IDD_PROCESS_PAGE
), hWnd
, ProcessPageWndProc
);
158 hPerformancePage
= CreateDialog(hInst
, MAKEINTRESOURCE(IDD_PERFORMANCE_PAGE
), hWnd
, PerformancePageWndProc
);
160 hApplicationPage
= CreateDialog(hInst
, MAKEINTRESOURCE(IDD_APPLICATION_PAGE
), hTabWnd
, ApplicationPageWndProc
);
161 hProcessPage
= CreateDialog(hInst
, MAKEINTRESOURCE(IDD_PROCESS_PAGE
), hTabWnd
, ProcessPageWndProc
);
162 hPerformancePage
= CreateDialog(hInst
, MAKEINTRESOURCE(IDD_PERFORMANCE_PAGE
), hTabWnd
, PerformancePageWndProc
);
166 _tcscpy(szTemp
, _T("Applications"));
167 memset(&item
, 0, sizeof(TCITEM
));
168 item
.mask
= TCIF_TEXT
;
169 item
.pszText
= szTemp
;
170 SendMessage(hTabWnd
, TCM_INSERTITEM
, 0, (LPARAM
)&item
);
171 _tcscpy(szTemp
, _T("Processes"));
172 memset(&item
, 0, sizeof(TCITEM
));
173 item
.mask
= TCIF_TEXT
;
174 item
.pszText
= szTemp
;
175 SendMessage(hTabWnd
, TCM_INSERTITEM
, 1, (LPARAM
)&item
);
176 _tcscpy(szTemp
, _T("Performance"));
177 memset(&item
, 0, sizeof(TCITEM
));
178 item
.mask
= TCIF_TEXT
;
179 item
.pszText
= szTemp
;
180 SendMessage(hTabWnd
, TCM_INSERTITEM
, 2, (LPARAM
)&item
);
182 /* Size everything correctly */
183 GetClientRect(hWnd
, &rc
);
184 nOldWidth
= rc
.right
;
185 nOldHeight
= rc
.bottom
;
186 /* nOldStartX = rc.left; */
187 /*nOldStartY = rc.top; */
189 #define PAGE_OFFSET_LEFT 17
190 #define PAGE_OFFSET_TOP 72
191 #define PAGE_OFFSET_WIDTH (PAGE_OFFSET_LEFT*2)
192 #define PAGE_OFFSET_HEIGHT (PAGE_OFFSET_TOP+32)
194 if ((TaskManagerSettings
.Left
!= 0) ||
195 (TaskManagerSettings
.Top
!= 0) ||
196 (TaskManagerSettings
.Right
!= 0) ||
197 (TaskManagerSettings
.Bottom
!= 0))
199 MoveWindow(hWnd
, TaskManagerSettings
.Left
, TaskManagerSettings
.Top
, TaskManagerSettings
.Right
- TaskManagerSettings
.Left
, TaskManagerSettings
.Bottom
- TaskManagerSettings
.Top
, TRUE
);
200 #ifdef __GNUC__TEST__
201 MoveWindow(hApplicationPage
, TaskManagerSettings
.Left
+ PAGE_OFFSET_LEFT
, TaskManagerSettings
.Top
+ PAGE_OFFSET_TOP
, TaskManagerSettings
.Right
- TaskManagerSettings
.Left
- PAGE_OFFSET_WIDTH
, TaskManagerSettings
.Bottom
- TaskManagerSettings
.Top
- PAGE_OFFSET_HEIGHT
, FALSE
);
202 MoveWindow(hProcessPage
, TaskManagerSettings
.Left
+ PAGE_OFFSET_LEFT
, TaskManagerSettings
.Top
+ PAGE_OFFSET_TOP
, TaskManagerSettings
.Right
- TaskManagerSettings
.Left
- PAGE_OFFSET_WIDTH
, TaskManagerSettings
.Bottom
- TaskManagerSettings
.Top
- PAGE_OFFSET_HEIGHT
, FALSE
);
203 MoveWindow(hPerformancePage
, TaskManagerSettings
.Left
+ PAGE_OFFSET_LEFT
, TaskManagerSettings
.Top
+ PAGE_OFFSET_TOP
, TaskManagerSettings
.Right
- TaskManagerSettings
.Left
- PAGE_OFFSET_WIDTH
, TaskManagerSettings
.Bottom
- TaskManagerSettings
.Top
- PAGE_OFFSET_HEIGHT
, FALSE
);
206 if (TaskManagerSettings
.Maximized
)
207 ShowWindow(hWnd
, SW_MAXIMIZE
);
209 /* Set the always on top style */
210 hMenu
= GetMenu(hWnd
);
211 hEditMenu
= GetSubMenu(hMenu
, 1);
212 hViewMenu
= GetSubMenu(hMenu
, 2);
213 hUpdateSpeedMenu
= GetSubMenu(hViewMenu
, 1);
214 hCPUHistoryMenu
= GetSubMenu(hViewMenu
, 7);
216 /* Check or uncheck the always on top menu item */
217 if (TaskManagerSettings
.AlwaysOnTop
) {
218 CheckMenuItem(hEditMenu
, ID_OPTIONS_ALWAYSONTOP
, MF_BYCOMMAND
|MF_CHECKED
);
219 SetWindowPos(hWnd
, HWND_TOPMOST
, 0, 0, 0, 0, SWP_NOMOVE
|SWP_NOSIZE
);
221 CheckMenuItem(hEditMenu
, ID_OPTIONS_ALWAYSONTOP
, MF_BYCOMMAND
|MF_UNCHECKED
);
222 SetWindowPos(hWnd
, HWND_NOTOPMOST
, 0, 0, 0, 0, SWP_NOMOVE
|SWP_NOSIZE
);
225 /* Check or uncheck the minimize on use menu item */
226 if (TaskManagerSettings
.MinimizeOnUse
)
227 CheckMenuItem(hEditMenu
, ID_OPTIONS_MINIMIZEONUSE
, MF_BYCOMMAND
|MF_CHECKED
);
229 CheckMenuItem(hEditMenu
, ID_OPTIONS_MINIMIZEONUSE
, MF_BYCOMMAND
|MF_UNCHECKED
);
231 /* Check or uncheck the hide when minimized menu item */
232 if (TaskManagerSettings
.HideWhenMinimized
)
233 CheckMenuItem(hEditMenu
, ID_OPTIONS_HIDEWHENMINIMIZED
, MF_BYCOMMAND
|MF_CHECKED
);
235 CheckMenuItem(hEditMenu
, ID_OPTIONS_HIDEWHENMINIMIZED
, MF_BYCOMMAND
|MF_UNCHECKED
);
237 /* Check or uncheck the show 16-bit tasks menu item */
238 if (TaskManagerSettings
.Show16BitTasks
)
239 CheckMenuItem(hEditMenu
, ID_OPTIONS_SHOW16BITTASKS
, MF_BYCOMMAND
|MF_CHECKED
);
241 CheckMenuItem(hEditMenu
, ID_OPTIONS_SHOW16BITTASKS
, MF_BYCOMMAND
|MF_UNCHECKED
);
243 if (TaskManagerSettings
.View_LargeIcons
)
244 CheckMenuRadioItem(hViewMenu
, ID_VIEW_LARGE
, ID_VIEW_DETAILS
, ID_VIEW_LARGE
, MF_BYCOMMAND
);
245 else if (TaskManagerSettings
.View_SmallIcons
)
246 CheckMenuRadioItem(hViewMenu
, ID_VIEW_LARGE
, ID_VIEW_DETAILS
, ID_VIEW_SMALL
, MF_BYCOMMAND
);
248 CheckMenuRadioItem(hViewMenu
, ID_VIEW_LARGE
, ID_VIEW_DETAILS
, ID_VIEW_DETAILS
, MF_BYCOMMAND
);
250 if (TaskManagerSettings
.ShowKernelTimes
)
251 CheckMenuItem(hViewMenu
, ID_VIEW_SHOWKERNELTIMES
, MF_BYCOMMAND
|MF_CHECKED
);
253 CheckMenuItem(hViewMenu
, ID_VIEW_SHOWKERNELTIMES
, MF_BYCOMMAND
|MF_UNCHECKED
);
255 if (TaskManagerSettings
.UpdateSpeed
== 1)
256 CheckMenuRadioItem(hUpdateSpeedMenu
, ID_VIEW_UPDATESPEED_HIGH
, ID_VIEW_UPDATESPEED_PAUSED
, ID_VIEW_UPDATESPEED_HIGH
, MF_BYCOMMAND
);
257 else if (TaskManagerSettings
.UpdateSpeed
== 2)
258 CheckMenuRadioItem(hUpdateSpeedMenu
, ID_VIEW_UPDATESPEED_HIGH
, ID_VIEW_UPDATESPEED_PAUSED
, ID_VIEW_UPDATESPEED_NORMAL
, MF_BYCOMMAND
);
259 else if (TaskManagerSettings
.UpdateSpeed
== 4)
260 CheckMenuRadioItem(hUpdateSpeedMenu
, ID_VIEW_UPDATESPEED_HIGH
, ID_VIEW_UPDATESPEED_PAUSED
, ID_VIEW_UPDATESPEED_LOW
, MF_BYCOMMAND
);
262 CheckMenuRadioItem(hUpdateSpeedMenu
, ID_VIEW_UPDATESPEED_HIGH
, ID_VIEW_UPDATESPEED_PAUSED
, ID_VIEW_UPDATESPEED_PAUSED
, MF_BYCOMMAND
);
264 if (TaskManagerSettings
.CPUHistory_OneGraphPerCPU
)
265 CheckMenuRadioItem(hCPUHistoryMenu
, ID_VIEW_CPUHISTORY_ONEGRAPHALL
, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU
, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU
, MF_BYCOMMAND
);
267 CheckMenuRadioItem(hCPUHistoryMenu
, ID_VIEW_CPUHISTORY_ONEGRAPHALL
, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU
, ID_VIEW_CPUHISTORY_ONEGRAPHALL
, MF_BYCOMMAND
);
269 nActivePage
= TaskManagerSettings
.ActiveTabPage
;
270 TabCtrl_SetCurFocus
/*Sel*/(hTabWnd
, 0);
271 TabCtrl_SetCurFocus
/*Sel*/(hTabWnd
, 1);
272 TabCtrl_SetCurFocus
/*Sel*/(hTabWnd
, 2);
273 TabCtrl_SetCurFocus
/*Sel*/(hTabWnd
, nActivePage
);
275 if (TaskManagerSettings
.UpdateSpeed
== 1)
276 SetTimer(hWnd
, 1, 1000, NULL
);
277 else if (TaskManagerSettings
.UpdateSpeed
== 2)
278 SetTimer(hWnd
, 1, 2000, NULL
);
279 else if (TaskManagerSettings
.UpdateSpeed
== 4)
280 SetTimer(hWnd
, 1, 4000, NULL
);
283 * Refresh the performance data
284 * Sample it twice so we can establish
285 * the delta values & cpu usage
290 RefreshApplicationPage();
291 RefreshProcessPage();
292 RefreshPerformancePage();
294 TrayIcon_ShellAddTrayIcon();
300 * This function handles all the moving events for the application
301 * It moves every child window that needs moving
303 static void OnMove( UINT nType
, int cx
, int cy
)
305 #ifdef __GNUC__TEST__
306 MoveWindow(hApplicationPage
, TaskManagerSettings
.Left
+ PAGE_OFFSET_LEFT
, TaskManagerSettings
.Top
+ PAGE_OFFSET_TOP
, TaskManagerSettings
.Right
- TaskManagerSettings
.Left
- PAGE_OFFSET_WIDTH
, TaskManagerSettings
.Bottom
- TaskManagerSettings
.Top
- PAGE_OFFSET_HEIGHT
, FALSE
);
307 MoveWindow(hProcessPage
, TaskManagerSettings
.Left
+ PAGE_OFFSET_LEFT
, TaskManagerSettings
.Top
+ PAGE_OFFSET_TOP
, TaskManagerSettings
.Right
- TaskManagerSettings
.Left
- PAGE_OFFSET_WIDTH
, TaskManagerSettings
.Bottom
- TaskManagerSettings
.Top
- PAGE_OFFSET_HEIGHT
, FALSE
);
308 MoveWindow(hPerformancePage
, TaskManagerSettings
.Left
+ PAGE_OFFSET_LEFT
, TaskManagerSettings
.Top
+ PAGE_OFFSET_TOP
, TaskManagerSettings
.Right
- TaskManagerSettings
.Left
- PAGE_OFFSET_WIDTH
, TaskManagerSettings
.Bottom
- TaskManagerSettings
.Top
- PAGE_OFFSET_HEIGHT
, FALSE
);
313 * This function handles all the sizing events for the application
314 * It re-sizes every window, and child window that needs re-sizing
316 static void OnSize( UINT nType
, int cx
, int cy
)
323 if (nType
== SIZE_MINIMIZED
)
325 if(TaskManagerSettings
.HideWhenMinimized
)
327 ShowWindow(hMainWnd
, SW_HIDE
);
332 nXDifference
= cx
- nOldWidth
;
333 nYDifference
= cy
- nOldHeight
;
337 /* Update the status bar size */
338 GetWindowRect(hStatusWnd
, &rc
);
339 SendMessage(hStatusWnd
, WM_SIZE
, nType
, MAKELPARAM(cx
, cy
+ (rc
.bottom
- rc
.top
)));
341 /* Update the status bar pane sizes */
342 nParts
[0] = bInMenuLoop
? -1 : 100;
345 SendMessage(hStatusWnd
, SB_SETPARTS
, bInMenuLoop
? 1 : 3, (long)nParts
);
347 /* Resize the tab control */
348 GetWindowRect(hTabWnd
, &rc
);
349 cx
= (rc
.right
- rc
.left
) + nXDifference
;
350 cy
= (rc
.bottom
- rc
.top
) + nYDifference
;
351 SetWindowPos(hTabWnd
, NULL
, 0, 0, cx
, cy
, SWP_NOACTIVATE
|SWP_NOOWNERZORDER
|SWP_NOMOVE
|SWP_NOZORDER
);
353 /* Resize the application page */
354 GetWindowRect(hApplicationPage
, &rc
);
355 cx
= (rc
.right
- rc
.left
) + nXDifference
;
356 cy
= (rc
.bottom
- rc
.top
) + nYDifference
;
357 SetWindowPos(hApplicationPage
, NULL
, 0, 0, cx
, cy
, SWP_NOACTIVATE
|SWP_NOOWNERZORDER
|SWP_NOMOVE
|SWP_NOZORDER
);
359 /* Resize the process page */
360 GetWindowRect(hProcessPage
, &rc
);
361 cx
= (rc
.right
- rc
.left
) + nXDifference
;
362 cy
= (rc
.bottom
- rc
.top
) + nYDifference
;
363 SetWindowPos(hProcessPage
, NULL
, 0, 0, cx
, cy
, SWP_NOACTIVATE
|SWP_NOOWNERZORDER
|SWP_NOMOVE
|SWP_NOZORDER
);
365 /* Resize the performance page */
366 GetWindowRect(hPerformancePage
, &rc
);
367 cx
= (rc
.right
- rc
.left
) + nXDifference
;
368 cy
= (rc
.bottom
- rc
.top
) + nYDifference
;
369 SetWindowPos(hPerformancePage
, NULL
, 0, 0, cx
, cy
, SWP_NOACTIVATE
|SWP_NOOWNERZORDER
|SWP_NOMOVE
|SWP_NOZORDER
);
372 static void LoadSettings(void)
375 TCHAR szSubKey
[] = _T("Software\\Wine\\TaskManager");
379 /* Window size & position settings */
380 TaskManagerSettings
.Maximized
= FALSE
;
381 TaskManagerSettings
.Left
= 0;
382 TaskManagerSettings
.Top
= 0;
383 TaskManagerSettings
.Right
= 0;
384 TaskManagerSettings
.Bottom
= 0;
387 TaskManagerSettings
.ActiveTabPage
= 0;
389 /* Options menu settings */
390 TaskManagerSettings
.AlwaysOnTop
= FALSE
;
391 TaskManagerSettings
.MinimizeOnUse
= TRUE
;
392 TaskManagerSettings
.HideWhenMinimized
= TRUE
;
393 TaskManagerSettings
.Show16BitTasks
= TRUE
;
395 /* Update speed settings */
396 TaskManagerSettings
.UpdateSpeed
= 2;
398 /* Applications page settings */
399 TaskManagerSettings
.View_LargeIcons
= FALSE
;
400 TaskManagerSettings
.View_SmallIcons
= FALSE
;
401 TaskManagerSettings
.View_Details
= TRUE
;
403 /* Processes page settings */
404 TaskManagerSettings
.ShowProcessesFromAllUsers
= FALSE
; /* Server-only? */
405 TaskManagerSettings
.Column_ImageName
= TRUE
;
406 TaskManagerSettings
.Column_PID
= TRUE
;
407 TaskManagerSettings
.Column_CPUUsage
= TRUE
;
408 TaskManagerSettings
.Column_CPUTime
= TRUE
;
409 TaskManagerSettings
.Column_MemoryUsage
= TRUE
;
410 TaskManagerSettings
.Column_MemoryUsageDelta
= FALSE
;
411 TaskManagerSettings
.Column_PeakMemoryUsage
= FALSE
;
412 TaskManagerSettings
.Column_PageFaults
= FALSE
;
413 TaskManagerSettings
.Column_USERObjects
= FALSE
;
414 TaskManagerSettings
.Column_IOReads
= FALSE
;
415 TaskManagerSettings
.Column_IOReadBytes
= FALSE
;
416 TaskManagerSettings
.Column_SessionID
= FALSE
; /* Server-only? */
417 TaskManagerSettings
.Column_UserName
= FALSE
; /* Server-only? */
418 TaskManagerSettings
.Column_PageFaultsDelta
= FALSE
;
419 TaskManagerSettings
.Column_VirtualMemorySize
= FALSE
;
420 TaskManagerSettings
.Column_PagedPool
= FALSE
;
421 TaskManagerSettings
.Column_NonPagedPool
= FALSE
;
422 TaskManagerSettings
.Column_BasePriority
= FALSE
;
423 TaskManagerSettings
.Column_HandleCount
= FALSE
;
424 TaskManagerSettings
.Column_ThreadCount
= FALSE
;
425 TaskManagerSettings
.Column_GDIObjects
= FALSE
;
426 TaskManagerSettings
.Column_IOWrites
= FALSE
;
427 TaskManagerSettings
.Column_IOWriteBytes
= FALSE
;
428 TaskManagerSettings
.Column_IOOther
= FALSE
;
429 TaskManagerSettings
.Column_IOOtherBytes
= FALSE
;
431 for (i
= 0; i
< 25; i
++) {
432 TaskManagerSettings
.ColumnOrderArray
[i
] = i
;
434 TaskManagerSettings
.ColumnSizeArray
[0] = 105;
435 TaskManagerSettings
.ColumnSizeArray
[1] = 50;
436 TaskManagerSettings
.ColumnSizeArray
[2] = 107;
437 TaskManagerSettings
.ColumnSizeArray
[3] = 70;
438 TaskManagerSettings
.ColumnSizeArray
[4] = 35;
439 TaskManagerSettings
.ColumnSizeArray
[5] = 70;
440 TaskManagerSettings
.ColumnSizeArray
[6] = 70;
441 TaskManagerSettings
.ColumnSizeArray
[7] = 100;
442 TaskManagerSettings
.ColumnSizeArray
[8] = 70;
443 TaskManagerSettings
.ColumnSizeArray
[9] = 70;
444 TaskManagerSettings
.ColumnSizeArray
[10] = 70;
445 TaskManagerSettings
.ColumnSizeArray
[11] = 70;
446 TaskManagerSettings
.ColumnSizeArray
[12] = 70;
447 TaskManagerSettings
.ColumnSizeArray
[13] = 70;
448 TaskManagerSettings
.ColumnSizeArray
[14] = 60;
449 TaskManagerSettings
.ColumnSizeArray
[15] = 60;
450 TaskManagerSettings
.ColumnSizeArray
[16] = 60;
451 TaskManagerSettings
.ColumnSizeArray
[17] = 60;
452 TaskManagerSettings
.ColumnSizeArray
[18] = 60;
453 TaskManagerSettings
.ColumnSizeArray
[19] = 70;
454 TaskManagerSettings
.ColumnSizeArray
[20] = 70;
455 TaskManagerSettings
.ColumnSizeArray
[21] = 70;
456 TaskManagerSettings
.ColumnSizeArray
[22] = 70;
457 TaskManagerSettings
.ColumnSizeArray
[23] = 70;
458 TaskManagerSettings
.ColumnSizeArray
[24] = 70;
460 TaskManagerSettings
.SortColumn
= 1;
461 TaskManagerSettings
.SortAscending
= TRUE
;
463 /* Performance page settings */
464 TaskManagerSettings
.CPUHistory_OneGraphPerCPU
= TRUE
;
465 TaskManagerSettings
.ShowKernelTimes
= FALSE
;
468 /* @@ Wine registry key: HKCU\Software\Wine\TaskManager */
469 if (RegOpenKeyEx(HKEY_CURRENT_USER
, szSubKey
, 0, KEY_READ
, &hKey
) != ERROR_SUCCESS
)
471 /* Read the settings */
472 dwSize
= sizeof(TASKMANAGER_SETTINGS
);
473 RegQueryValueEx(hKey
, _T("Preferences"), NULL
, NULL
, (LPBYTE
)&TaskManagerSettings
, &dwSize
);
479 static void SaveSettings(void)
482 TCHAR szSubKey3
[] = _T("Software\\Wine\\TaskManager");
484 /* Open (or create) the key */
486 /* @@ Wine registry key: HKCU\Software\Wine\TaskManager */
487 if (RegCreateKeyEx(HKEY_CURRENT_USER
, szSubKey3
, 0, NULL
, REG_OPTION_NON_VOLATILE
, KEY_WRITE
, NULL
, &hKey
, NULL
) != ERROR_SUCCESS
)
489 /* Save the settings */
490 RegSetValueEx(hKey
, _T("Preferences"), 0, REG_BINARY
, (LPBYTE
)&TaskManagerSettings
, sizeof(TASKMANAGER_SETTINGS
));
495 static void TaskManager_OnRestoreMainWindow(void)
497 HMENU hMenu
, hOptionsMenu
;
500 hMenu
= GetMenu(hMainWnd
);
501 hOptionsMenu
= GetSubMenu(hMenu
, OPTIONS_MENU_INDEX
);
502 OnTop
= ((GetWindowLong(hMainWnd
, GWL_EXSTYLE
) & WS_EX_TOPMOST
) != 0);
505 SetForegroundWindow(hMainWnd
);
506 SetWindowPos(hMainWnd
, (OnTop
? HWND_TOPMOST
: HWND_TOP
), 0, 0, 0, 0, SWP_NOSIZE
| SWP_NOMOVE
| SWP_SHOWWINDOW
);
509 static void TaskManager_OnEnterMenuLoop(HWND hWnd
)
513 /* Update the status bar pane sizes */
515 SendMessage(hStatusWnd
, SB_SETPARTS
, 1, (long)&nParts
);
517 SendMessage(hStatusWnd
, SB_SETTEXT
, (WPARAM
)0, (LPARAM
)_T(""));
520 static void TaskManager_OnExitMenuLoop(HWND hWnd
)
527 /* Update the status bar pane sizes */
528 GetClientRect(hWnd
, &rc
);
531 nParts
[2] = rc
.right
;
532 SendMessage(hStatusWnd
, SB_SETPARTS
, 3, (long)nParts
);
533 SendMessage(hStatusWnd
, SB_SETTEXT
, 0, (LPARAM
)_T(""));
534 wsprintf(text
, _T("CPU Usage: %3d%%"), PerfDataGetProcessorUsage());
535 SendMessage(hStatusWnd
, SB_SETTEXT
, 1, (LPARAM
)text
);
536 wsprintf(text
, _T("Processes: %d"), PerfDataGetProcessCount());
537 SendMessage(hStatusWnd
, SB_SETTEXT
, 0, (LPARAM
)text
);
540 static void TaskManager_OnMenuSelect(HWND hWnd
, UINT nItemID
, UINT nFlags
, HMENU hSysMenu
)
544 _tcscpy(str
, TEXT(""));
545 if (LoadString(hInst
, nItemID
, str
, 100)) {
546 /* load appropriate string */
548 /* first newline terminates actual string */
549 lpsz
= _tcschr(lpsz
, '\n');
553 SendMessage(hStatusWnd
, SB_SETTEXT
, 0, (LPARAM
)str
);
556 static void TaskManager_OnViewUpdateSpeedHigh(void)
560 HMENU hUpdateSpeedMenu
;
562 hMenu
= GetMenu(hMainWnd
);
563 hViewMenu
= GetSubMenu(hMenu
, 2);
564 hUpdateSpeedMenu
= GetSubMenu(hViewMenu
, 1);
566 TaskManagerSettings
.UpdateSpeed
= 1;
567 CheckMenuRadioItem(hUpdateSpeedMenu
, ID_VIEW_UPDATESPEED_HIGH
, ID_VIEW_UPDATESPEED_PAUSED
, ID_VIEW_UPDATESPEED_HIGH
, MF_BYCOMMAND
);
569 KillTimer(hMainWnd
, 1);
570 SetTimer(hMainWnd
, 1, 1000, NULL
);
573 static void TaskManager_OnViewUpdateSpeedNormal(void)
577 HMENU hUpdateSpeedMenu
;
579 hMenu
= GetMenu(hMainWnd
);
580 hViewMenu
= GetSubMenu(hMenu
, 2);
581 hUpdateSpeedMenu
= GetSubMenu(hViewMenu
, 1);
583 TaskManagerSettings
.UpdateSpeed
= 2;
584 CheckMenuRadioItem(hUpdateSpeedMenu
, ID_VIEW_UPDATESPEED_HIGH
, ID_VIEW_UPDATESPEED_PAUSED
, ID_VIEW_UPDATESPEED_NORMAL
, MF_BYCOMMAND
);
586 KillTimer(hMainWnd
, 1);
587 SetTimer(hMainWnd
, 1, 2000, NULL
);
590 static void TaskManager_OnViewUpdateSpeedLow(void)
594 HMENU hUpdateSpeedMenu
;
596 hMenu
= GetMenu(hMainWnd
);
597 hViewMenu
= GetSubMenu(hMenu
, 2);
598 hUpdateSpeedMenu
= GetSubMenu(hViewMenu
, 1);
600 TaskManagerSettings
.UpdateSpeed
= 4;
601 CheckMenuRadioItem(hUpdateSpeedMenu
, ID_VIEW_UPDATESPEED_HIGH
, ID_VIEW_UPDATESPEED_PAUSED
, ID_VIEW_UPDATESPEED_LOW
, MF_BYCOMMAND
);
603 KillTimer(hMainWnd
, 1);
604 SetTimer(hMainWnd
, 1, 4000, NULL
);
607 static void TaskManager_OnViewUpdateSpeedPaused(void)
611 HMENU hUpdateSpeedMenu
;
613 hMenu
= GetMenu(hMainWnd
);
614 hViewMenu
= GetSubMenu(hMenu
, 2);
615 hUpdateSpeedMenu
= GetSubMenu(hViewMenu
, 1);
616 TaskManagerSettings
.UpdateSpeed
= 0;
617 CheckMenuRadioItem(hUpdateSpeedMenu
, ID_VIEW_UPDATESPEED_HIGH
, ID_VIEW_UPDATESPEED_PAUSED
, ID_VIEW_UPDATESPEED_PAUSED
, MF_BYCOMMAND
);
618 KillTimer(hMainWnd
, 1);
621 static void TaskManager_OnTabWndSelChange(void)
629 hMenu
= GetMenu(hMainWnd
);
630 hViewMenu
= GetSubMenu(hMenu
, 2);
631 hOptionsMenu
= GetSubMenu(hMenu
, 1);
632 TaskManagerSettings
.ActiveTabPage
= TabCtrl_GetCurSel(hTabWnd
);
633 for (i
= GetMenuItemCount(hViewMenu
) - 1; i
> 2; i
--) {
634 hSubMenu
= GetSubMenu(hViewMenu
, i
);
636 DestroyMenu(hSubMenu
);
637 RemoveMenu(hViewMenu
, i
, MF_BYPOSITION
);
639 RemoveMenu(hOptionsMenu
, 3, MF_BYPOSITION
);
640 switch (TaskManagerSettings
.ActiveTabPage
) {
642 ShowWindow(hApplicationPage
, SW_SHOW
);
643 ShowWindow(hProcessPage
, SW_HIDE
);
644 ShowWindow(hPerformancePage
, SW_HIDE
);
645 BringWindowToTop(hApplicationPage
);
646 AppendMenu(hViewMenu
, MF_STRING
, ID_VIEW_LARGE
, _T("Lar&ge Icons"));
647 AppendMenu(hViewMenu
, MF_STRING
, ID_VIEW_SMALL
, _T("S&mall Icons"));
648 AppendMenu(hViewMenu
, MF_STRING
, ID_VIEW_DETAILS
, _T("&Details"));
650 if (GetMenuItemCount(hMenu
) <= 4) {
651 hSubMenu
= LoadMenu(hInst
, MAKEINTRESOURCE(IDR_WINDOWSMENU
));
652 InsertMenu(hMenu
, 3, MF_BYPOSITION
|MF_POPUP
, (UINT_PTR
)hSubMenu
, _T("&Windows"));
653 DrawMenuBar(hMainWnd
);
655 if (TaskManagerSettings
.View_LargeIcons
)
656 CheckMenuRadioItem(hViewMenu
, ID_VIEW_LARGE
, ID_VIEW_DETAILS
, ID_VIEW_LARGE
, MF_BYCOMMAND
);
657 else if (TaskManagerSettings
.View_SmallIcons
)
658 CheckMenuRadioItem(hViewMenu
, ID_VIEW_LARGE
, ID_VIEW_DETAILS
, ID_VIEW_SMALL
, MF_BYCOMMAND
);
660 CheckMenuRadioItem(hViewMenu
, ID_VIEW_LARGE
, ID_VIEW_DETAILS
, ID_VIEW_DETAILS
, MF_BYCOMMAND
);
662 * Give the application list control focus
664 SetFocus(hApplicationPageListCtrl
);
668 ShowWindow(hApplicationPage
, SW_HIDE
);
669 ShowWindow(hProcessPage
, SW_SHOW
);
670 ShowWindow(hPerformancePage
, SW_HIDE
);
671 BringWindowToTop(hProcessPage
);
672 AppendMenu(hViewMenu
, MF_STRING
, ID_VIEW_SELECTCOLUMNS
, _T("&Select Columns..."));
673 AppendMenu(hOptionsMenu
, MF_STRING
, ID_OPTIONS_SHOW16BITTASKS
, _T("&Show 16-bit tasks"));
674 if (TaskManagerSettings
.Show16BitTasks
)
675 CheckMenuItem(hOptionsMenu
, ID_OPTIONS_SHOW16BITTASKS
, MF_BYCOMMAND
|MF_CHECKED
);
676 if (GetMenuItemCount(hMenu
) > 4)
678 RemoveMenu(hMenu
, 3, MF_BYPOSITION
);
679 DrawMenuBar(hMainWnd
);
682 * Give the process list control focus
684 SetFocus(hProcessPageListCtrl
);
688 ShowWindow(hApplicationPage
, SW_HIDE
);
689 ShowWindow(hProcessPage
, SW_HIDE
);
690 ShowWindow(hPerformancePage
, SW_SHOW
);
691 BringWindowToTop(hPerformancePage
);
692 if (GetMenuItemCount(hMenu
) > 4) {
693 RemoveMenu(hMenu
, 3, MF_BYPOSITION
);
694 DrawMenuBar(hMainWnd
);
696 hSubMenu
= CreatePopupMenu();
697 AppendMenu(hSubMenu
, MF_STRING
, ID_VIEW_CPUHISTORY_ONEGRAPHALL
, _T("&One Graph, All CPUs"));
698 AppendMenu(hSubMenu
, MF_STRING
, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU
, _T("One Graph &Per CPU"));
699 AppendMenu(hViewMenu
, MF_STRING
|MF_POPUP
, (UINT_PTR
)hSubMenu
, _T("&CPU History"));
700 AppendMenu(hViewMenu
, MF_STRING
, ID_VIEW_SHOWKERNELTIMES
, _T("&Show Kernel Times"));
701 if (TaskManagerSettings
.ShowKernelTimes
)
702 CheckMenuItem(hViewMenu
, ID_VIEW_SHOWKERNELTIMES
, MF_BYCOMMAND
|MF_CHECKED
);
704 CheckMenuItem(hViewMenu
, ID_VIEW_SHOWKERNELTIMES
, MF_BYCOMMAND
|MF_UNCHECKED
);
705 if (TaskManagerSettings
.CPUHistory_OneGraphPerCPU
)
706 CheckMenuRadioItem(hSubMenu
, ID_VIEW_CPUHISTORY_ONEGRAPHALL
, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU
, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU
, MF_BYCOMMAND
);
708 CheckMenuRadioItem(hSubMenu
, ID_VIEW_CPUHISTORY_ONEGRAPHALL
, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU
, ID_VIEW_CPUHISTORY_ONEGRAPHALL
, MF_BYCOMMAND
);
710 * Give the tab control focus
717 LPTSTR
GetLastErrorText(LPTSTR lpszBuf
, DWORD dwSize
)
720 LPTSTR lpszTemp
= NULL
;
722 dwRet
= FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER
| FORMAT_MESSAGE_FROM_SYSTEM
|FORMAT_MESSAGE_ARGUMENT_ARRAY
,
730 /* supplied buffer is not long enough */
731 if (!dwRet
|| ( (long)dwSize
< (long)dwRet
+14)) {
732 lpszBuf
[0] = TEXT('\0');
734 lpszTemp
[lstrlen(lpszTemp
)-2] = TEXT('\0'); /* remove cr and newline character */
735 _stprintf(lpszBuf
, TEXT("%s (%u)"), lpszTemp
, GetLastError());
738 LocalFree((HLOCAL
)lpszTemp
);
743 /* Message handler for dialog box. */
744 static INT_PTR CALLBACK
745 TaskManagerWndProc(HWND hDlg
, UINT message
, WPARAM wParam
, LPARAM lParam
)
758 return OnCreate(hDlg
);
761 if (LOWORD(wParam
) == IDOK
|| LOWORD(wParam
) == IDCANCEL
) {
762 EndDialog(hDlg
, LOWORD(wParam
));
765 /* Process menu commands */
766 switch (LOWORD(wParam
))
769 TaskManager_OnFileNew();
771 case ID_OPTIONS_ALWAYSONTOP
:
772 TaskManager_OnOptionsAlwaysOnTop();
774 case ID_OPTIONS_MINIMIZEONUSE
:
775 TaskManager_OnOptionsMinimizeOnUse();
777 case ID_OPTIONS_HIDEWHENMINIMIZED
:
778 TaskManager_OnOptionsHideWhenMinimized();
780 case ID_OPTIONS_SHOW16BITTASKS
:
781 TaskManager_OnOptionsShow16BitTasks();
784 TaskManager_OnRestoreMainWindow();
787 ApplicationPage_OnViewLargeIcons();
790 ApplicationPage_OnViewSmallIcons();
792 case ID_VIEW_DETAILS
:
793 ApplicationPage_OnViewDetails();
795 case ID_VIEW_SHOWKERNELTIMES
:
796 PerformancePage_OnViewShowKernelTimes();
798 case ID_VIEW_CPUHISTORY_ONEGRAPHALL
:
799 PerformancePage_OnViewCPUHistoryOneGraphAll();
801 case ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU
:
802 PerformancePage_OnViewCPUHistoryOneGraphPerCPU();
804 case ID_VIEW_UPDATESPEED_HIGH
:
805 TaskManager_OnViewUpdateSpeedHigh();
807 case ID_VIEW_UPDATESPEED_NORMAL
:
808 TaskManager_OnViewUpdateSpeedNormal();
810 case ID_VIEW_UPDATESPEED_LOW
:
811 TaskManager_OnViewUpdateSpeedLow();
813 case ID_VIEW_UPDATESPEED_PAUSED
:
814 TaskManager_OnViewUpdateSpeedPaused();
816 case ID_VIEW_SELECTCOLUMNS
:
817 ProcessPage_OnViewSelectColumns();
819 case ID_VIEW_REFRESH
:
820 PostMessage(hDlg
, WM_TIMER
, 0, 0);
822 case ID_WINDOWS_TILEHORIZONTALLY
:
823 ApplicationPage_OnWindowsTileHorizontally();
825 case ID_WINDOWS_TILEVERTICALLY
:
826 ApplicationPage_OnWindowsTileVertically();
828 case ID_WINDOWS_MINIMIZE
:
829 ApplicationPage_OnWindowsMinimize();
831 case ID_WINDOWS_MAXIMIZE
:
832 ApplicationPage_OnWindowsMaximize();
834 case ID_WINDOWS_CASCADE
:
835 ApplicationPage_OnWindowsCascade();
837 case ID_WINDOWS_BRINGTOFRONT
:
838 ApplicationPage_OnWindowsBringToFront();
840 case ID_APPLICATION_PAGE_SWITCHTO
:
841 ApplicationPage_OnSwitchTo();
843 case ID_APPLICATION_PAGE_ENDTASK
:
844 ApplicationPage_OnEndTask();
846 case ID_APPLICATION_PAGE_GOTOPROCESS
:
847 ApplicationPage_OnGotoProcess();
849 case ID_PROCESS_PAGE_ENDPROCESS
:
850 ProcessPage_OnEndProcess();
852 case ID_PROCESS_PAGE_ENDPROCESSTREE
:
853 ProcessPage_OnEndProcessTree();
855 case ID_PROCESS_PAGE_DEBUG
:
856 ProcessPage_OnDebug();
858 case ID_PROCESS_PAGE_SETAFFINITY
:
859 ProcessPage_OnSetAffinity();
861 case ID_PROCESS_PAGE_SETPRIORITY_REALTIME
:
862 ProcessPage_OnSetPriorityRealTime();
864 case ID_PROCESS_PAGE_SETPRIORITY_HIGH
:
865 ProcessPage_OnSetPriorityHigh();
867 case ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL
:
868 ProcessPage_OnSetPriorityAboveNormal();
870 case ID_PROCESS_PAGE_SETPRIORITY_NORMAL
:
871 ProcessPage_OnSetPriorityNormal();
873 case ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL
:
874 ProcessPage_OnSetPriorityBelowNormal();
876 case ID_PROCESS_PAGE_SETPRIORITY_LOW
:
877 ProcessPage_OnSetPriorityLow();
879 case ID_PROCESS_PAGE_DEBUGCHANNELS
:
880 ProcessPage_OnDebugChannels();
886 EndDialog(hDlg
, IDOK
);
898 HMENU hMenu
, hPopupMenu
;
902 OnTop
= ((GetWindowLong(hMainWnd
, GWL_EXSTYLE
) & WS_EX_TOPMOST
) != 0);
904 hMenu
= LoadMenu(hInst
, MAKEINTRESOURCE(IDR_TRAY_POPUP
));
905 hPopupMenu
= GetSubMenu(hMenu
, 0);
907 if(IsWindowVisible(hMainWnd
))
909 DeleteMenu(hPopupMenu
, ID_RESTORE
, MF_BYCOMMAND
);
913 SetMenuDefaultItem(hPopupMenu
, ID_RESTORE
, FALSE
);
918 CheckMenuItem(hPopupMenu
, ID_OPTIONS_ALWAYSONTOP
, MF_BYCOMMAND
| MF_CHECKED
);
921 SetForegroundWindow(hMainWnd
);
922 TrackPopupMenuEx(hPopupMenu
, 0, pt
.x
, pt
.y
, hMainWnd
, NULL
);
927 case WM_LBUTTONDBLCLK
:
928 TaskManager_OnRestoreMainWindow();
934 idctrl
= (int)wParam
;
935 pnmh
= (LPNMHDR
)lParam
;
936 if ((pnmh
->hwndFrom
== hTabWnd
) &&
937 (pnmh
->idFrom
== IDC_TAB
) &&
938 (pnmh
->code
== TCN_SELCHANGE
))
940 TaskManager_OnTabWndSelChange();
946 GetClientRect(hDlg
, &rc
);
947 Draw3dRect(hdc
, rc
.left
, rc
.top
, rc
.right
, rc
.top
+ 2, GetSysColor(COLOR_3DSHADOW
), GetSysColor(COLOR_3DHILIGHT
));
948 ReleaseDC(hDlg
, hdc
);
952 hdc
= BeginPaint(hDlg
, &ps
);
953 GetClientRect(hDlg
, &rc
);
954 Draw3dRect(hdc
, rc
.left
, rc
.top
, rc
.right
, rc
.top
+ 2, GetSysColor(COLOR_3DSHADOW
), GetSysColor(COLOR_3DHILIGHT
));
959 /* Make sure the user is sizing the dialog */
960 /* in an acceptable range */
961 pRC
= (LPRECT
)lParam
;
962 if ((wParam
== WMSZ_LEFT
) || (wParam
== WMSZ_TOPLEFT
) || (wParam
== WMSZ_BOTTOMLEFT
)) {
963 /* If the width is too small enlarge it to the minimum */
964 if (nMinimumWidth
> (pRC
->right
- pRC
->left
))
965 pRC
->left
= pRC
->right
- nMinimumWidth
;
967 /* If the width is too small enlarge it to the minimum */
968 if (nMinimumWidth
> (pRC
->right
- pRC
->left
))
969 pRC
->right
= pRC
->left
+ nMinimumWidth
;
971 if ((wParam
== WMSZ_TOP
) || (wParam
== WMSZ_TOPLEFT
) || (wParam
== WMSZ_TOPRIGHT
)) {
972 /* If the height is too small enlarge it to the minimum */
973 if (nMinimumHeight
> (pRC
->bottom
- pRC
->top
))
974 pRC
->top
= pRC
->bottom
- nMinimumHeight
;
976 /* If the height is too small enlarge it to the minimum */
977 if (nMinimumHeight
> (pRC
->bottom
- pRC
->top
))
978 pRC
->bottom
= pRC
->top
+ nMinimumHeight
;
983 /* Handle the window sizing in it's own function */
984 OnSize(wParam
, LOWORD(lParam
), HIWORD(lParam
));
988 /* Handle the window moving in it's own function */
989 OnMove(wParam
, LOWORD(lParam
), HIWORD(lParam
));
993 ShowWindow(hDlg
, SW_HIDE
);
994 TrayIcon_ShellRemoveTrayIcon();
995 wp
.length
= sizeof(WINDOWPLACEMENT
);
996 GetWindowPlacement(hDlg
, &wp
);
997 TaskManagerSettings
.Left
= wp
.rcNormalPosition
.left
;
998 TaskManagerSettings
.Top
= wp
.rcNormalPosition
.top
;
999 TaskManagerSettings
.Right
= wp
.rcNormalPosition
.right
;
1000 TaskManagerSettings
.Bottom
= wp
.rcNormalPosition
.bottom
;
1001 if (IsZoomed(hDlg
) || (wp
.flags
& WPF_RESTORETOMAXIMIZED
))
1002 TaskManagerSettings
.Maximized
= TRUE
;
1004 TaskManagerSettings
.Maximized
= FALSE
;
1005 return DefWindowProc(hDlg
, message
, wParam
, lParam
);
1008 /* Refresh the performance data */
1010 RefreshApplicationPage();
1011 RefreshProcessPage();
1012 RefreshPerformancePage();
1013 TrayIcon_ShellUpdateTrayIcon();
1016 case WM_ENTERMENULOOP
:
1017 TaskManager_OnEnterMenuLoop(hDlg
);
1019 case WM_EXITMENULOOP
:
1020 TaskManager_OnExitMenuLoop(hDlg
);
1023 TaskManager_OnMenuSelect(hDlg
, LOWORD(wParam
), HIWORD(wParam
), (HMENU
)lParam
);
1030 int APIENTRY
WinMain(HINSTANCE hInstance
,
1031 HINSTANCE hPrevInstance
,
1037 TOKEN_PRIVILEGES tkp
;
1039 /* Initialize global variables */
1042 /* Change our priority class to HIGH */
1043 hProcess
= OpenProcess(PROCESS_ALL_ACCESS
, FALSE
, GetCurrentProcessId());
1044 SetPriorityClass(hProcess
, HIGH_PRIORITY_CLASS
);
1045 CloseHandle(hProcess
);
1047 /* Now let's get the SE_DEBUG_NAME privilege
1048 * so that we can debug processes
1051 /* Get a token for this process. */
1052 if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES
| TOKEN_QUERY
, &hToken
)) {
1053 /* Get the LUID for the debug privilege. */
1054 LookupPrivilegeValue(NULL
, SE_DEBUG_NAME
, &tkp
.Privileges
[0].Luid
);
1056 tkp
.PrivilegeCount
= 1; /* one privilege to set */
1057 tkp
.Privileges
[0].Attributes
= SE_PRIVILEGE_ENABLED
;
1059 /* Get the debug privilege for this process. */
1060 AdjustTokenPrivileges(hToken
, FALSE
, &tkp
, 0, (PTOKEN_PRIVILEGES
)NULL
, 0);
1063 /* Load our settings from the registry */
1066 /* Initialize perf data */
1067 if (!PerfDataInitialize()) {
1071 DialogBox(hInst
, (LPCTSTR
)IDD_TASKMGR_DIALOG
, NULL
, TaskManagerWndProc
);
1073 /* Save our settings to the registry */
1075 PerfDataUninitialize();