taskmgr: Avoid forward declarations and make functions static (3/3)
Francois Gouget
fgouget at free.fr
Tue Mar 21 11:35:41 CST 2006
Changelog:
* programs/taskmgr/taskmgr.c
Francois Gouget <fgouget at free.fr>
Reorder functions to avoid forward declarations.
Make functions static whenever possible.
--
Francois Gouget <fgouget at free.fr> http://fgouget.free.fr/
Avoid the Gates of Hell - use Linux.
-------------- next part --------------
Index: programs/taskmgr/taskmgr.c
===================================================================
RCS file: /home/wine/wine/programs/taskmgr/taskmgr.c,v
retrieving revision 1.7
diff -u -p -r1.7 taskmgr.c
--- programs/taskmgr/taskmgr.c 17 Mar 2006 12:24:06 -0000 1.7
+++ programs/taskmgr/taskmgr.c 21 Mar 2006 14:29:13 -0000
@@ -55,421 +55,84 @@ BOOL bInMenuLoop = FALSE; /* Tell
TASKMANAGER_SETTINGS TaskManagerSettings;
-int APIENTRY WinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpCmdLine,
- int nCmdShow)
+void FillSolidRect(HDC hDC, LPCRECT lpRect, COLORREF clr)
{
- HANDLE hProcess;
- HANDLE hToken;
- TOKEN_PRIVILEGES tkp;
-
- /* Initialize global variables */
- hInst = hInstance;
+ SetBkColor(hDC, clr);
+ ExtTextOut(hDC, 0, 0, ETO_OPAQUE, lpRect, NULL, 0, NULL);
+}
- /* Change our priority class to HIGH */
- hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId());
- SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS);
- CloseHandle(hProcess);
+void FillSolidRect2(HDC hDC, int x, int y, int cx, int cy, COLORREF clr)
+{
+ RECT rect;
- /* Now let's get the SE_DEBUG_NAME privilege
- * so that we can debug processes
- */
+ SetBkColor(hDC, clr);
+ rect.left = x;
+ rect.top = y;
+ rect.right = x + cx;
+ rect.bottom = y + cy;
+ ExtTextOut(hDC, 0, 0, ETO_OPAQUE, &rect, NULL, 0, NULL);
+}
- /* Get a token for this process. */
- if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
- /* Get the LUID for the debug privilege. */
- LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid);
+void Draw3dRect(HDC hDC, int x, int y, int cx, int cy, COLORREF clrTopLeft, COLORREF clrBottomRight)
+{
+ FillSolidRect2(hDC, x, y, cx - 1, 1, clrTopLeft);
+ FillSolidRect2(hDC, x, y, 1, cy - 1, clrTopLeft);
+ FillSolidRect2(hDC, x + cx, y, -1, cy, clrBottomRight);
+ FillSolidRect2(hDC, x, y + cy, cx, -1, clrBottomRight);
+}
- tkp.PrivilegeCount = 1; /* one privilege to set */
- tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
+void Draw3dRect2(HDC hDC, LPRECT lpRect, COLORREF clrTopLeft, COLORREF clrBottomRight)
+{
+ Draw3dRect(hDC, lpRect->left, lpRect->top, lpRect->right - lpRect->left,
+ lpRect->bottom - lpRect->top, clrTopLeft, clrBottomRight);
+}
- /* Get the debug privilege for this process. */
- AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
- }
+void Font_DrawText(HDC hDC, LPCTSTR lpszText, int x, int y)
+{
+ HDC hFontDC;
+ HBITMAP hFontBitmap;
+ HBITMAP hOldBitmap;
+ int i;
- /* Load our settings from the registry */
- LoadSettings();
+ hFontDC = CreateCompatibleDC(hDC);
+ hFontBitmap = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_FONT));
+ hOldBitmap = (HBITMAP)SelectObject(hFontDC, hFontBitmap);
- /* Initialize perf data */
- if (!PerfDataInitialize()) {
- return -1;
+ for (i = 0; i < (int)_tcslen(lpszText); i++) {
+ if ((lpszText[i] >= '0') && (lpszText[i] <= '9')) {
+ BitBlt(hDC, x + (i * 8), y, 8, 11, hFontDC, (lpszText[i] - '0') * 8, 0, SRCCOPY);
+ }
+ else if (lpszText[i] == 'K')
+ {
+ BitBlt(hDC, x + (i * 8), y, 8, 11, hFontDC, 80, 0, SRCCOPY);
+ }
+ else if (lpszText[i] == '%')
+ {
+ BitBlt(hDC, x + (i * 8), y, 8, 11, hFontDC, 88, 0, SRCCOPY);
+ }
}
-
- DialogBox(hInst, (LPCTSTR)IDD_TASKMGR_DIALOG, NULL, TaskManagerWndProc);
-
- /* Save our settings to the registry */
- SaveSettings();
- PerfDataUninitialize();
- return 0;
+ SelectObject(hFontDC, hOldBitmap);
+ DeleteObject(hFontBitmap);
+ DeleteDC(hFontDC);
}
-/* Message handler for dialog box. */
-INT_PTR CALLBACK
-TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+static BOOL OnCreate(HWND hWnd)
{
- HDC hdc;
- PAINTSTRUCT ps;
- LPRECT pRC;
- RECT rc;
- int idctrl;
- LPNMHDR pnmh;
- WINDOWPLACEMENT wp;
+ HMENU hMenu;
+ HMENU hEditMenu;
+ HMENU hViewMenu;
+ HMENU hUpdateSpeedMenu;
+ HMENU hCPUHistoryMenu;
+ int nActivePage;
+ int nParts[3];
+ RECT rc;
+ TCHAR szTemp[256];
+ TCITEM item;
- switch (message) {
- case WM_INITDIALOG:
- hMainWnd = hDlg;
- return OnCreate(hDlg);
+ SendMessage(hMainWnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_TASKMANAGER)));
- case WM_COMMAND:
- if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {
- EndDialog(hDlg, LOWORD(wParam));
- return TRUE;
- }
- /* Process menu commands */
- switch (LOWORD(wParam))
- {
- case ID_FILE_NEW:
- TaskManager_OnFileNew();
- break;
- case ID_OPTIONS_ALWAYSONTOP:
- TaskManager_OnOptionsAlwaysOnTop();
- break;
- case ID_OPTIONS_MINIMIZEONUSE:
- TaskManager_OnOptionsMinimizeOnUse();
- break;
- case ID_OPTIONS_HIDEWHENMINIMIZED:
- TaskManager_OnOptionsHideWhenMinimized();
- break;
- case ID_OPTIONS_SHOW16BITTASKS:
- TaskManager_OnOptionsShow16BitTasks();
- break;
- case ID_RESTORE:
- TaskManager_OnRestoreMainWindow();
- break;
- case ID_VIEW_LARGE:
- ApplicationPage_OnViewLargeIcons();
- break;
- case ID_VIEW_SMALL:
- ApplicationPage_OnViewSmallIcons();
- break;
- case ID_VIEW_DETAILS:
- ApplicationPage_OnViewDetails();
- break;
- case ID_VIEW_SHOWKERNELTIMES:
- PerformancePage_OnViewShowKernelTimes();
- break;
- case ID_VIEW_CPUHISTORY_ONEGRAPHALL:
- PerformancePage_OnViewCPUHistoryOneGraphAll();
- break;
- case ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU:
- PerformancePage_OnViewCPUHistoryOneGraphPerCPU();
- break;
- case ID_VIEW_UPDATESPEED_HIGH:
- TaskManager_OnViewUpdateSpeedHigh();
- break;
- case ID_VIEW_UPDATESPEED_NORMAL:
- TaskManager_OnViewUpdateSpeedNormal();
- break;
- case ID_VIEW_UPDATESPEED_LOW:
- TaskManager_OnViewUpdateSpeedLow();
- break;
- case ID_VIEW_UPDATESPEED_PAUSED:
- TaskManager_OnViewUpdateSpeedPaused();
- break;
- case ID_VIEW_SELECTCOLUMNS:
- ProcessPage_OnViewSelectColumns();
- break;
- case ID_VIEW_REFRESH:
- PostMessage(hDlg, WM_TIMER, 0, 0);
- break;
- case ID_WINDOWS_TILEHORIZONTALLY:
- ApplicationPage_OnWindowsTileHorizontally();
- break;
- case ID_WINDOWS_TILEVERTICALLY:
- ApplicationPage_OnWindowsTileVertically();
- break;
- case ID_WINDOWS_MINIMIZE:
- ApplicationPage_OnWindowsMinimize();
- break;
- case ID_WINDOWS_MAXIMIZE:
- ApplicationPage_OnWindowsMaximize();
- break;
- case ID_WINDOWS_CASCADE:
- ApplicationPage_OnWindowsCascade();
- break;
- case ID_WINDOWS_BRINGTOFRONT:
- ApplicationPage_OnWindowsBringToFront();
- break;
- case ID_APPLICATION_PAGE_SWITCHTO:
- ApplicationPage_OnSwitchTo();
- break;
- case ID_APPLICATION_PAGE_ENDTASK:
- ApplicationPage_OnEndTask();
- break;
- case ID_APPLICATION_PAGE_GOTOPROCESS:
- ApplicationPage_OnGotoProcess();
- break;
- case ID_PROCESS_PAGE_ENDPROCESS:
- ProcessPage_OnEndProcess();
- break;
- case ID_PROCESS_PAGE_ENDPROCESSTREE:
- ProcessPage_OnEndProcessTree();
- break;
- case ID_PROCESS_PAGE_DEBUG:
- ProcessPage_OnDebug();
- break;
- case ID_PROCESS_PAGE_SETAFFINITY:
- ProcessPage_OnSetAffinity();
- break;
- case ID_PROCESS_PAGE_SETPRIORITY_REALTIME:
- ProcessPage_OnSetPriorityRealTime();
- break;
- case ID_PROCESS_PAGE_SETPRIORITY_HIGH:
- ProcessPage_OnSetPriorityHigh();
- break;
- case ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL:
- ProcessPage_OnSetPriorityAboveNormal();
- break;
- case ID_PROCESS_PAGE_SETPRIORITY_NORMAL:
- ProcessPage_OnSetPriorityNormal();
- break;
- case ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL:
- ProcessPage_OnSetPriorityBelowNormal();
- break;
- case ID_PROCESS_PAGE_SETPRIORITY_LOW:
- ProcessPage_OnSetPriorityLow();
- break;
- case ID_PROCESS_PAGE_DEBUGCHANNELS:
- ProcessPage_OnDebugChannels();
- break;
- case ID_HELP_ABOUT:
- OnAbout();
- break;
- case ID_FILE_EXIT:
- EndDialog(hDlg, IDOK);
- break;
- }
- break;
-
- case WM_ONTRAYICON:
- switch(lParam)
- {
- case WM_RBUTTONDOWN:
- {
- POINT pt;
- BOOL OnTop;
- HMENU hMenu, hPopupMenu;
-
- GetCursorPos(&pt);
-
- OnTop = ((GetWindowLong(hMainWnd, GWL_EXSTYLE) & WS_EX_TOPMOST) != 0);
-
- hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_TRAY_POPUP));
- hPopupMenu = GetSubMenu(hMenu, 0);
-
- if(IsWindowVisible(hMainWnd))
- {
- DeleteMenu(hPopupMenu, ID_RESTORE, MF_BYCOMMAND);
- }
- else
- {
- SetMenuDefaultItem(hPopupMenu, ID_RESTORE, FALSE);
- }
-
- if(OnTop)
- {
- CheckMenuItem(hPopupMenu, ID_OPTIONS_ALWAYSONTOP, MF_BYCOMMAND | MF_CHECKED);
- }
-
- SetForegroundWindow(hMainWnd);
- TrackPopupMenuEx(hPopupMenu, 0, pt.x, pt.y, hMainWnd, NULL);
-
- DestroyMenu(hMenu);
- break;
- }
- case WM_LBUTTONDBLCLK:
- TaskManager_OnRestoreMainWindow();
- break;
- }
- break;
-
- case WM_NOTIFY:
- idctrl = (int)wParam;
- pnmh = (LPNMHDR)lParam;
- if ((pnmh->hwndFrom == hTabWnd) &&
- (pnmh->idFrom == IDC_TAB) &&
- (pnmh->code == TCN_SELCHANGE))
- {
- TaskManager_OnTabWndSelChange();
- }
- break;
-
- case WM_NCPAINT:
- hdc = GetDC(hDlg);
- GetClientRect(hDlg, &rc);
- Draw3dRect(hdc, rc.left, rc.top, rc.right, rc.top + 2, GetSysColor(COLOR_3DSHADOW), GetSysColor(COLOR_3DHILIGHT));
- ReleaseDC(hDlg, hdc);
- break;
-
- case WM_PAINT:
- hdc = BeginPaint(hDlg, &ps);
- GetClientRect(hDlg, &rc);
- Draw3dRect(hdc, rc.left, rc.top, rc.right, rc.top + 2, GetSysColor(COLOR_3DSHADOW), GetSysColor(COLOR_3DHILIGHT));
- EndPaint(hDlg, &ps);
- break;
-
- case WM_SIZING:
- /* Make sure the user is sizing the dialog */
- /* in an acceptable range */
- pRC = (LPRECT)lParam;
- if ((wParam == WMSZ_LEFT) || (wParam == WMSZ_TOPLEFT) || (wParam == WMSZ_BOTTOMLEFT)) {
- /* If the width is too small enlarge it to the minimum */
- if (nMinimumWidth > (pRC->right - pRC->left))
- pRC->left = pRC->right - nMinimumWidth;
- } else {
- /* If the width is too small enlarge it to the minimum */
- if (nMinimumWidth > (pRC->right - pRC->left))
- pRC->right = pRC->left + nMinimumWidth;
- }
- if ((wParam == WMSZ_TOP) || (wParam == WMSZ_TOPLEFT) || (wParam == WMSZ_TOPRIGHT)) {
- /* If the height is too small enlarge it to the minimum */
- if (nMinimumHeight > (pRC->bottom - pRC->top))
- pRC->top = pRC->bottom - nMinimumHeight;
- } else {
- /* If the height is too small enlarge it to the minimum */
- if (nMinimumHeight > (pRC->bottom - pRC->top))
- pRC->bottom = pRC->top + nMinimumHeight;
- }
- return TRUE;
- break;
-
- case WM_SIZE:
- /* Handle the window sizing in it's own function */
- OnSize(wParam, LOWORD(lParam), HIWORD(lParam));
- break;
-
- case WM_MOVE:
- /* Handle the window moving in it's own function */
- OnMove(wParam, LOWORD(lParam), HIWORD(lParam));
- break;
-
- case WM_DESTROY:
- ShowWindow(hDlg, SW_HIDE);
- TrayIcon_ShellRemoveTrayIcon();
- wp.length = sizeof(WINDOWPLACEMENT);
- GetWindowPlacement(hDlg, &wp);
- TaskManagerSettings.Left = wp.rcNormalPosition.left;
- TaskManagerSettings.Top = wp.rcNormalPosition.top;
- TaskManagerSettings.Right = wp.rcNormalPosition.right;
- TaskManagerSettings.Bottom = wp.rcNormalPosition.bottom;
- if (IsZoomed(hDlg) || (wp.flags & WPF_RESTORETOMAXIMIZED))
- TaskManagerSettings.Maximized = TRUE;
- else
- TaskManagerSettings.Maximized = FALSE;
- return DefWindowProc(hDlg, message, wParam, lParam);
-
- case WM_TIMER:
- /* Refresh the performance data */
- PerfDataRefresh();
- RefreshApplicationPage();
- RefreshProcessPage();
- RefreshPerformancePage();
- TrayIcon_ShellUpdateTrayIcon();
- break;
-
- case WM_ENTERMENULOOP:
- TaskManager_OnEnterMenuLoop(hDlg);
- break;
- case WM_EXITMENULOOP:
- TaskManager_OnExitMenuLoop(hDlg);
- break;
- case WM_MENUSELECT:
- TaskManager_OnMenuSelect(hDlg, LOWORD(wParam), HIWORD(wParam), (HMENU)lParam);
- break;
- }
-
- return 0;
-}
-
-void FillSolidRect(HDC hDC, LPCRECT lpRect, COLORREF clr)
-{
- SetBkColor(hDC, clr);
- ExtTextOut(hDC, 0, 0, ETO_OPAQUE, lpRect, NULL, 0, NULL);
-}
-
-void FillSolidRect2(HDC hDC, int x, int y, int cx, int cy, COLORREF clr)
-{
- RECT rect;
-
- SetBkColor(hDC, clr);
- rect.left = x;
- rect.top = y;
- rect.right = x + cx;
- rect.bottom = y + cy;
- ExtTextOut(hDC, 0, 0, ETO_OPAQUE, &rect, NULL, 0, NULL);
-}
-
-void Draw3dRect(HDC hDC, int x, int y, int cx, int cy, COLORREF clrTopLeft, COLORREF clrBottomRight)
-{
- FillSolidRect2(hDC, x, y, cx - 1, 1, clrTopLeft);
- FillSolidRect2(hDC, x, y, 1, cy - 1, clrTopLeft);
- FillSolidRect2(hDC, x + cx, y, -1, cy, clrBottomRight);
- FillSolidRect2(hDC, x, y + cy, cx, -1, clrBottomRight);
-}
-
-void Draw3dRect2(HDC hDC, LPRECT lpRect, COLORREF clrTopLeft, COLORREF clrBottomRight)
-{
- Draw3dRect(hDC, lpRect->left, lpRect->top, lpRect->right - lpRect->left,
- lpRect->bottom - lpRect->top, clrTopLeft, clrBottomRight);
-}
-
-void Font_DrawText(HDC hDC, LPCTSTR lpszText, int x, int y)
-{
- HDC hFontDC;
- HBITMAP hFontBitmap;
- HBITMAP hOldBitmap;
- int i;
-
- hFontDC = CreateCompatibleDC(hDC);
- hFontBitmap = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_FONT));
- hOldBitmap = (HBITMAP)SelectObject(hFontDC, hFontBitmap);
-
- for (i = 0; i < (int)_tcslen(lpszText); i++) {
- if ((lpszText[i] >= '0') && (lpszText[i] <= '9')) {
- BitBlt(hDC, x + (i * 8), y, 8, 11, hFontDC, (lpszText[i] - '0') * 8, 0, SRCCOPY);
- }
- else if (lpszText[i] == 'K')
- {
- BitBlt(hDC, x + (i * 8), y, 8, 11, hFontDC, 80, 0, SRCCOPY);
- }
- else if (lpszText[i] == '%')
- {
- BitBlt(hDC, x + (i * 8), y, 8, 11, hFontDC, 88, 0, SRCCOPY);
- }
- }
- SelectObject(hFontDC, hOldBitmap);
- DeleteObject(hFontBitmap);
- DeleteDC(hFontDC);
-}
-
-BOOL OnCreate(HWND hWnd)
-{
- HMENU hMenu;
- HMENU hEditMenu;
- HMENU hViewMenu;
- HMENU hUpdateSpeedMenu;
- HMENU hCPUHistoryMenu;
- int nActivePage;
- int nParts[3];
- RECT rc;
- TCHAR szTemp[256];
- TCITEM item;
-
- SendMessage(hMainWnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_TASKMANAGER)));
-
- /* Initialize the Windows Common Controls DLL */
- InitCommonControls();
+ /* Initialize the Windows Common Controls DLL */
+ InitCommonControls();
/* Get the minimum window sizes */
GetWindowRect(hWnd, &rc);
@@ -637,7 +300,7 @@ BOOL OnCreate(HWND hWnd)
* This function handles all the moving events for the application
* It moves every child window that needs moving
*/
-void OnMove( UINT nType, int cx, int cy )
+static void OnMove( UINT nType, int cx, int cy )
{
#ifdef __GNUC__TEST__
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);
@@ -650,7 +313,7 @@ void OnMove( UINT nType, int cx, int cy
* This function handles all the sizing events for the application
* It re-sizes every window, and child window that needs re-sizing
*/
-void OnSize( UINT nType, int cx, int cy )
+static void OnSize( UINT nType, int cx, int cy )
{
int nParts[3];
int nXDifference;
@@ -706,7 +369,7 @@ void OnSize( UINT nType, int cx, int cy
SetWindowPos(hPerformancePage, NULL, 0, 0, cx, cy, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOMOVE|SWP_NOZORDER);
}
-void LoadSettings(void)
+static void LoadSettings(void)
{
HKEY hKey;
TCHAR szSubKey[] = _T("Software\\Wine\\TaskManager");
@@ -813,7 +476,7 @@ void LoadSettings(void)
RegCloseKey(hKey);
}
-void SaveSettings(void)
+static void SaveSettings(void)
{
HKEY hKey;
TCHAR szSubKey3[] = _T("Software\\Wine\\TaskManager");
@@ -829,7 +492,7 @@ void SaveSettings(void)
RegCloseKey(hKey);
}
-void TaskManager_OnRestoreMainWindow(void)
+static void TaskManager_OnRestoreMainWindow(void)
{
HMENU hMenu, hOptionsMenu;
BOOL OnTop;
@@ -843,7 +506,7 @@ void TaskManager_OnRestoreMainWindow(voi
SetWindowPos(hMainWnd, (OnTop ? HWND_TOPMOST : HWND_TOP), 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
}
-void TaskManager_OnEnterMenuLoop(HWND hWnd)
+static void TaskManager_OnEnterMenuLoop(HWND hWnd)
{
int nParts;
@@ -854,7 +517,7 @@ void TaskManager_OnEnterMenuLoop(HWND hW
SendMessage(hStatusWnd, SB_SETTEXT, (WPARAM)0, (LPARAM)_T(""));
}
-void TaskManager_OnExitMenuLoop(HWND hWnd)
+static void TaskManager_OnExitMenuLoop(HWND hWnd)
{
RECT rc;
int nParts[3];
@@ -874,7 +537,7 @@ void TaskManager_OnExitMenuLoop(HWND hWn
SendMessage(hStatusWnd, SB_SETTEXT, 0, (LPARAM)text);
}
-void TaskManager_OnMenuSelect(HWND hWnd, UINT nItemID, UINT nFlags, HMENU hSysMenu)
+static void TaskManager_OnMenuSelect(HWND hWnd, UINT nItemID, UINT nFlags, HMENU hSysMenu)
{
TCHAR str[100];
@@ -890,7 +553,7 @@ void TaskManager_OnMenuSelect(HWND hWnd,
SendMessage(hStatusWnd, SB_SETTEXT, 0, (LPARAM)str);
}
-void TaskManager_OnViewUpdateSpeedHigh(void)
+static void TaskManager_OnViewUpdateSpeedHigh(void)
{
HMENU hMenu;
HMENU hViewMenu;
@@ -907,177 +570,509 @@ void TaskManager_OnViewUpdateSpeedHigh(v
SetTimer(hMainWnd, 1, 1000, NULL);
}
-void TaskManager_OnViewUpdateSpeedNormal(void)
+static void TaskManager_OnViewUpdateSpeedNormal(void)
+{
+ HMENU hMenu;
+ HMENU hViewMenu;
+ HMENU hUpdateSpeedMenu;
+
+ hMenu = GetMenu(hMainWnd);
+ hViewMenu = GetSubMenu(hMenu, 2);
+ hUpdateSpeedMenu = GetSubMenu(hViewMenu, 1);
+
+ TaskManagerSettings.UpdateSpeed = 2;
+ CheckMenuRadioItem(hUpdateSpeedMenu, ID_VIEW_UPDATESPEED_HIGH, ID_VIEW_UPDATESPEED_PAUSED, ID_VIEW_UPDATESPEED_NORMAL, MF_BYCOMMAND);
+
+ KillTimer(hMainWnd, 1);
+ SetTimer(hMainWnd, 1, 2000, NULL);
+}
+
+static void TaskManager_OnViewUpdateSpeedLow(void)
+{
+ HMENU hMenu;
+ HMENU hViewMenu;
+ HMENU hUpdateSpeedMenu;
+
+ hMenu = GetMenu(hMainWnd);
+ hViewMenu = GetSubMenu(hMenu, 2);
+ hUpdateSpeedMenu = GetSubMenu(hViewMenu, 1);
+
+ TaskManagerSettings.UpdateSpeed = 4;
+ CheckMenuRadioItem(hUpdateSpeedMenu, ID_VIEW_UPDATESPEED_HIGH, ID_VIEW_UPDATESPEED_PAUSED, ID_VIEW_UPDATESPEED_LOW, MF_BYCOMMAND);
+
+ KillTimer(hMainWnd, 1);
+ SetTimer(hMainWnd, 1, 4000, NULL);
+}
+
+static void TaskManager_OnViewUpdateSpeedPaused(void)
{
HMENU hMenu;
HMENU hViewMenu;
HMENU hUpdateSpeedMenu;
- hMenu = GetMenu(hMainWnd);
- hViewMenu = GetSubMenu(hMenu, 2);
- hUpdateSpeedMenu = GetSubMenu(hViewMenu, 1);
+ hMenu = GetMenu(hMainWnd);
+ hViewMenu = GetSubMenu(hMenu, 2);
+ hUpdateSpeedMenu = GetSubMenu(hViewMenu, 1);
+ TaskManagerSettings.UpdateSpeed = 0;
+ CheckMenuRadioItem(hUpdateSpeedMenu, ID_VIEW_UPDATESPEED_HIGH, ID_VIEW_UPDATESPEED_PAUSED, ID_VIEW_UPDATESPEED_PAUSED, MF_BYCOMMAND);
+ KillTimer(hMainWnd, 1);
+}
+
+static void TaskManager_OnTabWndSelChange(void)
+{
+ int i;
+ HMENU hMenu;
+ HMENU hOptionsMenu;
+ HMENU hViewMenu;
+ HMENU hSubMenu;
+
+ hMenu = GetMenu(hMainWnd);
+ hViewMenu = GetSubMenu(hMenu, 2);
+ hOptionsMenu = GetSubMenu(hMenu, 1);
+ TaskManagerSettings.ActiveTabPage = TabCtrl_GetCurSel(hTabWnd);
+ for (i = GetMenuItemCount(hViewMenu) - 1; i > 2; i--) {
+ hSubMenu = GetSubMenu(hViewMenu, i);
+ if (hSubMenu)
+ DestroyMenu(hSubMenu);
+ RemoveMenu(hViewMenu, i, MF_BYPOSITION);
+ }
+ RemoveMenu(hOptionsMenu, 3, MF_BYPOSITION);
+ switch (TaskManagerSettings.ActiveTabPage) {
+ case 0:
+ ShowWindow(hApplicationPage, SW_SHOW);
+ ShowWindow(hProcessPage, SW_HIDE);
+ ShowWindow(hPerformancePage, SW_HIDE);
+ BringWindowToTop(hApplicationPage);
+ AppendMenu(hViewMenu, MF_STRING, ID_VIEW_LARGE, _T("Lar&ge Icons"));
+ AppendMenu(hViewMenu, MF_STRING, ID_VIEW_SMALL, _T("S&mall Icons"));
+ AppendMenu(hViewMenu, MF_STRING, ID_VIEW_DETAILS, _T("&Details"));
+
+ if (GetMenuItemCount(hMenu) <= 4) {
+ hSubMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_WINDOWSMENU));
+ InsertMenu(hMenu, 3, MF_BYPOSITION|MF_POPUP, (UINT)hSubMenu, _T("&Windows"));
+ DrawMenuBar(hMainWnd);
+ }
+ if (TaskManagerSettings.View_LargeIcons)
+ CheckMenuRadioItem(hViewMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_LARGE, MF_BYCOMMAND);
+ else if (TaskManagerSettings.View_SmallIcons)
+ CheckMenuRadioItem(hViewMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_SMALL, MF_BYCOMMAND);
+ else
+ CheckMenuRadioItem(hViewMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_DETAILS, MF_BYCOMMAND);
+ /*
+ * Give the application list control focus
+ */
+ SetFocus(hApplicationPageListCtrl);
+ break;
+
+ case 1:
+ ShowWindow(hApplicationPage, SW_HIDE);
+ ShowWindow(hProcessPage, SW_SHOW);
+ ShowWindow(hPerformancePage, SW_HIDE);
+ BringWindowToTop(hProcessPage);
+ AppendMenu(hViewMenu, MF_STRING, ID_VIEW_SELECTCOLUMNS, _T("&Select Columns..."));
+ AppendMenu(hOptionsMenu, MF_STRING, ID_OPTIONS_SHOW16BITTASKS, _T("&Show 16-bit tasks"));
+ if (TaskManagerSettings.Show16BitTasks)
+ CheckMenuItem(hOptionsMenu, ID_OPTIONS_SHOW16BITTASKS, MF_BYCOMMAND|MF_CHECKED);
+ if (GetMenuItemCount(hMenu) > 4)
+ {
+ RemoveMenu(hMenu, 3, MF_BYPOSITION);
+ DrawMenuBar(hMainWnd);
+ }
+ /*
+ * Give the process list control focus
+ */
+ SetFocus(hProcessPageListCtrl);
+ break;
+
+ case 2:
+ ShowWindow(hApplicationPage, SW_HIDE);
+ ShowWindow(hProcessPage, SW_HIDE);
+ ShowWindow(hPerformancePage, SW_SHOW);
+ BringWindowToTop(hPerformancePage);
+ if (GetMenuItemCount(hMenu) > 4) {
+ RemoveMenu(hMenu, 3, MF_BYPOSITION);
+ DrawMenuBar(hMainWnd);
+ }
+ hSubMenu = CreatePopupMenu();
+ AppendMenu(hSubMenu, MF_STRING, ID_VIEW_CPUHISTORY_ONEGRAPHALL, _T("&One Graph, All CPUs"));
+ AppendMenu(hSubMenu, MF_STRING, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, _T("One Graph &Per CPU"));
+ AppendMenu(hViewMenu, MF_STRING|MF_POPUP, (UINT)hSubMenu, _T("&CPU History"));
+ AppendMenu(hViewMenu, MF_STRING, ID_VIEW_SHOWKERNELTIMES, _T("&Show Kernel Times"));
+ if (TaskManagerSettings.ShowKernelTimes)
+ CheckMenuItem(hViewMenu, ID_VIEW_SHOWKERNELTIMES, MF_BYCOMMAND|MF_CHECKED);
+ else
+ CheckMenuItem(hViewMenu, ID_VIEW_SHOWKERNELTIMES, MF_BYCOMMAND|MF_UNCHECKED);
+ if (TaskManagerSettings.CPUHistory_OneGraphPerCPU)
+ CheckMenuRadioItem(hSubMenu, ID_VIEW_CPUHISTORY_ONEGRAPHALL, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, MF_BYCOMMAND);
+ else
+ CheckMenuRadioItem(hSubMenu, ID_VIEW_CPUHISTORY_ONEGRAPHALL, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, ID_VIEW_CPUHISTORY_ONEGRAPHALL, MF_BYCOMMAND);
+ /*
+ * Give the tab control focus
+ */
+ SetFocus(hTabWnd);
+ break;
+ }
+}
+
+LPTSTR GetLastErrorText(LPTSTR lpszBuf, DWORD dwSize)
+{
+ DWORD dwRet;
+ LPTSTR lpszTemp = NULL;
+
+ dwRet = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ARGUMENT_ARRAY,
+ NULL,
+ GetLastError(),
+ LANG_NEUTRAL,
+ (LPTSTR)&lpszTemp,
+ 0,
+ NULL );
+
+ /* supplied buffer is not long enough */
+ if (!dwRet || ( (long)dwSize < (long)dwRet+14)) {
+ lpszBuf[0] = TEXT('\0');
+ } else {
+ lpszTemp[lstrlen(lpszTemp)-2] = TEXT('\0'); /*remove cr and newline character */
+ _stprintf(lpszBuf, TEXT("%s (0x%x)"), lpszTemp, (int)GetLastError());
+ }
+ if (lpszTemp) {
+ LocalFree((HLOCAL)lpszTemp);
+ }
+ return lpszBuf;
+}
+
+/* Message handler for dialog box. */
+static INT_PTR CALLBACK
+TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ HDC hdc;
+ PAINTSTRUCT ps;
+ LPRECT pRC;
+ RECT rc;
+ int idctrl;
+ LPNMHDR pnmh;
+ WINDOWPLACEMENT wp;
+
+ switch (message) {
+ case WM_INITDIALOG:
+ hMainWnd = hDlg;
+ return OnCreate(hDlg);
+
+ case WM_COMMAND:
+ if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {
+ EndDialog(hDlg, LOWORD(wParam));
+ return TRUE;
+ }
+ /* Process menu commands */
+ switch (LOWORD(wParam))
+ {
+ case ID_FILE_NEW:
+ TaskManager_OnFileNew();
+ break;
+ case ID_OPTIONS_ALWAYSONTOP:
+ TaskManager_OnOptionsAlwaysOnTop();
+ break;
+ case ID_OPTIONS_MINIMIZEONUSE:
+ TaskManager_OnOptionsMinimizeOnUse();
+ break;
+ case ID_OPTIONS_HIDEWHENMINIMIZED:
+ TaskManager_OnOptionsHideWhenMinimized();
+ break;
+ case ID_OPTIONS_SHOW16BITTASKS:
+ TaskManager_OnOptionsShow16BitTasks();
+ break;
+ case ID_RESTORE:
+ TaskManager_OnRestoreMainWindow();
+ break;
+ case ID_VIEW_LARGE:
+ ApplicationPage_OnViewLargeIcons();
+ break;
+ case ID_VIEW_SMALL:
+ ApplicationPage_OnViewSmallIcons();
+ break;
+ case ID_VIEW_DETAILS:
+ ApplicationPage_OnViewDetails();
+ break;
+ case ID_VIEW_SHOWKERNELTIMES:
+ PerformancePage_OnViewShowKernelTimes();
+ break;
+ case ID_VIEW_CPUHISTORY_ONEGRAPHALL:
+ PerformancePage_OnViewCPUHistoryOneGraphAll();
+ break;
+ case ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU:
+ PerformancePage_OnViewCPUHistoryOneGraphPerCPU();
+ break;
+ case ID_VIEW_UPDATESPEED_HIGH:
+ TaskManager_OnViewUpdateSpeedHigh();
+ break;
+ case ID_VIEW_UPDATESPEED_NORMAL:
+ TaskManager_OnViewUpdateSpeedNormal();
+ break;
+ case ID_VIEW_UPDATESPEED_LOW:
+ TaskManager_OnViewUpdateSpeedLow();
+ break;
+ case ID_VIEW_UPDATESPEED_PAUSED:
+ TaskManager_OnViewUpdateSpeedPaused();
+ break;
+ case ID_VIEW_SELECTCOLUMNS:
+ ProcessPage_OnViewSelectColumns();
+ break;
+ case ID_VIEW_REFRESH:
+ PostMessage(hDlg, WM_TIMER, 0, 0);
+ break;
+ case ID_WINDOWS_TILEHORIZONTALLY:
+ ApplicationPage_OnWindowsTileHorizontally();
+ break;
+ case ID_WINDOWS_TILEVERTICALLY:
+ ApplicationPage_OnWindowsTileVertically();
+ break;
+ case ID_WINDOWS_MINIMIZE:
+ ApplicationPage_OnWindowsMinimize();
+ break;
+ case ID_WINDOWS_MAXIMIZE:
+ ApplicationPage_OnWindowsMaximize();
+ break;
+ case ID_WINDOWS_CASCADE:
+ ApplicationPage_OnWindowsCascade();
+ break;
+ case ID_WINDOWS_BRINGTOFRONT:
+ ApplicationPage_OnWindowsBringToFront();
+ break;
+ case ID_APPLICATION_PAGE_SWITCHTO:
+ ApplicationPage_OnSwitchTo();
+ break;
+ case ID_APPLICATION_PAGE_ENDTASK:
+ ApplicationPage_OnEndTask();
+ break;
+ case ID_APPLICATION_PAGE_GOTOPROCESS:
+ ApplicationPage_OnGotoProcess();
+ break;
+ case ID_PROCESS_PAGE_ENDPROCESS:
+ ProcessPage_OnEndProcess();
+ break;
+ case ID_PROCESS_PAGE_ENDPROCESSTREE:
+ ProcessPage_OnEndProcessTree();
+ break;
+ case ID_PROCESS_PAGE_DEBUG:
+ ProcessPage_OnDebug();
+ break;
+ case ID_PROCESS_PAGE_SETAFFINITY:
+ ProcessPage_OnSetAffinity();
+ break;
+ case ID_PROCESS_PAGE_SETPRIORITY_REALTIME:
+ ProcessPage_OnSetPriorityRealTime();
+ break;
+ case ID_PROCESS_PAGE_SETPRIORITY_HIGH:
+ ProcessPage_OnSetPriorityHigh();
+ break;
+ case ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL:
+ ProcessPage_OnSetPriorityAboveNormal();
+ break;
+ case ID_PROCESS_PAGE_SETPRIORITY_NORMAL:
+ ProcessPage_OnSetPriorityNormal();
+ break;
+ case ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL:
+ ProcessPage_OnSetPriorityBelowNormal();
+ break;
+ case ID_PROCESS_PAGE_SETPRIORITY_LOW:
+ ProcessPage_OnSetPriorityLow();
+ break;
+ case ID_PROCESS_PAGE_DEBUGCHANNELS:
+ ProcessPage_OnDebugChannels();
+ break;
+ case ID_HELP_ABOUT:
+ OnAbout();
+ break;
+ case ID_FILE_EXIT:
+ EndDialog(hDlg, IDOK);
+ break;
+ }
+ break;
+
+ case WM_ONTRAYICON:
+ switch(lParam)
+ {
+ case WM_RBUTTONDOWN:
+ {
+ POINT pt;
+ BOOL OnTop;
+ HMENU hMenu, hPopupMenu;
+
+ GetCursorPos(&pt);
+
+ OnTop = ((GetWindowLong(hMainWnd, GWL_EXSTYLE) & WS_EX_TOPMOST) != 0);
+
+ hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_TRAY_POPUP));
+ hPopupMenu = GetSubMenu(hMenu, 0);
+
+ if(IsWindowVisible(hMainWnd))
+ {
+ DeleteMenu(hPopupMenu, ID_RESTORE, MF_BYCOMMAND);
+ }
+ else
+ {
+ SetMenuDefaultItem(hPopupMenu, ID_RESTORE, FALSE);
+ }
+
+ if(OnTop)
+ {
+ CheckMenuItem(hPopupMenu, ID_OPTIONS_ALWAYSONTOP, MF_BYCOMMAND | MF_CHECKED);
+ }
+
+ SetForegroundWindow(hMainWnd);
+ TrackPopupMenuEx(hPopupMenu, 0, pt.x, pt.y, hMainWnd, NULL);
+
+ DestroyMenu(hMenu);
+ break;
+ }
+ case WM_LBUTTONDBLCLK:
+ TaskManager_OnRestoreMainWindow();
+ break;
+ }
+ break;
+
+ case WM_NOTIFY:
+ idctrl = (int)wParam;
+ pnmh = (LPNMHDR)lParam;
+ if ((pnmh->hwndFrom == hTabWnd) &&
+ (pnmh->idFrom == IDC_TAB) &&
+ (pnmh->code == TCN_SELCHANGE))
+ {
+ TaskManager_OnTabWndSelChange();
+ }
+ break;
+
+ case WM_NCPAINT:
+ hdc = GetDC(hDlg);
+ GetClientRect(hDlg, &rc);
+ Draw3dRect(hdc, rc.left, rc.top, rc.right, rc.top + 2, GetSysColor(COLOR_3DSHADOW), GetSysColor(COLOR_3DHILIGHT));
+ ReleaseDC(hDlg, hdc);
+ break;
- TaskManagerSettings.UpdateSpeed = 2;
- CheckMenuRadioItem(hUpdateSpeedMenu, ID_VIEW_UPDATESPEED_HIGH, ID_VIEW_UPDATESPEED_PAUSED, ID_VIEW_UPDATESPEED_NORMAL, MF_BYCOMMAND);
+ case WM_PAINT:
+ hdc = BeginPaint(hDlg, &ps);
+ GetClientRect(hDlg, &rc);
+ Draw3dRect(hdc, rc.left, rc.top, rc.right, rc.top + 2, GetSysColor(COLOR_3DSHADOW), GetSysColor(COLOR_3DHILIGHT));
+ EndPaint(hDlg, &ps);
+ break;
- KillTimer(hMainWnd, 1);
- SetTimer(hMainWnd, 1, 2000, NULL);
-}
+ case WM_SIZING:
+ /* Make sure the user is sizing the dialog */
+ /* in an acceptable range */
+ pRC = (LPRECT)lParam;
+ if ((wParam == WMSZ_LEFT) || (wParam == WMSZ_TOPLEFT) || (wParam == WMSZ_BOTTOMLEFT)) {
+ /* If the width is too small enlarge it to the minimum */
+ if (nMinimumWidth > (pRC->right - pRC->left))
+ pRC->left = pRC->right - nMinimumWidth;
+ } else {
+ /* If the width is too small enlarge it to the minimum */
+ if (nMinimumWidth > (pRC->right - pRC->left))
+ pRC->right = pRC->left + nMinimumWidth;
+ }
+ if ((wParam == WMSZ_TOP) || (wParam == WMSZ_TOPLEFT) || (wParam == WMSZ_TOPRIGHT)) {
+ /* If the height is too small enlarge it to the minimum */
+ if (nMinimumHeight > (pRC->bottom - pRC->top))
+ pRC->top = pRC->bottom - nMinimumHeight;
+ } else {
+ /* If the height is too small enlarge it to the minimum */
+ if (nMinimumHeight > (pRC->bottom - pRC->top))
+ pRC->bottom = pRC->top + nMinimumHeight;
+ }
+ return TRUE;
+ break;
-void TaskManager_OnViewUpdateSpeedLow(void)
-{
- HMENU hMenu;
- HMENU hViewMenu;
- HMENU hUpdateSpeedMenu;
+ case WM_SIZE:
+ /* Handle the window sizing in it's own function */
+ OnSize(wParam, LOWORD(lParam), HIWORD(lParam));
+ break;
- hMenu = GetMenu(hMainWnd);
- hViewMenu = GetSubMenu(hMenu, 2);
- hUpdateSpeedMenu = GetSubMenu(hViewMenu, 1);
+ case WM_MOVE:
+ /* Handle the window moving in it's own function */
+ OnMove(wParam, LOWORD(lParam), HIWORD(lParam));
+ break;
- TaskManagerSettings.UpdateSpeed = 4;
- CheckMenuRadioItem(hUpdateSpeedMenu, ID_VIEW_UPDATESPEED_HIGH, ID_VIEW_UPDATESPEED_PAUSED, ID_VIEW_UPDATESPEED_LOW, MF_BYCOMMAND);
+ case WM_DESTROY:
+ ShowWindow(hDlg, SW_HIDE);
+ TrayIcon_ShellRemoveTrayIcon();
+ wp.length = sizeof(WINDOWPLACEMENT);
+ GetWindowPlacement(hDlg, &wp);
+ TaskManagerSettings.Left = wp.rcNormalPosition.left;
+ TaskManagerSettings.Top = wp.rcNormalPosition.top;
+ TaskManagerSettings.Right = wp.rcNormalPosition.right;
+ TaskManagerSettings.Bottom = wp.rcNormalPosition.bottom;
+ if (IsZoomed(hDlg) || (wp.flags & WPF_RESTORETOMAXIMIZED))
+ TaskManagerSettings.Maximized = TRUE;
+ else
+ TaskManagerSettings.Maximized = FALSE;
+ return DefWindowProc(hDlg, message, wParam, lParam);
+
+ case WM_TIMER:
+ /* Refresh the performance data */
+ PerfDataRefresh();
+ RefreshApplicationPage();
+ RefreshProcessPage();
+ RefreshPerformancePage();
+ TrayIcon_ShellUpdateTrayIcon();
+ break;
- KillTimer(hMainWnd, 1);
- SetTimer(hMainWnd, 1, 4000, NULL);
-}
+ case WM_ENTERMENULOOP:
+ TaskManager_OnEnterMenuLoop(hDlg);
+ break;
+ case WM_EXITMENULOOP:
+ TaskManager_OnExitMenuLoop(hDlg);
+ break;
+ case WM_MENUSELECT:
+ TaskManager_OnMenuSelect(hDlg, LOWORD(wParam), HIWORD(wParam), (HMENU)lParam);
+ break;
+ }
-void TaskManager_OnViewRefresh(void)
-{
- PostMessage(hMainWnd, WM_TIMER, 0, 0);
+ return 0;
}
-void TaskManager_OnViewUpdateSpeedPaused(void)
+int APIENTRY WinMain(HINSTANCE hInstance,
+ HINSTANCE hPrevInstance,
+ LPSTR lpCmdLine,
+ int nCmdShow)
{
- HMENU hMenu;
- HMENU hViewMenu;
- HMENU hUpdateSpeedMenu;
+ HANDLE hProcess;
+ HANDLE hToken;
+ TOKEN_PRIVILEGES tkp;
- hMenu = GetMenu(hMainWnd);
- hViewMenu = GetSubMenu(hMenu, 2);
- hUpdateSpeedMenu = GetSubMenu(hViewMenu, 1);
- TaskManagerSettings.UpdateSpeed = 0;
- CheckMenuRadioItem(hUpdateSpeedMenu, ID_VIEW_UPDATESPEED_HIGH, ID_VIEW_UPDATESPEED_PAUSED, ID_VIEW_UPDATESPEED_PAUSED, MF_BYCOMMAND);
- KillTimer(hMainWnd, 1);
-}
+ /* Initialize global variables */
+ hInst = hInstance;
-void TaskManager_OnTabWndSelChange(void)
-{
- int i;
- HMENU hMenu;
- HMENU hOptionsMenu;
- HMENU hViewMenu;
- HMENU hSubMenu;
+ /* Change our priority class to HIGH */
+ hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId());
+ SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS);
+ CloseHandle(hProcess);
- hMenu = GetMenu(hMainWnd);
- hViewMenu = GetSubMenu(hMenu, 2);
- hOptionsMenu = GetSubMenu(hMenu, 1);
- TaskManagerSettings.ActiveTabPage = TabCtrl_GetCurSel(hTabWnd);
- for (i = GetMenuItemCount(hViewMenu) - 1; i > 2; i--) {
- hSubMenu = GetSubMenu(hViewMenu, i);
- if (hSubMenu)
- DestroyMenu(hSubMenu);
- RemoveMenu(hViewMenu, i, MF_BYPOSITION);
- }
- RemoveMenu(hOptionsMenu, 3, MF_BYPOSITION);
- switch (TaskManagerSettings.ActiveTabPage) {
- case 0:
- ShowWindow(hApplicationPage, SW_SHOW);
- ShowWindow(hProcessPage, SW_HIDE);
- ShowWindow(hPerformancePage, SW_HIDE);
- BringWindowToTop(hApplicationPage);
- AppendMenu(hViewMenu, MF_STRING, ID_VIEW_LARGE, _T("Lar&ge Icons"));
- AppendMenu(hViewMenu, MF_STRING, ID_VIEW_SMALL, _T("S&mall Icons"));
- AppendMenu(hViewMenu, MF_STRING, ID_VIEW_DETAILS, _T("&Details"));
+ /* Now let's get the SE_DEBUG_NAME privilege
+ * so that we can debug processes
+ */
- if (GetMenuItemCount(hMenu) <= 4) {
- hSubMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_WINDOWSMENU));
- InsertMenu(hMenu, 3, MF_BYPOSITION|MF_POPUP, (UINT)hSubMenu, _T("&Windows"));
- DrawMenuBar(hMainWnd);
- }
- if (TaskManagerSettings.View_LargeIcons)
- CheckMenuRadioItem(hViewMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_LARGE, MF_BYCOMMAND);
- else if (TaskManagerSettings.View_SmallIcons)
- CheckMenuRadioItem(hViewMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_SMALL, MF_BYCOMMAND);
- else
- CheckMenuRadioItem(hViewMenu, ID_VIEW_LARGE, ID_VIEW_DETAILS, ID_VIEW_DETAILS, MF_BYCOMMAND);
- /*
- * Give the application list control focus
- */
- SetFocus(hApplicationPageListCtrl);
- break;
+ /* Get a token for this process. */
+ if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
+ /* Get the LUID for the debug privilege. */
+ LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid);
- case 1:
- ShowWindow(hApplicationPage, SW_HIDE);
- ShowWindow(hProcessPage, SW_SHOW);
- ShowWindow(hPerformancePage, SW_HIDE);
- BringWindowToTop(hProcessPage);
- AppendMenu(hViewMenu, MF_STRING, ID_VIEW_SELECTCOLUMNS, _T("&Select Columns..."));
- AppendMenu(hOptionsMenu, MF_STRING, ID_OPTIONS_SHOW16BITTASKS, _T("&Show 16-bit tasks"));
- if (TaskManagerSettings.Show16BitTasks)
- CheckMenuItem(hOptionsMenu, ID_OPTIONS_SHOW16BITTASKS, MF_BYCOMMAND|MF_CHECKED);
- if (GetMenuItemCount(hMenu) > 4)
- {
- RemoveMenu(hMenu, 3, MF_BYPOSITION);
- DrawMenuBar(hMainWnd);
- }
- /*
- * Give the process list control focus
- */
- SetFocus(hProcessPageListCtrl);
- break;
+ tkp.PrivilegeCount = 1; /* one privilege to set */
+ tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
- case 2:
- ShowWindow(hApplicationPage, SW_HIDE);
- ShowWindow(hProcessPage, SW_HIDE);
- ShowWindow(hPerformancePage, SW_SHOW);
- BringWindowToTop(hPerformancePage);
- if (GetMenuItemCount(hMenu) > 4) {
- RemoveMenu(hMenu, 3, MF_BYPOSITION);
- DrawMenuBar(hMainWnd);
- }
- hSubMenu = CreatePopupMenu();
- AppendMenu(hSubMenu, MF_STRING, ID_VIEW_CPUHISTORY_ONEGRAPHALL, _T("&One Graph, All CPUs"));
- AppendMenu(hSubMenu, MF_STRING, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, _T("One Graph &Per CPU"));
- AppendMenu(hViewMenu, MF_STRING|MF_POPUP, (UINT)hSubMenu, _T("&CPU History"));
- AppendMenu(hViewMenu, MF_STRING, ID_VIEW_SHOWKERNELTIMES, _T("&Show Kernel Times"));
- if (TaskManagerSettings.ShowKernelTimes)
- CheckMenuItem(hViewMenu, ID_VIEW_SHOWKERNELTIMES, MF_BYCOMMAND|MF_CHECKED);
- else
- CheckMenuItem(hViewMenu, ID_VIEW_SHOWKERNELTIMES, MF_BYCOMMAND|MF_UNCHECKED);
- if (TaskManagerSettings.CPUHistory_OneGraphPerCPU)
- CheckMenuRadioItem(hSubMenu, ID_VIEW_CPUHISTORY_ONEGRAPHALL, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, MF_BYCOMMAND);
- else
- CheckMenuRadioItem(hSubMenu, ID_VIEW_CPUHISTORY_ONEGRAPHALL, ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, ID_VIEW_CPUHISTORY_ONEGRAPHALL, MF_BYCOMMAND);
- /*
- * Give the tab control focus
- */
- SetFocus(hTabWnd);
- break;
+ /* Get the debug privilege for this process. */
+ AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
}
-}
-
-LPTSTR GetLastErrorText(LPTSTR lpszBuf, DWORD dwSize)
-{
- DWORD dwRet;
- LPTSTR lpszTemp = NULL;
- dwRet = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ARGUMENT_ARRAY,
- NULL,
- GetLastError(),
- LANG_NEUTRAL,
- (LPTSTR)&lpszTemp,
- 0,
- NULL );
+ /* Load our settings from the registry */
+ LoadSettings();
- /* supplied buffer is not long enough */
- if (!dwRet || ( (long)dwSize < (long)dwRet+14)) {
- lpszBuf[0] = TEXT('\0');
- } else {
- lpszTemp[lstrlen(lpszTemp)-2] = TEXT('\0'); /*remove cr and newline character */
- _stprintf(lpszBuf, TEXT("%s (0x%x)"), lpszTemp, (int)GetLastError());
- }
- if (lpszTemp) {
- LocalFree((HLOCAL)lpszTemp);
+ /* Initialize perf data */
+ if (!PerfDataInitialize()) {
+ return -1;
}
- return lpszBuf;
+
+ DialogBox(hInst, (LPCTSTR)IDD_TASKMGR_DIALOG, NULL, TaskManagerWndProc);
+
+ /* Save our settings to the registry */
+ SaveSettings();
+ PerfDataUninitialize();
+ return 0;
}
More information about the wine-patches
mailing list