ReactOS  0.4.15-dev-483-ga77a65a
taskmgr.c
Go to the documentation of this file.
1 /*
2  * ReactOS Task Manager
3  *
4  * taskmgr.c : Defines the entry point for the application.
5  *
6  * Copyright (C) 1999 - 2001 Brian Palmer <brianp@reactos.org>
7  * 2005 Klemens Friedl <frik85@reactos.at>
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 Street, Fifth Floor, Boston, MA 02110-1301 USA
22  */
23 
24 #include "precomp.h"
25 
26 #include "perfpage.h"
27 #include "about.h"
28 #include "affinity.h"
29 #include "debug.h"
30 #include "priority.h"
31 
32 #define STATUS_WINDOW 2001
33 
34 /* Global Variables: */
35 HINSTANCE hInst; /* current instance */
36 
37 HWND hMainWnd; /* Main Window */
38 HWND hStatusWnd; /* Status Bar Window */
39 HWND hTabWnd; /* Tab Control Window */
40 
42 
43 int nMinimumWidth; /* Minimum width of the dialog (OnSize()'s cx) */
44 int nMinimumHeight; /* Minimum height of the dialog (OnSize()'s cy) */
45 
46 int nOldWidth; /* Holds the previous client area width */
47 int nOldHeight; /* Holds the previous client area height */
48 
49 BOOL bInMenuLoop = FALSE; /* Tells us if we are in the menu loop */
50 BOOL bWasKeyboardInput = FALSE; /* TabChange by Keyboard or Mouse ? */
51 
53 
55 // Taken from WinSpy++ 1.7
56 // http://www.catch22.net/software/winspy
57 // Copyright (c) 2002 by J Brown
58 //
59 
60 //
61 // Copied from uxtheme.h
62 // If you have this new header, then delete these and
63 // #include <uxtheme.h> instead!
64 //
65 #define ETDT_DISABLE 0x00000001
66 #define ETDT_ENABLE 0x00000002
67 #define ETDT_USETABTEXTURE 0x00000004
68 #define ETDT_ENABLETAB (ETDT_ENABLE | ETDT_USETABTEXTURE)
69 
70 //
71 typedef HRESULT (WINAPI * ETDTProc) (HWND, DWORD);
72 
73 //
74 // Try to call EnableThemeDialogTexture, if uxtheme.dll is present
75 //
77 {
78  HMODULE hUXTheme;
80 
81  hUXTheme = LoadLibraryA("uxtheme.dll");
82 
83  if(hUXTheme)
84  {
86  (ETDTProc)GetProcAddress(hUXTheme, "EnableThemeDialogTexture");
87 
89  {
91 
92  FreeLibrary(hUXTheme);
93  return TRUE;
94  }
95  else
96  {
97  // Failed to locate API!
98  FreeLibrary(hUXTheme);
99  return FALSE;
100  }
101  }
102  else
103  {
104  // Not running under XP? Just fail gracefully
105  return FALSE;
106  }
107 }
108 
110  HINSTANCE hPrevInstance,
111  LPWSTR lpCmdLine,
112  int nCmdShow)
113 {
115  HANDLE hToken;
116  TOKEN_PRIVILEGES tkp;
117  HANDLE hMutex;
118 
119  /* check wether we're already running or not */
120  hMutex = CreateMutexW(NULL, TRUE, L"taskmgrros");
122  {
123  /* Restore existing taskmanager and bring window to front */
124  /* Relies on the fact that the application title string and window title are the same */
125  HWND hTaskMgr;
126  TCHAR szTaskmgr[128];
127 
128  LoadString(hInst, IDS_APP_TITLE, szTaskmgr, sizeof(szTaskmgr)/sizeof(TCHAR));
129  hTaskMgr = FindWindow(NULL, szTaskmgr);
130 
131  if (hTaskMgr != NULL)
132  {
133  SendMessage(hTaskMgr, WM_SYSCOMMAND, SC_RESTORE, 0);
134  SetForegroundWindow(hTaskMgr);
135  }
136 
138  return 0;
139  }
140  else if (!hMutex)
141  {
142  return 1;
143  }
144 
145  /* Initialize global variables */
146  hInst = hInstance;
147 
148  /* Change our priority class to HIGH */
152 
153  /* Now lets get the SE_DEBUG_NAME privilege
154  * so that we can debug processes
155  */
156 
157  /* Get a token for this process. */
159  {
160  /* Get the LUID for the debug privilege. */
162  {
163  tkp.PrivilegeCount = 1; /* one privilege to set */
165 
166  /* Get the debug privilege for this process. */
167  AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
168  }
169  CloseHandle(hToken);
170  }
171 
172  /* Load our settings from the registry */
173  LoadSettings();
174 
175  /* Initialize perf data */
176  if (!PerfDataInitialize())
177  {
178  return -1;
179  }
180 
181  /*
182  * Set our shutdown parameters: we want to shutdown the very last,
183  * without displaying any end task dialog if needed.
184  */
186 
188 
189  /* Save our settings to the registry */
190  SaveSettings();
193  if (hWindowMenu)
195  return 0;
196 }
197 
198 /* Message handler for dialog box. */
201 {
202 #if 0
203  HDC hdc;
204  PAINTSTRUCT ps;
205  RECT rc;
206 #endif
207  LPRECT pRC;
208  LPNMHDR pnmh;
209  WINDOWPLACEMENT wp;
210 
211  switch (message) {
212  case WM_INITDIALOG:
213  // For now, the Help dialog menu item is disabled because of lacking of HTML Help support
215  hMainWnd = hDlg;
216  return OnCreate(hDlg);
217 
218  case WM_COMMAND:
219  if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {
220  EndDialog(hDlg, LOWORD(wParam));
221  return TRUE;
222  }
223  /* Process menu commands */
224  switch (LOWORD(wParam))
225  {
226  case ID_FILE_NEW:
228  break;
231  break;
234  break;
237  break;
240  break;
241  case ID_RESTORE:
243  break;
244  case ID_VIEW_LARGE:
245  case ID_VIEW_SMALL:
246  case ID_VIEW_DETAILS:
248  break;
251  break;
254  break;
257  break;
263  break;
266  break;
267  case ID_VIEW_REFRESH:
268  PostMessageW(hDlg, WM_TIMER, 0, 0);
269  break;
272  break;
275  break;
276  case ID_WINDOWS_MINIMIZE:
278  break;
279  case ID_WINDOWS_MAXIMIZE:
281  break;
282  case ID_WINDOWS_CASCADE:
284  break;
287  break;
290  break;
293  break;
296  break;
299  break;
302  break;
305  break;
308  break;
311  break;
314  break;
317  break;
320  break;
323  break;
326  break;
327 
328 /* ShutDown items */
329  case ID_SHUTDOWN_STANDBY:
331  break;
334  break;
337  break;
338  case ID_SHUTDOWN_REBOOT:
339  ShutDown_Reboot();
340  break;
341  case ID_SHUTDOWN_LOGOFF:
343  break;
346  break;
349  break;
352  break;
355  break;
356 
357  case ID_HELP_ABOUT:
358  OnAbout();
359  break;
360  case ID_FILE_EXIT:
361  EndDialog(hDlg, IDOK);
362  break;
363  }
364  break;
365 
366  case WM_ONTRAYICON:
367  switch(lParam)
368  {
369  case WM_RBUTTONDOWN:
370  {
371  POINT pt;
372  BOOL OnTop;
373  HMENU hMenu, hPopupMenu;
374 
375  GetCursorPos(&pt);
376 
378 
380  hPopupMenu = GetSubMenu(hMenu, 0);
381 
383  {
384  DeleteMenu(hPopupMenu, ID_RESTORE, MF_BYCOMMAND);
385  }
386  else
387  {
388  SetMenuDefaultItem(hPopupMenu, ID_RESTORE, FALSE);
389  }
390 
391  if(OnTop)
392  {
394  } else
395  {
397  }
398 
400  TrackPopupMenuEx(hPopupMenu, 0, pt.x, pt.y, hMainWnd, NULL);
401 
402  DestroyMenu(hMenu);
403  break;
404  }
405  case WM_LBUTTONDBLCLK:
407  break;
408  }
409  break;
410 
411  case WM_NOTIFY:
412  pnmh = (LPNMHDR)lParam;
413  if ((pnmh->hwndFrom == hTabWnd) &&
414  (pnmh->idFrom == IDC_TAB))
415  {
416  switch (pnmh->code)
417  {
418  case TCN_SELCHANGE:
420  break;
421  case TCN_KEYDOWN:
423  break;
424  case NM_CLICK:
426  break;
427  }
428  }
429  break;
430 #if 0
431  case WM_NCPAINT:
432  hdc = GetDC(hDlg);
433  GetClientRect(hDlg, &rc);
435  ReleaseDC(hDlg, hdc);
436  break;
437 
438  case WM_PAINT:
439  hdc = BeginPaint(hDlg, &ps);
440  GetClientRect(hDlg, &rc);
442  EndPaint(hDlg, &ps);
443  break;
444 #endif
445  case WM_SIZING:
446  /* Make sure the user is sizing the dialog */
447  /* in an acceptable range */
448  pRC = (LPRECT)lParam;
449  if ((wParam == WMSZ_LEFT) || (wParam == WMSZ_TOPLEFT) || (wParam == WMSZ_BOTTOMLEFT)) {
450  /* If the width is too small enlarge it to the minimum */
451  if (nMinimumWidth > (pRC->right - pRC->left))
452  pRC->left = pRC->right - nMinimumWidth;
453  } else {
454  /* If the width is too small enlarge it to the minimum */
455  if (nMinimumWidth > (pRC->right - pRC->left))
456  pRC->right = pRC->left + nMinimumWidth;
457  }
458  if ((wParam == WMSZ_TOP) || (wParam == WMSZ_TOPLEFT) || (wParam == WMSZ_TOPRIGHT)) {
459  /* If the height is too small enlarge it to the minimum */
460  if (nMinimumHeight > (pRC->bottom - pRC->top))
461  pRC->top = pRC->bottom - nMinimumHeight;
462  } else {
463  /* If the height is too small enlarge it to the minimum */
464  if (nMinimumHeight > (pRC->bottom - pRC->top))
465  pRC->bottom = pRC->top + nMinimumHeight;
466  }
467  return TRUE;
468  break;
469 
470  case WM_SIZE:
471  /* Handle the window sizing in it's own function */
473  break;
474 
475  case WM_MOVE:
476  /* Handle the window moving in it's own function */
478  break;
479 
480  case WM_DESTROY:
481  ShowWindow(hDlg, SW_HIDE);
483  wp.length = sizeof(WINDOWPLACEMENT);
484  GetWindowPlacement(hDlg, &wp);
489  if (IsZoomed(hDlg) || (wp.flags & WPF_RESTORETOMAXIMIZED))
491  else
493  /* Get rid of the allocated command line cache, if any */
495  if (hWindowMenu)
497  return DefWindowProcW(hDlg, message, wParam, lParam);
498 
499  case WM_TIMER:
500  /* Refresh the performance data */
501  PerfDataRefresh();
506  break;
507 
508  case WM_ENTERMENULOOP:
510  break;
511  case WM_EXITMENULOOP:
513  break;
514  case WM_MENUSELECT:
516  break;
517  case WM_SYSCOLORCHANGE:
518  /* Forward WM_SYSCOLORCHANGE to common controls */
522  break;
523  }
524 
525  return 0;
526 }
527 
529 {
530  SetBkColor(hDC, clr);
531  ExtTextOutW(hDC, 0, 0, ETO_OPAQUE, lpRect, NULL, 0, NULL);
532 }
533 
534 void FillSolidRect2(HDC hDC, int x, int y, int cx, int cy, COLORREF clr)
535 {
536  RECT rect;
537 
538  SetBkColor(hDC, clr);
539  rect.left = x;
540  rect.top = y;
541  rect.right = x + cx;
542  rect.bottom = y + cy;
543  ExtTextOutW(hDC, 0, 0, ETO_OPAQUE, &rect, NULL, 0, NULL);
544 }
545 
546 void Draw3dRect(HDC hDC, int x, int y, int cx, int cy, COLORREF clrTopLeft, COLORREF clrBottomRight)
547 {
548  FillSolidRect2(hDC, x, y, cx - 1, 1, clrTopLeft);
549  FillSolidRect2(hDC, x, y, 1, cy - 1, clrTopLeft);
550  FillSolidRect2(hDC, x + cx, y, -1, cy, clrBottomRight);
551  FillSolidRect2(hDC, x, y + cy, cx, -1, clrBottomRight);
552 }
553 
554 void Draw3dRect2(HDC hDC, LPRECT lpRect, COLORREF clrTopLeft, COLORREF clrBottomRight)
555 {
556  Draw3dRect(hDC, lpRect->left, lpRect->top, lpRect->right - lpRect->left,
557  lpRect->bottom - lpRect->top, clrTopLeft, clrBottomRight);
558 }
559 
561 {
562  /* Setup update speed (pause=fall down) */
565  SetTimer(hWnd, 1, 1000, NULL);
566  break;
568  SetTimer(hWnd, 1, 2000, NULL);
569  break;
571  SetTimer(hWnd, 1, 4000, NULL);
572  break;
573  }
574 }
575 
577 {
578  HMENU hMenu;
579  HMENU hEditMenu;
580  HMENU hViewMenu;
581  HMENU hShutMenu;
582  HMENU hUpdateSpeedMenu;
583  HMENU hCPUHistoryMenu;
584  int nActivePage;
585  int nParts[3];
586  RECT rc;
587  WCHAR szTemp[256];
588  WCHAR szLogOffItem[MAX_PATH];
589  LPWSTR lpUserName;
590  TCITEM item;
591  DWORD len = 0;
592 
594 
595  /* Initialize the Windows Common Controls DLL */
597 
598  /* Get the minimum window sizes */
599  GetWindowRect(hWnd, &rc);
600  nMinimumWidth = (rc.right - rc.left);
601  nMinimumHeight = (rc.bottom - rc.top);
602 
603  /* Create the status bar */
605  if(!hStatusWnd)
606  return FALSE;
607 
608  /* Create the status bar panes */
609  nParts[0] = STATUS_SIZE1;
610  nParts[1] = STATUS_SIZE2;
611  nParts[2] = STATUS_SIZE3;
613 
614  /* Create tab pages */
616 #if 1
620 #else
624 #endif
625 
626  /* Insert tabs */
627  LoadStringW(hInst, IDS_TAB_APPS, szTemp, 256);
628  memset(&item, 0, sizeof(TCITEM));
629  item.mask = TCIF_TEXT;
630  item.pszText = szTemp;
632  LoadStringW(hInst, IDS_TAB_PROCESSES, szTemp, 256);
633  memset(&item, 0, sizeof(TCITEM));
634  item.mask = TCIF_TEXT;
635  item.pszText = szTemp;
637  LoadStringW(hInst, IDS_TAB_PERFORMANCE, szTemp, 256);
638  memset(&item, 0, sizeof(TCITEM));
639  item.mask = TCIF_TEXT;
640  item.pszText = szTemp;
642 
643  /* Size everything correctly */
644  GetClientRect(hWnd, &rc);
645  nOldWidth = rc.right;
646  nOldHeight = rc.bottom;
647  /* nOldStartX = rc.left; */
648  /*nOldStartY = rc.top; */
649 
650 #define PAGE_OFFSET_LEFT 17
651 #define PAGE_OFFSET_TOP 72
652 #define PAGE_OFFSET_WIDTH (PAGE_OFFSET_LEFT*2)
653 #define PAGE_OFFSET_HEIGHT (PAGE_OFFSET_TOP+32)
654 
655  if ((TaskManagerSettings.Left != 0) ||
656  (TaskManagerSettings.Top != 0) ||
657  (TaskManagerSettings.Right != 0) ||
659  {
661 #ifdef __GNUC__TEST__
665 #endif
666  }
669 
670  /* Set the always on top style */
671  hMenu = GetMenu(hWnd);
672  hEditMenu = GetSubMenu(hMenu, 1);
673  hViewMenu = GetSubMenu(hMenu, 2);
674  hShutMenu = GetSubMenu(hMenu, 4);
675  hUpdateSpeedMenu = GetSubMenu(hViewMenu, 1);
676  hCPUHistoryMenu = GetSubMenu(hViewMenu, 7);
677 
678  /* Check or uncheck the always on top menu item */
682  } else {
685  }
686 
687  /* Check or uncheck the minimize on use menu item */
690  else
692 
693  /* Check or uncheck the hide when minimized menu item */
696  else
698 
699  /* Check or uncheck the show 16-bit tasks menu item */
702  else
704 
705  /* Set the view mode */
707 
710  else
712 
714 
717  else
719 
720  nActivePage = TaskManagerSettings.ActiveTabPage;
721  TabCtrl_SetCurFocus/*Sel*/(hTabWnd, 0);
722  TabCtrl_SetCurFocus/*Sel*/(hTabWnd, 1);
723  TabCtrl_SetCurFocus/*Sel*/(hTabWnd, 2);
724  TabCtrl_SetCurFocus/*Sel*/(hTabWnd, nActivePage);
725 
726  /* Set the username in the "Log Off %s" item of the Shutdown menu */
727 
728  /* 1- Get the menu item text and store it temporarily */
729  GetMenuStringW(hShutMenu, ID_SHUTDOWN_LOGOFF, szTemp, 256, MF_BYCOMMAND);
730 
731  /* 2- Retrieve the username length first, then allocate a buffer for it and call it again */
733  {
734  lpUserName = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len * sizeof(WCHAR));
735  if (lpUserName && GetUserNameW(lpUserName, &len))
736  {
737  _snwprintf(szLogOffItem, sizeof(szLogOffItem)/sizeof(szLogOffItem[0]), szTemp, lpUserName);
738  szLogOffItem[sizeof(szLogOffItem)/sizeof(szLogOffItem[0]) - 1] = UNICODE_NULL;
739  }
740  else
741  {
742  _snwprintf(szLogOffItem, sizeof(szLogOffItem)/sizeof(szLogOffItem[0]), szTemp, L"n/a");
743  }
744 
745  if (lpUserName) HeapFree(GetProcessHeap(), 0, lpUserName);
746  }
747  else
748  {
749  _snwprintf(szLogOffItem, sizeof(szLogOffItem)/sizeof(szLogOffItem[0]), szTemp, L"n/a");
750  }
751 
752  /* 3- Set the menu item text to its formatted counterpart */
754 
755  /* Setup update speed */
757 
758  /*
759  * Refresh the performance data
760  * Sample it twice so we can establish
761  * the delta values & cpu usage
762  */
763  PerfDataRefresh();
764  PerfDataRefresh();
765 
769 
771 
772  return TRUE;
773 }
774 
775 /* OnMove()
776  * This function handles all the moving events for the application
777  * It moves every child window that needs moving
778  */
779 void OnMove( WPARAM nType, int cx, int cy )
780 {
781 #ifdef __GNUC__TEST__
785 #endif
786 }
787 
788 /* OnSize()
789  * This function handles all the sizing events for the application
790  * It re-sizes every window, and child window that needs re-sizing
791  */
792 void OnSize( WPARAM nType, int cx, int cy )
793 {
794  int nParts[3];
795  int nXDifference;
796  int nYDifference;
797  RECT rc;
798 
799  if (nType == SIZE_MINIMIZED)
800  {
802  {
804  }
805  return;
806  }
807 
808  nXDifference = cx - nOldWidth;
809  nYDifference = cy - nOldHeight;
810  nOldWidth = cx;
811  nOldHeight = cy;
812 
813  /* Update the status bar size */
816 
817  /* Update the status bar pane sizes */
818  nParts[0] = bInMenuLoop ? -1 : STATUS_SIZE1;
819  nParts[1] = STATUS_SIZE2;
820  nParts[2] = cx;
822 
823  /* Resize the tab control */
824  GetWindowRect(hTabWnd, &rc);
825  cx = (rc.right - rc.left) + nXDifference;
826  cy = (rc.bottom - rc.top) + nYDifference;
828 
829  /* Resize the application page */
831  cx = (rc.right - rc.left) + nXDifference;
832  cy = (rc.bottom - rc.top) + nYDifference;
834 
835  /* Resize the process page */
837  cx = (rc.right - rc.left) + nXDifference;
838  cy = (rc.bottom - rc.top) + nYDifference;
840 
841  /* Resize the performance page */
843  cx = (rc.right - rc.left) + nXDifference;
844  cy = (rc.bottom - rc.top) + nYDifference;
846 }
847 
848 void LoadSettings(void)
849 {
850  HKEY hKey;
851  WCHAR szSubKey[] = L"Software\\ReactOS\\TaskManager";
852  int i;
853  DWORD dwSize;
854 
855  /* Window size & position settings */
861 
862  /* Tab settings */
864 
865  /* Options menu settings */
870 
871  /* Update speed settings */
873 
874  /* Applications page settings */
876 
877  /* Processes page settings */
879 
880  for (i = 0; i < COLUMN_NMAX; i++) {
884  }
885 
888 
889  /* Performance page settings */
892 
893  /* Open the key */
894  if (RegOpenKeyExW(HKEY_CURRENT_USER, szSubKey, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
895  return;
896  /* Read the settings */
897  dwSize = sizeof(TASKMANAGER_SETTINGS);
898  RegQueryValueExW(hKey, L"Preferences", NULL, NULL, (LPBYTE)&TaskManagerSettings, &dwSize);
899 
900  /*
901  * ATM, the 'ImageName' column is always visible
902  * (and grayed in configuration dialog)
903  * This will avoid troubles if the registry gets corrupted.
904  */
905  TaskManagerSettings.Column_ImageName = TRUE;
906 
907  /* Close the key */
908  RegCloseKey(hKey);
909 }
910 
911 void SaveSettings(void)
912 {
913  HKEY hKey;
914  WCHAR szSubKey[] = L"Software\\ReactOS\\TaskManager";
915 
916  /* Open (or create) the key */
918  return;
919  /* Save the settings */
920  RegSetValueExW(hKey, L"Preferences", 0, REG_BINARY, (LPBYTE)&TaskManagerSettings, sizeof(TASKMANAGER_SETTINGS));
921  /* Close the key */
922  RegCloseKey(hKey);
923 }
924 
926 {
927  //HMENU hMenu, hOptionsMenu;
928  BOOL OnTop;
929 
930  //hMenu = GetMenu(hMainWnd);
931  //hOptionsMenu = GetSubMenu(hMenu, OPTIONS_MENU_INDEX);
933 
937 }
938 
940 {
941  int nParts;
942 
943  /* Update the status bar pane sizes */
944  nParts = -1;
946  bInMenuLoop = TRUE;
948 }
949 
951 {
952  RECT rc;
953  int nParts[3];
954 
955  bInMenuLoop = FALSE;
956 
957  /* Update the status bar pane sizes */
958  GetClientRect(hWnd, &rc);
959  nParts[0] = STATUS_SIZE1;
960  nParts[1] = STATUS_SIZE2;
961  nParts[2] = rc.right;
963 
964  /* trigger update of status bar columns and performance page asynchronously */
966 }
967 
968 void TaskManager_OnMenuSelect(HWND hWnd, UINT nItemID, UINT nFlags, HMENU hSysMenu)
969 {
970  WCHAR str[100];
971 
972  wcscpy(str, L"");
973  if (LoadStringW(hInst, nItemID, str, 100)) {
974  /* load appropriate string */
975  LPWSTR lpsz = str;
976  /* first newline terminates actual string */
977  lpsz = wcschr(lpsz, '\n');
978  if (lpsz != NULL)
979  *lpsz = '\0';
980  }
982 }
983 
985 {
986  HMENU hMenu;
987  HMENU hViewMenu;
988  HMENU hUpdateSpeedMenu;
989 
990  hMenu = GetMenu(hMainWnd);
991  hViewMenu = GetSubMenu(hMenu, 2);
992  hUpdateSpeedMenu = GetSubMenu(hViewMenu, 1);
993 
996 
997  KillTimer(hMainWnd, 1);
998 
1000 }
1001 
1003 {
1004  int i;
1005  HMENU hMenu;
1006  HMENU hOptionsMenu;
1007  HMENU hViewMenu;
1008  HMENU hSubMenu;
1009  WCHAR szTemp[256];
1010  SYSTEM_INFO sysInfo;
1011 
1012  hMenu = GetMenu(hMainWnd);
1013  hViewMenu = GetSubMenu(hMenu, 2);
1014  hOptionsMenu = GetSubMenu(hMenu, 1);
1016  for (i = GetMenuItemCount(hViewMenu) - 1; i > 2; i--) {
1017  hSubMenu = GetSubMenu(hViewMenu, i);
1018  if (hSubMenu)
1019  DestroyMenu(hSubMenu);
1020  RemoveMenu(hViewMenu, i, MF_BYPOSITION);
1021  }
1022  RemoveMenu(hOptionsMenu, 3, MF_BYPOSITION);
1023  if (hWindowMenu)
1026  case 0:
1031 
1032  LoadStringW(hInst, IDS_MENU_LARGEICONS, szTemp, 256);
1033  AppendMenuW(hViewMenu, MF_STRING, ID_VIEW_LARGE, szTemp);
1034 
1035  LoadStringW(hInst, IDS_MENU_SMALLICONS, szTemp, 256);
1036  AppendMenuW(hViewMenu, MF_STRING, ID_VIEW_SMALL, szTemp);
1037 
1038  LoadStringW(hInst, IDS_MENU_DETAILS, szTemp, 256);
1039  AppendMenuW(hViewMenu, MF_STRING, ID_VIEW_DETAILS, szTemp);
1040 
1041  if (GetMenuItemCount(hMenu) <= 5) {
1043 
1044  LoadStringW(hInst, IDS_MENU_WINDOWS, szTemp, 256);
1045  InsertMenuW(hMenu, 3, MF_BYPOSITION|MF_POPUP, (UINT_PTR) hWindowMenu, szTemp);
1046 
1048  }
1050 
1051  /*
1052  * Give the application list control focus
1053  */
1054  if (!bWasKeyboardInput)
1056  break;
1057 
1058  case 1:
1063 
1064  LoadStringW(hInst, IDS_MENU_SELECTCOLUMNS, szTemp, 256);
1065  AppendMenuW(hViewMenu, MF_STRING, ID_VIEW_SELECTCOLUMNS, szTemp);
1066 
1067  LoadStringW(hInst, IDS_MENU_16BITTASK, szTemp, 256);
1068  AppendMenuW(hOptionsMenu, MF_STRING, ID_OPTIONS_SHOW16BITTASKS, szTemp);
1069 
1072  if (GetMenuItemCount(hMenu) > 5)
1073  {
1074  DeleteMenu(hMenu, 3, MF_BYPOSITION);
1076  }
1077  /*
1078  * Give the process list control focus
1079  */
1080  if (!bWasKeyboardInput)
1082  break;
1083 
1084  case 2:
1089  if (GetMenuItemCount(hMenu) > 5) {
1090  DeleteMenu(hMenu, 3, MF_BYPOSITION);
1092  }
1093 
1094  GetSystemInfo(&sysInfo);
1095 
1096  /* Hide CPU graph options on single CPU systems */
1097  if (sysInfo.dwNumberOfProcessors > 1)
1098  {
1099  hSubMenu = CreatePopupMenu();
1100 
1103 
1104  LoadStringW(hInst, IDS_MENU_ONEGRAPHPERCPU, szTemp, 256);
1106 
1107  LoadStringW(hInst, IDS_MENU_CPUHISTORY, szTemp, 256);
1108  AppendMenuW(hViewMenu, MF_STRING|MF_POPUP, (UINT_PTR) hSubMenu, szTemp);
1109 
1112  else
1114  }
1115 
1117  AppendMenuW(hViewMenu, MF_STRING, ID_VIEW_SHOWKERNELTIMES, szTemp);
1118 
1121  else
1123 
1124  /*
1125  * Give the tab control focus
1126  */
1127  if (!bWasKeyboardInput)
1128  SetFocus(hTabWnd);
1129  break;
1130  }
1131 }
1132 
1134 {
1135  LPWSTR lpMessageBuffer;
1136 
1138  NULL,
1139  dwError,
1141  (LPWSTR)&lpMessageBuffer,
1142  0, NULL) != 0)
1143  {
1144  MessageBoxW(hMainWnd, lpMessageBuffer, NULL, MB_OK | MB_ICONERROR);
1145  if (lpMessageBuffer) LocalFree(lpMessageBuffer);
1146  }
1147 }
1148 
1150 {
1151  DWORD dwRet;
1152  LPWSTR lpszTemp = NULL;
1153 
1155  NULL,
1156  GetLastError(),
1157  LANG_NEUTRAL,
1158  (LPWSTR)&lpszTemp,
1159  0,
1160  NULL );
1161 
1162  /* supplied buffer is not long enough */
1163  if (!dwRet || ( (long)dwSize < (long)dwRet+14)) {
1164  lpszBuf[0] = L'\0';
1165  } else {
1166  lpszTemp[lstrlenW(lpszTemp)-2] = L'\0'; /*remove cr and newline character */
1167  wsprintfW(lpszBuf, L"%s (0x%x)", lpszTemp, (int)GetLastError());
1168  }
1169  if (lpszTemp) {
1170  LocalFree((HLOCAL)lpszTemp);
1171  }
1172  return lpszBuf;
1173 }
1174 
1176 {
1177  DWORD dwExitCodeThread = 0;
1178 
1179  if (*hThread != NULL) {
1180  PostThreadMessage(dwThread,WM_QUIT,0,0);
1181  for (;;) {
1182  MSG msg;
1183 
1185  break;
1186  while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
1188  DispatchMessage(&msg);
1189  }
1190  }
1191  GetExitCodeThread(*hThread, &dwExitCodeThread);
1192  CloseHandle(*hThread);
1193  *hThread = NULL;
1194  }
1195  return dwExitCodeThread;
1196 }
1197 
void ApplicationPage_OnWindowsCascade(void)
Definition: applpage.c:815
INT_PTR CALLBACK ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
Definition: applpage.c:110
#define IDS_MENU_DETAILS
Definition: resource.h:232
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
HINSTANCE hInst
Definition: taskmgr.c:35
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define ID_SHUTDOWN_SWITCHUSER
Definition: resource.h:188
BOOL WINAPI ExtTextOutW(_In_ HDC hdc, _In_ int x, _In_ int y, _In_ UINT options, _In_opt_ const RECT *lprect, _In_reads_opt_(c) LPCWSTR lpString, _In_ UINT c, _In_reads_opt_(c) const INT *lpDx)
#define STATUS_SIZE3
Definition: taskmgr.h:51
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
#define HRESULT
Definition: msvc.h:7
#define IDR_WINDOWSMENU
Definition: resource.h:16
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1608
#define DispatchMessage
Definition: winuser.h:5740
#define COLOR_3DHILIGHT
Definition: winuser.h:927
BOOL WINAPI TranslateMessage(_In_ const MSG *)
Definition: tftpd.h:59
#define REALTIME_PRIORITY_CLASS
Definition: winbase.h:184
#define ID_VIEW_DETAILS
Definition: resource.h:36
#define PeekMessage
Definition: winuser.h:5805
#define TRUE
Definition: types.h:120
#define IDR_TRAY_POPUP
Definition: resource.h:22
#define IDOK
Definition: winuser.h:824
#define CloseHandle
Definition: compat.h:407
HWND hApplicationPage
Definition: applpage.c:34
#define COLUMN_NMAX
Definition: column.h:51
#define ID_OPTIONS_HIDEWHENMINIMIZED
Definition: resource.h:140
BOOL WINAPI LookupPrivilegeValueW(LPCWSTR lpSystemName, LPCWSTR lpPrivilegeName, PLUID lpLuid)
Definition: misc.c:782
#define PAGE_OFFSET_LEFT
BOOL WINAPI DrawMenuBar(_In_ HWND)
#define IDS_MENU_SHOWKERNELTIMES
Definition: resource.h:236
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
BOOL WINAPI ModifyMenuW(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT_PTR, _In_opt_ LPCWSTR)
#define IDD_TASKMGR_DIALOG
Definition: resource.h:4
#define ID_RESTORE
Definition: resource.h:168
#define MF_BYCOMMAND
Definition: winuser.h:202
struct _WINDOWPLACEMENT WINDOWPLACEMENT
#define FindWindow
Definition: winuser.h:5752
#define SC_RESTORE
Definition: winuser.h:2573
#define PROCESS_ALL_ACCESS
Definition: nt_native.h:1324
#define ERROR_SUCCESS
Definition: deptool.c:10
void OnAbout(void)
Definition: about.c:25
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define IDS_MENU_ONEGRAPHALLCPUS
Definition: resource.h:233
#define IDC_TAB
Definition: resource.h:12
void OnMove(WPARAM nType, int cx, int cy)
Definition: taskmgr.c:779
BOOL WINAPI InsertMenuW(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT_PTR, _In_opt_ LPCWSTR)
#define STATUS_SIZE2
Definition: taskmgr.h:50
void Draw3dRect(HDC hDC, int x, int y, int cx, int cy, COLORREF clrTopLeft, COLORREF clrBottomRight)
Definition: taskmgr.c:546
#define ID_PROCESS_PAGE_SETPRIORITY_NORMAL
Definition: resource.h:179
HDC WINAPI GetDC(_In_opt_ HWND)
#define REG_BINARY
Definition: nt_native.h:1496
#define KEY_READ
Definition: nt_native.h:1023
#define pt(x, y)
Definition: drawing.c:79
#define SW_HIDE
Definition: winuser.h:762
void TaskManager_OnViewUpdateSpeed(DWORD dwSpeed)
Definition: taskmgr.c:984
#define LANG_NEUTRAL
Definition: nls.h:22
BOOL WINAPI CheckMenuRadioItem(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT, _In_ UINT)
#define HKEY_CURRENT_USER
Definition: winreg.h:11
void ProcessPage_OnEndProcessTree(void)
Definition: endproc.c:161
#define FORMAT_MESSAGE_ARGUMENT_ARRAY
Definition: winbase.h:405
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
#define MAKELPARAM(l, h)
Definition: winuser.h:3983
HWND hTabWnd
Definition: taskmgr.c:39
#define ID_OPTIONS_ALWAYSONTOP
Definition: resource.h:138
#define SUBLANG_DEFAULT
Definition: nls.h:168
#define ID_SHUTDOWN_POWEROFF
Definition: resource.h:185
BOOL WINAPI TrackPopupMenuEx(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _In_ HWND, _In_opt_ LPTPMPARAMS)
#define ID_SHUTDOWN_DISCONNECT
Definition: resource.h:190
void DoSetPriority(DWORD priority)
Definition: priority.c:26
static HDC
Definition: imagelist.c:92
#define ID_APPLICATION_PAGE_GOTOPROCESS
Definition: resource.h:170
#define CALLBACK
Definition: compat.h:27
#define MF_STRING
Definition: winuser.h:138
HWND hWnd
Definition: settings.c:17
#define WM_QUIT
Definition: winuser.h:1605
BOOL HideWhenMinimized
Definition: taskmgr.h:68
VOID ShutDown_LogOffUser(VOID)
Definition: shutdown.c:170
LONG top
Definition: windef.h:307
BOOL PerfDataInitialize(void)
Definition: perfdata.c:64
#define ID_HELP_TOPICS
Definition: resource.h:155
#define ID_VIEW_UPDATESPEED_HIGH
Definition: resource.h:145
HANDLE HWND
Definition: compat.h:13
BOOL WINAPI SetPriorityClass(IN HANDLE hProcess, IN DWORD dwPriorityClass)
Definition: proc.c:1694
$ULONG PrivilegeCount
Definition: setypes.h:969
int ColumnSizeArray[COLUMN_NMAX]
Definition: taskmgr.h:82
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define WM_MOVE
Definition: winuser.h:1592
VOID ShutDown_PowerOff(VOID)
Definition: shutdown.c:115
#define GWL_EXSTYLE
Definition: winuser.h:845
#define HWND_TOPMOST
Definition: winuser.h:1194
#define HWND_TOP
Definition: winuser.h:1193
BOOL OnCreate(HWND hWnd)
Definition: taskmgr.c:576
void PerformancePage_OnViewCPUHistoryOneGraphPerCPU(void)
Definition: perfpage.c:518
_In_ BOOL _In_ HANDLE hProcess
Definition: mapping.h:70
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
int nMinimumHeight
Definition: taskmgr.c:44
#define ID_WINDOWS_MAXIMIZE
Definition: resource.h:152
HWND WINAPI SetFocus(_In_opt_ HWND)
#define WMSZ_TOP
Definition: winuser.h:2441
#define TabCtrl_GetCurSel(hwnd)
Definition: commctrl.h:4059
VOID ShutDown_EjectComputer(VOID)
Definition: shutdown.c:194
UINT_PTR WPARAM
Definition: windef.h:207
#define WPF_RESTORETOMAXIMIZED
Definition: winuser.h:2507
#define ID_OPTIONS_SHOW16BITTASKS
Definition: resource.h:158
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
Definition: taskmgr.c:109
#define WS_CHILD
Definition: pedump.c:617
#define TCIF_TEXT
Definition: commctrl.h:3967
#define ID_PROCESS_PAGE_SETPRIORITY_HIGH
Definition: resource.h:177
void RefreshProcessPage(void)
Definition: procpage.c:408
#define GetWindowLongPtrW
Definition: winuser.h:4804
LONG left
Definition: windef.h:306
#define SWP_NOZORDER
Definition: winuser.h:1232
#define NORMAL_PRIORITY_CLASS
Definition: winbase.h:181
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
int32_t INT_PTR
Definition: typedefs.h:63
void FillSolidRect2(HDC hDC, int x, int y, int cx, int cy, COLORREF clr)
Definition: taskmgr.c:534
DWORD EndLocalThread(HANDLE *hThread, DWORD dwThread)
Definition: taskmgr.c:1175
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:2635
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
LONG right
Definition: windef.h:308
void PerfDataUninitialize(void)
Definition: perfdata.c:85
HWND hApplicationPageListCtrl
Definition: applpage.c:35
#define lstrlenW
Definition: compat.h:416
HWND hPerformancePage
Definition: perfpage.c:31
#define PAGE_OFFSET_HEIGHT
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define DWORD
Definition: nt_native.h:44
DWORD WINAPI GetSysColor(_In_ int)
void ApplicationPage_OnWindowsMinimize(void)
Definition: applpage.c:773
BOOL TrayIcon_ShellUpdateTrayIcon(void)
Definition: trayicon.c:177
& rect
Definition: startmenu.cpp:1413
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
WPARAM wParam
Definition: combotst.c:138
#define ID_WINDOWS_TILEVERTICALLY
Definition: resource.h:150
struct tagNMHDR * LPNMHDR
#define COLOR_3DSHADOW
Definition: winuser.h:921
static void SetUpdateSpeed(HWND hWnd)
Definition: taskmgr.c:560
HWND hStatusWnd
Definition: taskmgr.c:38
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1091
#define ID_PROCESS_PAGE_ENDPROCESS
Definition: resource.h:172
#define WMSZ_TOPLEFT
Definition: winuser.h:2442
#define ABOVE_NORMAL_PRIORITY_CLASS
Definition: winbase.h:191
BOOL WINAPI AppendMenuW(_In_ HMENU, _In_ UINT, _In_ UINT_PTR, _In_opt_ LPCWSTR)
#define ID_SHUTDOWN_HIBERNATE
Definition: resource.h:184
BOOL WINAPI SetProcessShutdownParameters(IN DWORD dwLevel, IN DWORD dwFlags)
Definition: proc.c:949
UINT code
Definition: winuser.h:3134
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
Definition: dc.c:975
#define WM_NCPAINT
Definition: winuser.h:1669
BOOL WINAPI GetExitCodeThread(IN HANDLE hThread, OUT LPDWORD lpExitCode)
Definition: thread.c:540
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
void ProcessPage_OnDebug(void)
Definition: debug.c:26
#define SE_PRIVILEGE_ENABLED
Definition: setypes.h:63
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HINSTANCE hInstance
Definition: charmap.c:20
HRESULT(WINAPI * ETDTProc)(HWND, DWORD)
Definition: taskmgr.c:71
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:53
int WINAPI GetMenuStringW(_In_ HMENU hMenu, _In_ UINT uIDItem, _Out_writes_opt_(cchMax) LPWSTR lpString, _In_ int cchMax, _In_ UINT flags)
#define ETO_OPAQUE
Definition: wingdi.h:646
#define UNICODE_NULL
#define ID_PROCESS_PAGE_SETPRIORITY_REALTIME
Definition: resource.h:176
unsigned int BOOL
Definition: ntddk_ex.h:94
#define ID_OPTIONS_MINIMIZEONUSE
Definition: resource.h:139
#define ID_VIEW_CPUHISTORY_ONEGRAPHALL
Definition: resource.h:162
#define ETDT_ENABLETAB
Definition: taskmgr.c:68
#define CreateStatusWindow
Definition: commctrl.h:1929
#define WM_ENTERMENULOOP
Definition: winuser.h:1786
#define MF_BYPOSITION
Definition: winuser.h:203
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define ID_FILE_EXIT
Definition: resource.h:46
BOOL TrayIcon_ShellRemoveTrayIcon(void)
Definition: trayicon.c:159
UINT_PTR idFrom
Definition: winuser.h:3133
#define MDITILE_HORIZONTAL
Definition: winuser.h:2163
HWND hProcessPageHeaderCtrl
Definition: procpage.c:39
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define WM_MENUSELECT
Definition: winuser.h:1729
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:400
int WINAPI GetMenuItemCount(_In_opt_ HMENU)
int nOldWidth
Definition: taskmgr.c:46
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:581
#define WM_SIZING
Definition: winuser.h:1789
#define ID_HELP_ABOUT
Definition: resource.h:78
BOOL WINAPI BringWindowToTop(_In_ HWND)
const WCHAR * str
#define HIGH_PRIORITY_CLASS
Definition: winbase.h:183
#define ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU
Definition: resource.h:163
VOID ShutDown_Disconnect(VOID)
Definition: shutdown.c:189
const PresetColumnEntry ColumnPresets[COLUMN_NMAX]
Definition: column.c:31
#define WM_EXITMENULOOP
Definition: winuser.h:1787
VOID ShutDown_Hibernate(VOID)
Definition: shutdown.c:88
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
void ProcessPage_OnEndProcess(void)
Definition: endproc.c:30
smooth NULL
Definition: ftsmooth.c:416
#define ID_VIEW_UPDATESPEED_LOW
Definition: resource.h:147
#define ID_PROCESS_PAGE_SETAFFINITY
Definition: resource.h:175
void Draw3dRect2(HDC hDC, LPRECT lpRect, COLORREF clrTopLeft, COLORREF clrBottomRight)
Definition: taskmgr.c:554
LONG_PTR LPARAM
Definition: windef.h:208
#define LPRECT
Definition: precomp.h:28
void ProcessPage_OnSetAffinity(void)
Definition: affinity.c:41
#define ID_SHUTDOWN_STANDBY
Definition: resource.h:183
HANDLE hMutex
Definition: mutex.c:11
#define SW_SHOW
Definition: winuser.h:769
#define IDD_APPLICATION_PAGE
Definition: resource.h:8
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:404
#define IDD_PROCESS_PAGE
Definition: resource.h:14
BOOL WINAPI GetWindowPlacement(_In_ HWND, _Inout_ WINDOWPLACEMENT *)
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
#define DialogBoxW(i, t, p, f)
Definition: winuser.h:4374
#define WM_DESTROY
Definition: winuser.h:1591
#define ID_FILE_NEW
Definition: resource.h:40
#define WM_RBUTTONDOWN
Definition: winuser.h:1761
void SaveSettings(void)
Definition: taskmgr.c:911
void ApplicationPage_OnWindowsTile(DWORD dwMode)
Definition: applpage.c:742
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
#define MF_CHECKED
Definition: winuser.h:132
void OnSize(WPARAM nType, int cx, int cy)
Definition: taskmgr.c:792
#define KEY_WRITE
Definition: nt_native.h:1031
#define STATUS_SIZE1
Definition: taskmgr.h:49
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4895
char TCHAR
Definition: xmlstorage.h:189
#define TCN_SELCHANGE
Definition: commctrl.h:4128
int nOldHeight
Definition: taskmgr.c:47
#define ID_VIEW_REFRESH
Definition: resource.h:59
BOOL bWasKeyboardInput
Definition: taskmgr.c:50
void ApplicationPage_OnView(DWORD dwMode)
Definition: applpage.c:728
void TaskManager_OnRestoreMainWindow(void)
Definition: taskmgr.c:925
BOOL WINAPI GetUserNameW(LPWSTR lpszName, LPDWORD lpSize)
Definition: misc.c:291
#define FreeLibrary(x)
Definition: compat.h:414
#define ID_PROCESS_PAGE_DEBUG
Definition: resource.h:174
void RefreshApplicationPage(void)
Definition: applpage.c:247
#define IDLE_PRIORITY_CLASS
Definition: winbase.h:182
#define WAIT_OBJECT_0
Definition: winbase.h:387
#define GetProcessHeap()
Definition: compat.h:404
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define ID_SHUTDOWN_EJECT_COMPUTER
Definition: resource.h:191
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
#define TOKEN_QUERY
Definition: setypes.h:874
#define COLUMN_IMAGENAME
Definition: column.h:25
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4116
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
#define ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL
Definition: resource.h:180
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
void ApplicationPage_OnEndTask(void)
Definition: applpage.c:905
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define WM_SIZE
Definition: winuser.h:1593
#define MDITILE_VERTICAL
Definition: winuser.h:2164
BOOL WINAPI DeleteMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
#define SWP_NOACTIVATE
Definition: winuser.h:1227
DWORD COLORREF
Definition: windef.h:300
BOOL WINAPI OpenIcon(_In_ HWND)
#define WM_TIMER
Definition: winuser.h:1724
HANDLE WINAPI GetCurrentProcess(VOID)
Definition: proc.c:1138
void RefreshPerformancePage(void)
Definition: perfpage.c:306
BOOL bDefaults
Definition: column.h:76
#define PostThreadMessage
Definition: winuser.h:5808
#define MAX_PATH
Definition: compat.h:26
static ETDTProc fnEnableThemeDialogTexture
Definition: uxthemesupp.c:15
#define WINAPI
Definition: msvc.h:6
#define ID_VIEW_SHOWKERNELTIMES
Definition: resource.h:161
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL Columns[COLUMN_NMAX]
Definition: taskmgr.h:80
DWORD WINAPI CheckMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define SIZE_MINIMIZED
Definition: winuser.h:2481
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
#define IDI_TASKMANAGER
Definition: resource.h:17
#define WM_PAINT
Definition: winuser.h:1602
#define ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL
Definition: resource.h:178
#define IDS_MENU_SMALLICONS
Definition: resource.h:231
BOOL ShowProcessesFromAllUsers
Definition: taskmgr.h:79
void ApplicationPage_OnGotoProcess(void)
Definition: applpage.c:929
VOID ShutDown_StandBy(VOID)
Definition: shutdown.c:61
#define IDS_MENU_ONEGRAPHPERCPU
Definition: resource.h:234
void PerfDataDeallocCommandLineCache()
Definition: perfdata.c:659
#define WM_ONTRAYICON
Definition: trayicon.h:25
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
#define MF_POPUP
Definition: winuser.h:136
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
static const WCHAR L[]
Definition: oid.c:1250
HDC hdc
Definition: main.c:9
#define IDS_MENU_LARGEICONS
Definition: resource.h:230
#define SB_SETTEXT
Definition: commctrl.h:1945
#define MB_ICONERROR
Definition: winuser.h:781
#define ID_VIEW_SELECTCOLUMNS
Definition: resource.h:160
#define CreateDialogW(h, n, w, f)
Definition: winuser.h:4256
INT_PTR CALLBACK TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
Definition: taskmgr.c:200
GLenum GLsizei len
Definition: glext.h:6722
#define WM_LBUTTONDBLCLK
Definition: winuser.h:1760
#define WS_EX_TOPMOST
Definition: pedump.c:647
#define ID_VIEW_UPDATESPEED_PAUSED
Definition: resource.h:148
VOID ShutDown_LockComputer(VOID)
Definition: shutdown.c:182
void ApplicationPage_OnWindowsBringToFront(void)
Definition: applpage.c:844
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
void PerformancePage_OnViewShowKernelTimes(void)
Definition: perfpage.c:481
#define WM_COMMAND
Definition: winuser.h:1722
#define IDS_MENU_CPUHISTORY
Definition: resource.h:235
HWND hwndFrom
Definition: winuser.h:3132
INT_PTR CALLBACK PerformancePageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
Definition: perfpage.c:113
#define MF_UNCHECKED
Definition: winuser.h:204
#define NM_CLICK
Definition: commctrl.h:130
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
void PerformancePage_OnViewCPUHistoryOneGraphAll(void)
Definition: perfpage.c:504
#define ID_VIEW_SMALL
Definition: resource.h:34
VOID ShowWin32Error(DWORD dwError)
Definition: taskmgr.c:1133
BOOL bInMenuLoop
Definition: taskmgr.c:49
void TaskManager_OnEnterMenuLoop(HWND hWnd)
Definition: taskmgr.c:939
BOOL WINAPI DestroyMenu(_In_ HMENU)
BOOL WINAPI AdjustTokenPrivileges(HANDLE TokenHandle, BOOL DisableAllPrivileges, PTOKEN_PRIVILEGES NewState, DWORD BufferLength, PTOKEN_PRIVILEGES PreviousState, PDWORD ReturnLength)
Definition: security.c:376
#define IDS_MENU_WINDOWS
Definition: resource.h:229
#define ID_WINDOWS_CASCADE
Definition: resource.h:153
#define SWP_NOSIZE
Definition: winuser.h:1230
void LoadSettings(void)
Definition: taskmgr.c:848
static HDC hDC
Definition: 3dtext.c:33
HMENU hWindowMenu
Definition: taskmgr.c:41
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
VOID ShutDown_SwitchUser(VOID)
Definition: shutdown.c:177
#define IDS_TAB_PERFORMANCE
Definition: resource.h:197
#define IDS_MENU_16BITTASK
Definition: resource.h:228
HANDLE WINAPI OpenProcess(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN DWORD dwProcessId)
Definition: proc.c:1227
#define SHUTDOWN_NORETRY
Definition: winbase.h:429
#define IDD_PERFORMANCE_PAGE
Definition: resource.h:15
void TaskManager_OnTabWndSelChange(void)
Definition: taskmgr.c:1002
static ATOM item
Definition: dde.c:856
#define IDS_TAB_PROCESSES
Definition: resource.h:196
void ApplicationPage_OnWindowsMaximize(void)
Definition: applpage.c:794
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
BOOL WINAPI RemoveMenu(_In_ HMENU, _In_ UINT, _In_ UINT)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
void TaskManager_OnOptionsAlwaysOnTop(void)
Definition: optnmenu.c:31
void TaskManager_OnFileNew(void)
Definition: run.c:26
HANDLE WINAPI DECLSPEC_HOTPATCH CreateMutexW(IN LPSECURITY_ATTRIBUTES lpMutexAttributes OPTIONAL, IN BOOL bInitialOwner, IN LPCWSTR lpName OPTIONAL)
Definition: synch.c:576
#define ID_PROCESS_PAGE_ENDPROCESSTREE
Definition: resource.h:173
VOID WINAPI GetSystemInfo(IN LPSYSTEM_INFO lpSystemInfo)
Definition: sysinfo.c:142
LPWSTR GetLastErrorText(LPWSTR lpszBuf, DWORD dwSize)
Definition: taskmgr.c:1149
unsigned int UINT
Definition: ndis.h:50
BOOL WINAPI IsZoomed(_In_ HWND)
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
Definition: security.c:296
#define ID_WINDOWS_MINIMIZE
Definition: resource.h:151
BOOL TrayIcon_ShellAddTrayIcon(void)
Definition: trayicon.c:129
#define MB_OK
Definition: winuser.h:784
HWND hProcessPage
Definition: procpage.c:36
#define IDS_APP_TITLE
Definition: resource.h:10
#define SWP_SHOWWINDOW
Definition: winuser.h:1233
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
#define SB_SETPARTS
Definition: commctrl.h:1950
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
HANDLE hThread
Definition: wizard.c:27
BOOL WINAPI SetMenuDefaultItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define ID_APPLICATION_PAGE_ENDTASK
Definition: resource.h:169
#define PAGE_OFFSET_WIDTH
LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY]
Definition: setypes.h:970
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:846
RECT rcNormalPosition
Definition: winuser.h:3270
#define msg(x)
Definition: auth_time.c:54
int nMinimumWidth
Definition: taskmgr.c:43
_Out_opt_ int * cx
Definition: commctrl.h:581
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define TabCtrl_InsertItem(hwnd, iItem, pitem)
Definition: commctrl.h:4047
#define SendMessage
Definition: winuser.h:5818
DWORD dwNumberOfProcessors
Definition: winbase.h:1143
void TaskManager_OnOptionsShow16BitTasks(void)
Definition: optnmenu.c:103
#define ID_SHUTDOWN_LOCKCOMPUTER
Definition: resource.h:189
HMENU WINAPI LoadMenuW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
#define BELOW_NORMAL_PRIORITY_CLASS
Definition: winbase.h:190
#define HIWORD(l)
Definition: typedefs.h:246
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3366
BOOL WINAPI IsWindowVisible(_In_ HWND)
#define MAKELANGID(p, s)
Definition: nls.h:15
BOOL EnableDialogTheme(HWND hwnd)
Definition: taskmgr.c:76
BOOL WINAPI SetForegroundWindow(_In_ HWND)
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2044
LONG bottom
Definition: windef.h:309
#define SE_DEBUG_NAME
Definition: winnt_old.h:384
TASKMANAGER_SETTINGS TaskManagerSettings
Definition: taskmgr.c:52
#define GetProcAddress(x, y)
Definition: compat.h:419
VOID ShutDown_Reboot(VOID)
Definition: shutdown.c:143
#define SWP_NOMOVE
Definition: winuser.h:1229
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define HWND_NOTOPMOST
Definition: winuser.h:1192
#define IDS_MENU_SELECTCOLUMNS
Definition: resource.h:227
VOID WINAPI InitCommonControls(void)
Definition: commctrl.c:863
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
int ColumnOrderArray[COLUMN_NMAX]
Definition: taskmgr.h:81
#define ID_WINDOWS_BRINGTOFRONT
Definition: resource.h:154
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80
#define PM_REMOVE
Definition: winuser.h:1182
#define TCITEM
Definition: commctrl.h:4025
#define MF_GRAYED
Definition: winuser.h:129
void ProcessPage_OnViewSelectColumns(void)
Definition: column.c:145
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define IDCANCEL
Definition: winuser.h:825
#define IDS_TAB_APPS
Definition: resource.h:195
#define WS_VISIBLE
Definition: pedump.c:620
#define ID_WINDOWS_TILEHORIZONTALLY
Definition: resource.h:149
#define memset(x, y, z)
Definition: compat.h:39
HWND hProcessPageListCtrl
Definition: procpage.c:38
#define ID_VIEW_UPDATESPEED_NORMAL
Definition: resource.h:146
HMENU WINAPI GetMenu(_In_ HWND)
#define SW_MAXIMIZE
Definition: winuser.h:766
#define TOKEN_ADJUST_PRIVILEGES
Definition: setypes.h:876
#define ID_APPLICATION_PAGE_SWITCHTO
Definition: resource.h:165
INT_PTR CALLBACK ProcessPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
Definition: procpage.c:132
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
#define WM_SYSCOMMAND
Definition: winuser.h:1723
#define ID_SHUTDOWN_REBOOT
Definition: resource.h:186
HWND hMainWnd
Definition: taskmgr.c:37
#define WM_INITDIALOG
Definition: winuser.h:1721
LPARAM lParam
Definition: combotst.c:139
BOOL CPUHistory_OneGraphPerCPU
Definition: taskmgr.h:87
void FillSolidRect(HDC hDC, LPCRECT lpRect, COLORREF clr)
Definition: taskmgr.c:528
#define SBT_NOBORDERS
Definition: commctrl.h:1967
#define LOWORD(l)
Definition: pedump.c:82
#define TCN_KEYDOWN
Definition: commctrl.h:4114
#define HeapFree(x, y, z)
Definition: compat.h:403
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:54
#define LoadString
Definition: winuser.h:5794
void TaskManager_OnOptionsMinimizeOnUse(void)
Definition: optnmenu.c:57
#define ID_PROCESS_PAGE_SETPRIORITY_LOW
Definition: resource.h:181
void TaskManager_OnMenuSelect(HWND hWnd, UINT nItemID, UINT nFlags, HMENU hSysMenu)
Definition: taskmgr.c:968
#define WMSZ_LEFT
Definition: winuser.h:2439
#define WM_NOTIFY
Definition: richedit.h:61
#define WMSZ_TOPRIGHT
Definition: winuser.h:2443
#define WMSZ_BOTTOMLEFT
Definition: winuser.h:2445
#define APIENTRY
Definition: api.h:79
#define STATUS_WINDOW
Definition: taskmgr.c:32
DWORD WINAPI GetCurrentProcessId(VOID)
Definition: proc.c:1158
#define ICON_BIG
Definition: tnclass.cpp:51
#define ID_VIEW_LARGE
Definition: resource.h:33
#define PAGE_OFFSET_TOP
void PerfDataRefresh(void)
Definition: perfdata.c:175
#define ID_SHUTDOWN_LOGOFF
Definition: resource.h:187
void TaskManager_OnExitMenuLoop(HWND hWnd)
Definition: taskmgr.c:950
#define TabCtrl_SetCurFocus(hwnd, i)
Definition: commctrl.h:4098
#define SWP_NOOWNERZORDER
Definition: winuser.h:1234
int * LPINT
Definition: windef.h:178
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
void TaskManager_OnOptionsHideWhenMinimized(void)
Definition: optnmenu.c:80
void ApplicationPage_OnSwitchTo(void)
Definition: applpage.c:868