[0.4.8][TASKMGR] Mainly Graph-stuff backports 2023-10-31

This backports the following commits:
0.4.15-dev-6770-g ddd1d19b3f [TASKMGR] Get rid of cplusplus extern c (#5808)
partially 0.4.15-dev-6120-g 6e77747b30 [TASKMGR] Simplify tray icon code
0.4.15-dev-6114-g 9a6c85f68a [TASKMGR] Fix PerfDataDeallocCommandLineCache, part of CORE-18014 (unresolved still)
0.4.15-dev-6113-g 7989e3f26c [TASKMGR] GraphCtrl_Dispose: Delete hdcGraph first, part of CORE-18014 (unresolved still)
0.4.15-dev-6112-g dc14a9f6e0 [TASKMGR] GraphCtrl: Use DeleteDC instead of DeleteObject to delete inst->hdcGraph, part of CORE-18014 (unresolved still)
partially 0.4.15-dev-4994-g 15a0f7adb0 picked a tiny part from PR4657 (I picked only the refactoring to switch-statement, no functional changes. Especially NOT the formatting changes which would require the additional winnls.h-include)
0.4.15-dev-3737-g f8faa0b660 [TASKMGR] Fix a heap corruption bug (#4311), just an addendum to PR4141 which is picked with this backport as well. Older branches were never affected.
partially 0.4.15-dev-3514-g 1c82bf0324 [TASKMGR] Avoid freezing in getting icons, from (PR4180) CORE17894. I picked only the 1000ms->100ms part and the stripping of WM_QUERYDRAGICON call. Therefore I don't consider CORE17894 as fully covered.
0.4.15-dev-3486-g 545e1190f2 [TASKMGR] Avoid hangs as much as possible (#4166) CORE17894
partially 0.4.15-dev-3483-g 403222dd4f [TASKMGR] Preserve graphs history on resizes (#4141). I left aside the structs type renaming and OOM-Handling upon graph creation. Picked all the logical changes though.
0.4.15-dev-3269-g 0ed04e3640 [TASKMGR] Make performance graph grid scroll (#3581)
0.4.15-dev-3268-g a4ab9a1e19 [TASKMGR] Formatting only (#3581). Covers the last bits of that PR.

Main motivation was getting the toggling of ShowKernelTimes in the Performance tab
switch on and off in realtime without introducing gaps in the graph.
It also makes the grid scroll together with the data, like on Windows.

Most other parts I picked solely for their binary-shrinking effect.
I decided to strip the ID_HELP_TOPICS from the rc files, as this was not implemented,
and I would never port that back later. So it is one less non-functional-button in the older branches.
I favored memset() over Zeromemory() in this usermode-app everywhere, and favored for (;;) over while(1).

Binary size shrinks slightly on all branches:

master taskmgr.exe RosBEWin2.2.2 GCC8.4.0dbg             696.832 (0.4.15-dev-6820-gb3194e3)
0.4.14 taskmgr.exe RosBEWin2.1.6 GCC4.7.2dbg  549.888 -> 548.864
0.4.13 taskmgr.exe RosBEWin2.1.6 GCC4.7.2dbg  542.720 -> 542.208
0.4.12 taskmgr.exe RosBEWin2.1.6 GCC4.7.2dbg  545.792 -> 543.232
0.4.11 taskmgr.exe RosBEWin2.1.6 GCC4.7.2dbg  545.792 -> 543.232
0.4.10 taskmgr.exe RosBEWin2.1.6 GCC4.7.2dbg  532.480 -> 530.432
0.4. 9 taskmgr.exe RosBEWin2.1.6 GCC4.7.2dbg  532.480 -> 530.432
0.4. 8 taskmgr.exe RosBEWin2.1.6 GCC4.7.2dbg  532.480 -> 530.432
0.4. 7 taskmgr.exe RosBEWin2.1.6 GCC4.7.2dbg  531.456 -> 529.408

       taskmgr.exe MS XPSP3 german                                           140.800 Bytes
0.4.14 taskmgr.exe RosBEWin2.1.6 MSVC2010SP1rls I18N=de-DE  110.080 Bytes -> 109.056 Bytes (my current taskmgr of choice)
0.4. 8 taskmgr.exe RosBEWin2.1.6 MSVC2010SP1rls I18N=en-US  108.032 Bytes -> 105.984 Bytes
0.4. 7 taskmgr.exe RosBEWin2.1.6 MSVC2010SP1rls I18N=en-US  107.520 Bytes -> 105.472 Bytes
This commit is contained in:
Joachim Henze 2023-10-31 21:06:54 +01:00
parent 65e8df62dc
commit a75d4e6c8e
42 changed files with 456 additions and 1109 deletions

View file

@ -17,9 +17,9 @@ typedef struct
HWND hApplicationPage; /* Application List Property Page */
HWND hApplicationPageListCtrl; /* Application ListCtrl Window */
HWND hApplicationPageEndTaskButton; /* Application End Task button */
HWND hApplicationPageSwitchToButton; /* Application Switch To button */
HWND hApplicationPageNewTaskButton; /* Application New Task button */
HWND hApplicationPageEndTaskButton;
HWND hApplicationPageSwitchToButton;
HWND hApplicationPageNewTaskButton;
static int nApplicationPageWidth;
static int nApplicationPageHeight;
static BOOL bSortAscending = TRUE;
@ -82,7 +82,6 @@ void AppPageCleanup(void)
}
}
INT_PTR CALLBACK
ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
@ -133,10 +132,8 @@ ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
#ifdef RUN_APPS_PAGE
hApplicationThread = CreateThread(NULL, 0, ApplicationPageRefreshThread, NULL, 0, &dwApplicationThread);
#endif
/* Refresh page */
ApplicationPageUpdate();
return TRUE;
case WM_DESTROY:
@ -161,7 +158,6 @@ ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
SendMessageW(hMainWnd, WM_COMMAND, MAKEWPARAM(ID_FILE_NEW, 0), 0);
break;
}
break;
case WM_SIZE:
@ -202,7 +198,6 @@ ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
cy = rc.top + nYDifference;
SetWindowPos(hApplicationPageNewTaskButton, NULL, cx, cy, 0, 0, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER);
InvalidateRect(hApplicationPageNewTaskButton, NULL, TRUE);
break;
case WM_NOTIFY:
@ -252,9 +247,9 @@ DWORD WINAPI ApplicationPageRefreshThread(void *lpParameter)
HIMAGELIST hImageListSmall;
/* If we couldn't create the event then exit the thread */
while (1)
for (;;)
{
/* Wait for an the event or application close */
// Wait for an the event or application close
if (GetMessage(&msg, NULL, 0, 0) <= 0)
return 0;
@ -352,14 +347,13 @@ BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
/* Get the icon for this window */
hIcon = NULL;
SendMessageTimeoutW(hWnd, WM_GETICON, bLargeIcon ? ICON_BIG : ICON_SMALL, 0, 0, 1000, (PDWORD_PTR)&hIcon);
SendMessageTimeoutW(hWnd, WM_GETICON, bLargeIcon ? ICON_BIG : ICON_SMALL, 0, 0, 100, (PDWORD_PTR)&hIcon);
if (!hIcon)
{
/* We failed, try to retrieve other icons... */
hIcon = (HICON)(LONG_PTR)GetClassLongPtrW(hWnd, bLargeIcon ? GCL_HICON : GCL_HICONSM);
if (!hIcon) hIcon = (HICON)(LONG_PTR)GetClassLongPtrW(hWnd, bLargeIcon ? GCL_HICONSM : GCL_HICON);
if (!hIcon) SendMessageTimeoutW(hWnd, WM_QUERYDRAGICON, 0, 0, 0, 1000, (PDWORD_PTR)&hIcon);
if (!hIcon) SendMessageTimeoutW(hWnd, WM_GETICON, bLargeIcon ? ICON_SMALL : ICON_BIG, 0, 0, 1000, (PDWORD_PTR)&hIcon);
if (!hIcon) SendMessageTimeoutW(hWnd, WM_GETICON, bLargeIcon ? ICON_SMALL : ICON_BIG, 0, 0, 100, (PDWORD_PTR)&hIcon);
/* If we still do not have any icon, load the default one */
if (!hIcon) hIcon = LoadIconW(hInst, bLargeIcon ? MAKEINTRESOURCEW(IDI_WINDOW) : MAKEINTRESOURCEW(IDI_WINDOWSM));
@ -427,7 +421,6 @@ void AddOrUpdateHwnd(HWND hWnd, WCHAR *szTitle, HICON hIcon, BOOL bHung)
/* Update the list view */
(void)ListView_RedrawItems(hApplicationPageListCtrl, 0, ListView_GetItemCount(hApplicationPageListCtrl));
/* UpdateWindow(hApplicationPageListCtrl); */
InvalidateRect(hApplicationPageListCtrl, NULL, 0);
}
}
@ -526,15 +519,11 @@ void ApplicationPageOnNotify(WPARAM wParam, LPARAM lParam)
case LVN_ITEMCHANGED:
ApplicationPageUpdate();
break;
case LVN_GETDISPINFO:
pAPLI = (LPAPPLICATION_PAGE_LIST_ITEM)pnmdi->item.lParam;
/* Update the item text */
if (pnmdi->item.iSubItem == 0)
wcsncpy(pnmdi->item.pszText, pAPLI->szTitle, pnmdi->item.cchTextMax);
/* Update the item status */
else if (pnmdi->item.iSubItem == 1)
{
if (pAPLI->bHung)
@ -543,20 +532,16 @@ void ApplicationPageOnNotify(WPARAM wParam, LPARAM lParam)
LoadStringW(GetModuleHandleW(NULL), IDS_RUNNING, (LPWSTR) szMsg, _countof(szMsg));
wcsncpy(pnmdi->item.pszText, szMsg, pnmdi->item.cchTextMax);
}
break;
case NM_RCLICK:
if (ListView_GetSelectedCount(hApplicationPageListCtrl) < 1)
ApplicationPageShowContextMenu1();
else
ApplicationPageShowContextMenu2();
break;
case NM_DBLCLK:
ApplicationPage_OnSwitchTo();
break;
case LVN_KEYDOWN:
if (((LPNMLVKEYDOWN)lParam)->wVKey == VK_DELETE)
ApplicationPage_OnEndTask();
@ -573,7 +558,6 @@ void ApplicationPageOnNotify(WPARAM wParam, LPARAM lParam)
else
ApplicationPageShowContextMenu2();
break;
case HDN_ITEMCLICK:
(void)ListView_SortItems(hApplicationPageListCtrl, ApplicationPageCompareFunc, 0);
bSortAscending = !bSortAscending;
@ -708,9 +692,8 @@ void ApplicationPage_OnWindowsMinimize(void)
(void)ListView_GetItem(hApplicationPageListCtrl, &item);
if (item.state & LVIS_SELECTED) {
pAPLI = (LPAPPLICATION_PAGE_LIST_ITEM)item.lParam;
if (pAPLI) {
ShowWindow(pAPLI->hWnd, SW_MINIMIZE);
}
if (pAPLI)
ShowWindowAsync(pAPLI->hWnd, SW_MINIMIZE);
}
}
}
@ -729,9 +712,8 @@ void ApplicationPage_OnWindowsMaximize(void)
(void)ListView_GetItem(hApplicationPageListCtrl, &item);
if (item.state & LVIS_SELECTED) {
pAPLI = (LPAPPLICATION_PAGE_LIST_ITEM)item.lParam;
if (pAPLI) {
ShowWindow(pAPLI->hWnd, SW_MAXIMIZE);
}
if (pAPLI)
ShowWindowAsync(pAPLI->hWnd, SW_MAXIMIZE);
}
}
}
@ -782,11 +764,8 @@ void ApplicationPage_OnWindowsBringToFront(void)
break;
}
}
if (pAPLI) {
if (IsIconic(pAPLI->hWnd))
ShowWindow(pAPLI->hWnd, SW_RESTORE);
BringWindowToTop(pAPLI->hWnd);
}
if (pAPLI)
SwitchToThisWindow(pAPLI->hWnd, TRUE);
}
void ApplicationPage_OnSwitchTo(void)
@ -808,21 +787,9 @@ void ApplicationPage_OnSwitchTo(void)
}
}
if (pAPLI) {
typedef void (WINAPI *PROCSWITCHTOTHISWINDOW) (HWND, BOOL);
PROCSWITCHTOTHISWINDOW SwitchToThisWindow;
HMODULE hUser32 = GetModuleHandleW(L"USER32");
SwitchToThisWindow = (PROCSWITCHTOTHISWINDOW)GetProcAddress(hUser32, "SwitchToThisWindow");
if (SwitchToThisWindow) {
SwitchToThisWindow(pAPLI->hWnd, TRUE);
} else {
if (IsIconic(pAPLI->hWnd))
ShowWindow(pAPLI->hWnd, SW_RESTORE);
BringWindowToTop(pAPLI->hWnd);
SetForegroundWindow(pAPLI->hWnd);
}
SwitchToThisWindow(pAPLI->hWnd, TRUE);
if (TaskManagerSettings.MinimizeOnUse)
ShowWindow(hMainWnd, SW_MINIMIZE);
ShowWindowAsync(hMainWnd, SW_MINIMIZE);
}
}
@ -843,9 +810,8 @@ void ApplicationPage_OnEndTask(void)
(void)ListView_GetItem(hApplicationPageListCtrl, &item);
if (item.state & LVIS_SELECTED) {
pAPLI = (LPAPPLICATION_PAGE_LIST_ITEM)item.lParam;
if (pAPLI) {
if (pAPLI)
EndTask(pAPLI->hWnd, 0, ForceEndTask);
}
}
}
}

View file

@ -8,14 +8,13 @@
extern HWND hApplicationPage; /* Application List Property Page */
extern HWND hApplicationPageListCtrl; /* Application ListCtrl Window */
extern HWND hApplicationPageEndTaskButton; /* Application End Task button */
extern HWND hApplicationPageSwitchToButton; /* Application Switch To button */
extern HWND hApplicationPageNewTaskButton; /* Application New Task button */
extern HWND hApplicationPageEndTaskButton;
extern HWND hApplicationPageSwitchToButton;
extern HWND hApplicationPageNewTaskButton;
INT_PTR CALLBACK ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
void RefreshApplicationPage(void);
void UpdateApplicationListControlViewSetting(void);
void ApplicationPage_OnView(DWORD);
void ApplicationPage_OnWindowsTile(DWORD);
void ApplicationPage_OnWindowsMinimize(void);

View file

@ -68,8 +68,8 @@ void ProcessPage_OnDebug(void)
wsprintfW(strDebugPath, strDebugger, dwProcessId, hDebugEvent);
ZeroMemory(&pi, sizeof(pi));
ZeroMemory(&si, sizeof(si));
memset(&pi, 0, sizeof(pi));
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
if (!CreateProcessW(NULL, strDebugPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{

View file

@ -6,11 +6,6 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#define BRIGHT_GREEN RGB(0, 255, 0)
#define MEDIUM_GREEN RGB(0, 190, 0)
#define DARK_GREEN RGB(0, 130, 0)
@ -19,8 +14,3 @@ extern "C" {
extern WNDPROC OldGraphWndProc;
INT_PTR CALLBACK Graph_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
#ifdef __cplusplus
};
#endif

View file

@ -6,311 +6,252 @@
#include "precomp.h"
#include <math.h>
WNDPROC OldGraphCtrlWndProc;
static void GraphCtrl_Init(TGraphCtrl* this)
void GraphCtrl_Create(PTGraphCtrl inst, HWND hWnd, HWND hParentWnd, PTFormat fmt)
{
int i;
HDC hdc, hdcg;
HBITMAP hbmOld;
UINT Size;
INT p;
RECT rc;
this->m_hWnd = 0;
this->m_hParentWnd = 0;
this->m_dcGrid = 0;
this->m_dcPlot = 0;
this->m_bitmapOldGrid = 0;
this->m_bitmapOldPlot = 0;
this->m_bitmapGrid = 0;
this->m_bitmapPlot = 0;
this->m_brushBack = 0;
inst->hParentWnd = hParentWnd;
inst->hWnd = hWnd;
this->m_penPlot[0] = 0;
this->m_penPlot[1] = 0;
this->m_penPlot[2] = 0;
this->m_penPlot[3] = 0;
Size = GetSystemMetrics(SM_CXSCREEN);
inst->BitmapWidth = Size;
Size /= PLOT_SHIFT;
inst->PointBuffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, Size * NUM_PLOTS);
if (!inst->PointBuffer)
goto fail;
this->m_dPreviousPosition[0] = 0.0;
this->m_dPreviousPosition[1] = 0.0;
this->m_dPreviousPosition[2] = 0.0;
this->m_dPreviousPosition[3] = 0.0;
inst->NumberOfPoints = Size;
inst->CurrIndex = 0;
this->m_nYDecimals = 3;
inst->hPenGrid = CreatePen(PS_SOLID, 0, fmt->clrGrid);
inst->hPen0 = CreatePen(PS_SOLID, 0, fmt->clrPlot0);
inst->hPen1 = CreatePen(PS_SOLID, 0, fmt->clrPlot1);
inst->hBrushBack = CreateSolidBrush(fmt->clrBack);
this->m_dLowerLimit = 0.0;
this->m_dUpperLimit = 100.0;
this->m_dRange = this->m_dUpperLimit - this->m_dLowerLimit;
if (!inst->hPenGrid || !inst->hPen0 || !inst->hPen1 || !inst->hBrushBack)
goto fail;
this->m_nShiftPixels = 4;
this->m_nHalfShiftPixels = this->m_nShiftPixels/2;
this->m_nPlotShiftPixels = this->m_nShiftPixels + this->m_nHalfShiftPixels;
if (fmt->GridCellWidth >= PLOT_SHIFT << 2)
inst->GridCellWidth = fmt->GridCellWidth;
else
inst->GridCellWidth = PLOT_SHIFT << 2;
if (fmt->GridCellHeight >= PLOT_SHIFT << 2)
inst->GridCellHeight = fmt->GridCellHeight;
else
inst->GridCellHeight = PLOT_SHIFT << 2;
this->m_crBackColor = RGB( 0, 0, 0);
this->m_crGridColor = RGB( 0, 128, 64);
this->m_crPlotColor[0] = RGB(255, 255, 255);
this->m_crPlotColor[1] = RGB(100, 255, 255);
this->m_crPlotColor[2] = RGB(255, 100, 255);
this->m_crPlotColor[3] = RGB(255, 255, 100);
inst->DrawSecondaryPlot = fmt->DrawSecondaryPlot;
for (i = 0; i < MAX_PLOTS; i++)
this->m_penPlot[i] = CreatePen(PS_SOLID, 0, this->m_crPlotColor[i]);
this->m_brushBack = CreateSolidBrush(this->m_crBackColor);
GetClientRect(hWnd, &rc);
inst->BitmapHeight = rc.bottom;
inst->ftPixelsPerPercent = (FLOAT)(inst->BitmapHeight) / 100.00f;
strcpy(this->m_strXUnitsString, "Samples");
strcpy(this->m_strYUnitsString, "Y units");
hdc = GetDC(hParentWnd);
hdcg = CreateCompatibleDC(hdc);
inst->hdcGraph = hdcg;
inst->hbmGraph = CreateCompatibleBitmap(hdc, inst->BitmapWidth, inst->BitmapHeight);
this->m_bitmapOldGrid = NULL;
this->m_bitmapOldPlot = NULL;
}
if (!hdc || !hdcg || !inst->hbmGraph)
goto fail;
void GraphCtrl_Dispose(TGraphCtrl* this)
{
int plot;
ReleaseDC(hParentWnd, hdc);
hbmOld = (HBITMAP)SelectObject(hdcg, inst->hbmGraph);
DeleteObject(hbmOld);
for (plot = 0; plot < MAX_PLOTS; plot++)
DeleteObject(this->m_penPlot[plot]);
SetBkColor(hdcg, fmt->clrBack);
rc.right = inst->BitmapWidth;
FillRect(hdcg, &rc, inst->hBrushBack);
if (this->m_bitmapOldGrid != NULL) SelectObject(this->m_dcGrid, this->m_bitmapOldGrid);
if (this->m_bitmapOldPlot != NULL) SelectObject(this->m_dcPlot, this->m_bitmapOldPlot);
if (this->m_bitmapGrid != NULL) DeleteObject(this->m_bitmapGrid);
if (this->m_bitmapPlot != NULL) DeleteObject(this->m_bitmapPlot);
if (this->m_dcGrid != NULL) DeleteDC(this->m_dcGrid);
if (this->m_dcPlot != NULL) DeleteDC(this->m_dcPlot);
if (this->m_brushBack != NULL) DeleteObject(this->m_brushBack);
}
void GraphCtrl_Create(TGraphCtrl* this, HWND hWnd, HWND hParentWnd, UINT nID)
{
GraphCtrl_Init(this);
this->m_hParentWnd = hParentWnd;
this->m_hWnd = hWnd;
GraphCtrl_Resize(this);
}
void GraphCtrl_SetRange(TGraphCtrl* this, double dLower, double dUpper, int nDecimalPlaces)
{
this->m_dLowerLimit = dLower;
this->m_dUpperLimit = dUpper;
this->m_nYDecimals = nDecimalPlaces;
this->m_dRange = this->m_dUpperLimit - this->m_dLowerLimit;
this->m_dVerticalFactor = (double)this->m_nPlotHeight / this->m_dRange;
GraphCtrl_InvalidateCtrl(this, FALSE);
}
void GraphCtrl_SetGridColor(TGraphCtrl* this, COLORREF color)
{
this->m_crGridColor = color;
GraphCtrl_InvalidateCtrl(this, FALSE);
}
void GraphCtrl_SetPlotColor(TGraphCtrl* this, int plot, COLORREF color)
{
this->m_crPlotColor[plot] = color;
DeleteObject(this->m_penPlot[plot]);
this->m_penPlot[plot] = CreatePen(PS_SOLID, 0, this->m_crPlotColor[plot]);
GraphCtrl_InvalidateCtrl(this, FALSE);
}
void GraphCtrl_SetBackgroundColor(TGraphCtrl* this, COLORREF color)
{
this->m_crBackColor = color;
DeleteObject(this->m_brushBack);
this->m_brushBack = CreateSolidBrush(this->m_crBackColor);
GraphCtrl_InvalidateCtrl(this, FALSE);
}
void GraphCtrl_InvalidateCtrl(TGraphCtrl* this, BOOL bResize)
{
int i;
int nCharacters;
HPEN oldPen;
HPEN solidPen = CreatePen(PS_SOLID, 0, this->m_crGridColor);
HDC dc = GetDC(this->m_hParentWnd);
if (this->m_dcGrid == NULL)
inst->CurrShift = 0;
SelectObject(hdcg, inst->hPenGrid);
for (p = inst->GridCellHeight - 1; p < inst->BitmapHeight; p += inst->GridCellHeight)
{
this->m_dcGrid = CreateCompatibleDC(dc);
this->m_bitmapGrid = CreateCompatibleBitmap(dc, this->m_nClientWidth, this->m_nClientHeight);
this->m_bitmapOldGrid = (HBITMAP)SelectObject(this->m_dcGrid, this->m_bitmapGrid);
MoveToEx(hdcg, 0, p, NULL);
LineTo(hdcg, inst->BitmapWidth, p);
}
else if(bResize)
for (p = inst->BitmapWidth - 1; p > 0; p -= inst->GridCellWidth)
{
if(this->m_bitmapGrid != NULL)
MoveToEx(hdcg, p, 0, NULL);
LineTo(hdcg, p, inst->BitmapHeight);
}
SelectObject(hdcg, inst->hPen0);
return;
fail:
GraphCtrl_Dispose(inst);
}
void GraphCtrl_Dispose(PTGraphCtrl inst)
{
if (inst->PointBuffer)
HeapFree(GetProcessHeap(), 0, inst->PointBuffer);
if (inst->hdcGraph)
DeleteDC(inst->hdcGraph);
if (inst->hPenGrid)
DeleteObject(inst->hPenGrid);
if (inst->hPen0)
DeleteObject(inst->hPen0);
if (inst->hPen1)
DeleteObject(inst->hPen1);
if (inst->hBrushBack)
DeleteObject(inst->hBrushBack);
if (inst->hbmGraph)
DeleteObject(inst->hbmGraph);
}
void GraphCtrl_AddPoint(PTGraphCtrl inst, BYTE val0, BYTE val1)
{
HDC hdcg;
PBYTE t;
RECT rcDirt;
UINT Prev0, Prev1, RetainingWidth;
INT PrevY, CurrY, p, v;
hdcg = inst->hdcGraph;
RetainingWidth = inst->BitmapWidth - PLOT_SHIFT;
t = inst->PointBuffer;
Prev0 = *(t + inst->CurrIndex);
Prev1 = *(t + inst->CurrIndex + inst->NumberOfPoints);
if (inst->CurrIndex < inst->NumberOfPoints - 1)
inst->CurrIndex++;
else
inst->CurrIndex = 0;
*(t + inst->CurrIndex) = val0;
*(t + inst->CurrIndex + inst->NumberOfPoints) = val1;
// Drawing points, first shifting the plot left
BitBlt(hdcg, 0, 0, RetainingWidth, inst->BitmapHeight, hdcg, PLOT_SHIFT, 0, SRCCOPY);
rcDirt.left = RetainingWidth;
rcDirt.top = 0;
rcDirt.right = inst->BitmapWidth;
rcDirt.bottom = inst->BitmapHeight;
FillRect(hdcg, &rcDirt, inst->hBrushBack);
SelectObject(hdcg, inst->hPenGrid);
for (p = inst->GridCellHeight - 1; p < inst->BitmapHeight; p += inst->GridCellHeight)
{
MoveToEx(hdcg, RetainingWidth, p, NULL);
LineTo(hdcg, inst->BitmapWidth, p);
}
v = inst->CurrShift + PLOT_SHIFT;
if (v >= inst->GridCellWidth)
{
v -= inst->GridCellWidth;
p = inst->BitmapWidth - v - 1;
MoveToEx(hdcg, p, 0, NULL);
LineTo(hdcg, p, inst->BitmapHeight);
}
inst->CurrShift = v;
if (inst->DrawSecondaryPlot)
{
SelectObject(inst->hdcGraph, inst->hPen1);
PrevY = inst->BitmapHeight - Prev1 * inst->ftPixelsPerPercent;
MoveToEx(inst->hdcGraph, RetainingWidth - 1, PrevY, NULL);
CurrY = inst->BitmapHeight - val1 * inst->ftPixelsPerPercent;
LineTo(inst->hdcGraph, inst->BitmapWidth - 1, CurrY);
}
SelectObject(inst->hdcGraph, inst->hPen0);
PrevY = inst->BitmapHeight - Prev0 * inst->ftPixelsPerPercent;
MoveToEx(inst->hdcGraph, RetainingWidth - 1, PrevY, NULL);
CurrY = inst->BitmapHeight - val0 * inst->ftPixelsPerPercent;
LineTo(inst->hdcGraph, inst->BitmapWidth - 1, CurrY);
}
inline void GraphCtrl_RedrawBitmap(PTGraphCtrl inst, INT h)
{
HDC hdcg;
PBYTE t;
RECT rc;
INT i, j, y, x, p;
FLOAT coef;
hdcg = inst->hdcGraph;
rc.left = 0; rc.top = 0;
rc.right = inst->BitmapWidth; rc.bottom = h;
FillRect(hdcg, &rc, inst->hBrushBack);
SelectObject(hdcg, inst->hPenGrid);
for (p = inst->GridCellHeight - 1; p < inst->BitmapHeight; p += inst->GridCellHeight)
{
MoveToEx(hdcg, 0, p, NULL);
LineTo(hdcg, inst->BitmapWidth, p);
}
for (p = inst->BitmapWidth - inst->CurrShift - 1; p > 0; p -= inst->GridCellWidth)
{
MoveToEx(hdcg, p, 0, NULL);
LineTo(hdcg, p, inst->BitmapHeight);
}
coef = inst->ftPixelsPerPercent;
if (inst->DrawSecondaryPlot)
{
SelectObject(hdcg, inst->hPen1);
t = inst->PointBuffer + inst->NumberOfPoints;
x = inst->BitmapWidth - 1;
j = inst->CurrIndex;
y = h - *(t + j) * coef;
MoveToEx(hdcg, x, y, NULL);
for (i = 0; i < inst->NumberOfPoints; i++)
{
this->m_bitmapGrid = (HBITMAP)SelectObject(this->m_dcGrid, this->m_bitmapOldGrid);
DeleteObject(this->m_bitmapGrid);
this->m_bitmapGrid = CreateCompatibleBitmap(dc, this->m_nClientWidth, this->m_nClientHeight);
SelectObject(this->m_dcGrid, this->m_bitmapGrid);
j = (j ? j : inst->NumberOfPoints) - 1;
y = h - *(t + j) * coef;
x -= PLOT_SHIFT;
LineTo(hdcg, x, y);
}
}
SetBkColor(this->m_dcGrid, this->m_crBackColor);
SelectObject(hdcg, inst->hPen0);
t = inst->PointBuffer;
x = inst->BitmapWidth - 1;
j = inst->CurrIndex;
y = h - *(t + j) * coef;
MoveToEx(hdcg, x, y, NULL);
FillRect(this->m_dcGrid, &this->m_rectClient, this->m_brushBack);
nCharacters = abs((int)log10(fabs(this->m_dUpperLimit)));
nCharacters = max(nCharacters, abs((int)log10(fabs(this->m_dLowerLimit))));
nCharacters = nCharacters + 4 + this->m_nYDecimals;
this->m_rectPlot.left = this->m_rectClient.left;
this->m_nPlotWidth = this->m_rectPlot.right - this->m_rectPlot.left;
oldPen = (HPEN)SelectObject(this->m_dcGrid, solidPen);
MoveToEx(this->m_dcGrid, this->m_rectPlot.left, this->m_rectPlot.top, NULL);
LineTo(this->m_dcGrid, this->m_rectPlot.right+1, this->m_rectPlot.top);
LineTo(this->m_dcGrid, this->m_rectPlot.right+1, this->m_rectPlot.bottom+1);
LineTo(this->m_dcGrid, this->m_rectPlot.left, this->m_rectPlot.bottom+1);
for (i = this->m_rectPlot.top; i < this->m_rectPlot.bottom; i += 12)
for (i = 0; i < inst->NumberOfPoints; i++)
{
MoveToEx(this->m_dcGrid, this->m_rectPlot.left, this->m_rectPlot.top + i, NULL);
LineTo(this->m_dcGrid, this->m_rectPlot.right, this->m_rectPlot.top + i);
}
for (i = this->m_rectPlot.left; i < this->m_rectPlot.right; i += 12)
{
MoveToEx(this->m_dcGrid, this->m_rectPlot.left + i, this->m_rectPlot.bottom, NULL);
LineTo(this->m_dcGrid, this->m_rectPlot.left + i, this->m_rectPlot.top);
}
SelectObject(this->m_dcGrid, oldPen);
DeleteObject(solidPen);
if (this->m_dcPlot == NULL)
{
this->m_dcPlot = CreateCompatibleDC(dc);
this->m_bitmapPlot = CreateCompatibleBitmap(dc, this->m_nClientWidth, this->m_nClientHeight);
this->m_bitmapOldPlot = (HBITMAP)SelectObject(this->m_dcPlot, this->m_bitmapPlot);
}
else if(bResize)
{
if(this->m_bitmapPlot != NULL)
{
this->m_bitmapPlot = (HBITMAP)SelectObject(this->m_dcPlot, this->m_bitmapOldPlot);
DeleteObject(this->m_bitmapPlot);
this->m_bitmapPlot = CreateCompatibleBitmap(dc, this->m_nClientWidth, this->m_nClientHeight);
SelectObject(this->m_dcPlot, this->m_bitmapPlot);
}
}
SetBkColor(this->m_dcPlot, this->m_crBackColor);
FillRect(this->m_dcPlot, &this->m_rectClient, this->m_brushBack);
InvalidateRect(this->m_hParentWnd, &this->m_rectClient, TRUE);
ReleaseDC(this->m_hParentWnd, dc);
}
double GraphCtrl_AppendPoint(TGraphCtrl* this,
double dNewPoint0, double dNewPoint1,
double dNewPoint2, double dNewPoint3)
{
double dPrevious;
dPrevious = this->m_dCurrentPosition[0];
this->m_dCurrentPosition[0] = dNewPoint0;
this->m_dCurrentPosition[1] = dNewPoint1;
this->m_dCurrentPosition[2] = dNewPoint2;
this->m_dCurrentPosition[3] = dNewPoint3;
GraphCtrl_DrawPoint(this);
return dPrevious;
}
void GraphCtrl_Paint(TGraphCtrl* this, HWND hWnd, HDC dc)
{
HDC memDC;
HBITMAP memBitmap;
HBITMAP oldBitmap;
memDC = CreateCompatibleDC(dc);
memBitmap = (HBITMAP)CreateCompatibleBitmap(dc, this->m_nClientWidth, this->m_nClientHeight);
oldBitmap = (HBITMAP)SelectObject(memDC, memBitmap);
if (memDC != NULL)
{
BitBlt(memDC, 0, 0, this->m_nClientWidth, this->m_nClientHeight, this->m_dcGrid, 0, 0, SRCCOPY);
BitBlt(memDC, 0, 0, this->m_nClientWidth, this->m_nClientHeight, this->m_dcPlot, 0, 0, SRCPAINT);
BitBlt(dc, 0, 0, this->m_nClientWidth, this->m_nClientHeight, memDC, 0, 0, SRCCOPY);
}
SelectObject(memDC, oldBitmap);
DeleteObject(memBitmap);
DeleteDC(memDC);
}
void GraphCtrl_DrawPoint(TGraphCtrl* this)
{
int currX, prevX, currY, prevY;
HPEN oldPen;
RECT rectCleanUp;
int i;
if (this->m_dcPlot != NULL)
{
BitBlt(this->m_dcPlot, this->m_rectPlot.left, this->m_rectPlot.top+1,
this->m_nPlotWidth, this->m_nPlotHeight, this->m_dcPlot,
this->m_rectPlot.left+this->m_nShiftPixels, this->m_rectPlot.top+1,
SRCCOPY);
rectCleanUp = this->m_rectPlot;
rectCleanUp.left = rectCleanUp.right - this->m_nShiftPixels;
FillRect(this->m_dcPlot, &rectCleanUp, this->m_brushBack);
for (i = 0; i < MAX_PLOTS; i++)
{
oldPen = (HPEN)SelectObject(this->m_dcPlot, this->m_penPlot[i]);
prevX = this->m_rectPlot.right-this->m_nPlotShiftPixels;
prevY = this->m_rectPlot.bottom -
(long)((this->m_dPreviousPosition[i] - this->m_dLowerLimit) * this->m_dVerticalFactor);
MoveToEx(this->m_dcPlot, prevX, prevY, NULL);
currX = this->m_rectPlot.right-this->m_nHalfShiftPixels;
currY = this->m_rectPlot.bottom -
(long)((this->m_dCurrentPosition[i] - this->m_dLowerLimit) * this->m_dVerticalFactor);
LineTo(this->m_dcPlot, currX, currY);
SelectObject(this->m_dcPlot, oldPen);
if ((prevY <= this->m_rectPlot.top) || (currY <= this->m_rectPlot.top))
{
RECT rc;
rc.bottom = this->m_rectPlot.top+1;
rc.left = prevX;
rc.right = currX+1;
rc.top = this->m_rectClient.top;
FillRect(this->m_dcPlot, &rc, this->m_brushBack);
}
if ((prevY >= this->m_rectPlot.bottom) || (currY >= this->m_rectPlot.bottom))
{
RECT rc;
rc.bottom = this->m_rectClient.bottom+1;
rc.left = prevX;
rc.right = currX+1;
rc.top = this->m_rectPlot.bottom+1;
FillRect(this->m_dcPlot, &rc, this->m_brushBack);
}
this->m_dPreviousPosition[i] = this->m_dCurrentPosition[i];
}
j = (j ? j : inst->NumberOfPoints) - 1;
y = h - *(t + j) * coef;
x -= PLOT_SHIFT;
LineTo(hdcg, x, y);
}
}
void GraphCtrl_Resize(TGraphCtrl* this)
inline void GraphCtrl_RedrawOnHeightChange(PTGraphCtrl inst, INT nh)
{
GetClientRect(this->m_hWnd, &this->m_rectClient);
HDC hdc;
HBITMAP hbmOld;
this->m_nClientHeight = this->m_rectClient.bottom - this->m_rectClient.top;
this->m_nClientWidth = this->m_rectClient.right - this->m_rectClient.left;
inst->BitmapHeight = nh;
inst->ftPixelsPerPercent = (FLOAT)nh / 100.00f;
this->m_rectPlot.left = 0;
this->m_rectPlot.top = -1;
this->m_rectPlot.right = this->m_rectClient.right;
this->m_rectPlot.bottom = this->m_rectClient.bottom;
hdc = GetDC(inst->hParentWnd);
hbmOld = inst->hbmGraph;
inst->hbmGraph = CreateCompatibleBitmap(hdc, inst->BitmapWidth, nh);
SelectObject(inst->hdcGraph, inst->hbmGraph);
DeleteObject(hbmOld);
ReleaseDC(inst->hParentWnd, hdc);
this->m_nPlotHeight = this->m_rectPlot.bottom - this->m_rectPlot.top;
this->m_nPlotWidth = this->m_rectPlot.right - this->m_rectPlot.left;
this->m_dVerticalFactor = (double)this->m_nPlotHeight / this->m_dRange;
GraphCtrl_RedrawBitmap(inst, nh);
}
extern TGraphCtrl PerformancePageCpuUsageHistoryGraph;
@ -321,6 +262,7 @@ extern HWND hPerformancePageMemUsageHistoryGraph;
INT_PTR CALLBACK
GraphCtrl_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PTGraphCtrl graph;
RECT rcClient;
HDC hdc;
PAINTSTRUCT ps;
@ -371,24 +313,32 @@ GraphCtrl_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
case WM_NCCALCSIZE:
return 0;
case WM_SIZE:
if (hWnd == hPerformancePageMemUsageHistoryGraph)
{
GraphCtrl_Resize(&PerformancePageMemUsageHistoryGraph);
GraphCtrl_InvalidateCtrl(&PerformancePageMemUsageHistoryGraph, TRUE);
}
if (hWnd == hPerformancePageCpuUsageHistoryGraph)
{
GraphCtrl_Resize(&PerformancePageCpuUsageHistoryGraph);
GraphCtrl_InvalidateCtrl(&PerformancePageCpuUsageHistoryGraph, TRUE);
}
graph = &PerformancePageCpuUsageHistoryGraph;
else if (hWnd == hPerformancePageMemUsageHistoryGraph)
graph = &PerformancePageMemUsageHistoryGraph;
else
return 0;
if (HIWORD(lParam) != graph->BitmapHeight)
GraphCtrl_RedrawOnHeightChange(graph, HIWORD(lParam));
InvalidateRect(hWnd, NULL, FALSE);
return 0;
case WM_PAINT:
if (hWnd == hPerformancePageCpuUsageHistoryGraph)
graph = &PerformancePageCpuUsageHistoryGraph;
else if (hWnd == hPerformancePageMemUsageHistoryGraph)
graph = &PerformancePageMemUsageHistoryGraph;
else
return 0;
hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rcClient);
if (hWnd == hPerformancePageMemUsageHistoryGraph)
GraphCtrl_Paint(&PerformancePageMemUsageHistoryGraph, hWnd, hdc);
if (hWnd == hPerformancePageCpuUsageHistoryGraph)
GraphCtrl_Paint(&PerformancePageCpuUsageHistoryGraph, hWnd, hdc);
BitBlt(hdc, 0, 0,
rcClient.right,
rcClient.bottom,
graph->hdcGraph,
graph->BitmapWidth - rcClient.right,
0,
SRCCOPY);
EndPaint(hWnd, &ps);
return 0;
}

View file

@ -6,72 +6,47 @@
#pragma once
#define MAX_PLOTS 4
#define MAX_CTRLS 4
#ifdef __cplusplus
extern "C" {
#endif
#define NUM_PLOTS 2
#define PLOT_SHIFT 2
typedef struct
{
int m_nShiftPixels;
int m_nYDecimals;
HWND hParentWnd;
HWND hWnd;
HDC hdcGraph;
HBITMAP hbmGraph;
HPEN hPenGrid;
HPEN hPen0;
HPEN hPen1;
HBRUSH hBrushBack;
INT BitmapWidth;
INT BitmapHeight;
INT GridCellWidth;
INT GridCellHeight;
INT CurrShift;
PBYTE PointBuffer;
UINT32 NumberOfPoints;
UINT32 CurrIndex;
FLOAT ftPixelsPerPercent;
BOOL DrawSecondaryPlot;
} TGraphCtrl, *PTGraphCtrl;
char m_strXUnitsString[50];
char m_strYUnitsString[50];
COLORREF m_crBackColor;
COLORREF m_crGridColor;
COLORREF m_crPlotColor[MAX_PLOTS];
double m_dCurrentPosition[MAX_PLOTS];
double m_dPreviousPosition[MAX_PLOTS];
int m_nHalfShiftPixels;
int m_nPlotShiftPixels;
int m_nClientHeight;
int m_nClientWidth;
int m_nPlotHeight;
int m_nPlotWidth;
double m_dLowerLimit;
double m_dUpperLimit;
double m_dRange;
double m_dVerticalFactor;
HWND m_hWnd;
HWND m_hParentWnd;
HDC m_dcGrid;
HDC m_dcPlot;
HBITMAP m_bitmapOldGrid;
HBITMAP m_bitmapOldPlot;
HBITMAP m_bitmapGrid;
HBITMAP m_bitmapPlot;
HBRUSH m_brushBack;
HPEN m_penPlot[MAX_PLOTS];
RECT m_rectClient;
RECT m_rectPlot;
} TGraphCtrl;
typedef struct
{
COLORREF clrBack;
COLORREF clrGrid;
COLORREF clrPlot0;
COLORREF clrPlot1;
INT GridCellWidth;
INT GridCellHeight;
BOOL DrawSecondaryPlot;
} TFormat, *PTFormat;
extern WNDPROC OldGraphCtrlWndProc;
double GraphCtrl_AppendPoint(TGraphCtrl* this,
double dNewPoint0, double dNewPoint1,
double dNewPoint2, double dNewPoint3);
void GraphCtrl_Create(TGraphCtrl* this, HWND hWnd, HWND hParentWnd, UINT nID);
void GraphCtrl_Dispose(TGraphCtrl* this);
void GraphCtrl_DrawPoint(TGraphCtrl* this);
void GraphCtrl_InvalidateCtrl(TGraphCtrl* this, BOOL bResize);
void GraphCtrl_Paint(TGraphCtrl* this, HWND hWnd, HDC dc);
void GraphCtrl_Reset(TGraphCtrl* this);
void GraphCtrl_Resize(TGraphCtrl* this);
void GraphCtrl_SetBackgroundColor(TGraphCtrl* this, COLORREF color);
void GraphCtrl_SetGridColor(TGraphCtrl* this, COLORREF color);
void GraphCtrl_SetPlotColor(TGraphCtrl* this, int plot, COLORREF color);
void GraphCtrl_SetRange(TGraphCtrl* this, double dLower, double dUpper, int nDecimalPlaces);
INT_PTR CALLBACK GraphCtrl_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
#ifdef __cplusplus
}
#endif
void GraphCtrl_Create(PTGraphCtrl inst, HWND hWnd, HWND hParentWnd, PTFormat fmt);
void GraphCtrl_Dispose(PTGraphCtrl inst);
void GraphCtrl_AddPoint(PTGraphCtrl inst, BYTE val0, BYTE val1);
void GraphCtrl_RedrawOnHeightChange(PTGraphCtrl inst, INT nh);
void GraphCtrl_RedrawBitmap(PTGraphCtrl inst, INT h);

View file

@ -60,8 +60,6 @@ BEGIN
END
POPUP "Помо&щ"
BEGIN
MENUITEM "Съдържание на помо&щта за задачния управител", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&За задачния управител", ID_HELP_ABOUT
END
END
@ -138,10 +136,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -306,17 +300,11 @@ BEGIN
CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 125, 160, 115, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Задачен управител"
IDC_TASKMGR "Задачен управител"
IDS_IDLE_PROCESS "Бездействия"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Приложения"
IDS_TAB_PROCESSES "Действия"
IDS_TAB_PERFORMANCE "Производителност"

View file

@ -60,8 +60,6 @@ BEGIN
END
POPUP "&Nápověda"
BEGIN
MENUITEM "&Nápověda pro správce úloh", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&O správci úloh", ID_HELP_ABOUT
END
END
@ -138,10 +136,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -306,17 +300,11 @@ BEGIN
CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Správce úloh"
IDC_TASKMGR "Správce úloh"
IDS_IDLE_PROCESS "Nečinné procesy"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Aplikace"
IDS_TAB_PROCESSES "Procesy"
IDS_TAB_PERFORMANCE "Výkon"

View file

@ -60,8 +60,6 @@ BEGIN
END
POPUP "&Hjælp"
BEGIN
MENUITEM "Opgavestyring &Hjælpe Emner", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&Omkring Opgavestyring", ID_HELP_ABOUT
END
END
@ -138,10 +136,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -306,17 +300,11 @@ BEGIN
CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 85, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Opgavestyring"
IDC_TASKMGR "Opgavestyring"
IDS_IDLE_PROCESS "System Idle Process"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Applications"
IDS_TAB_PROCESSES "Processes"
IDS_TAB_PERFORMANCE "Performance"

View file

@ -62,8 +62,6 @@ BEGIN
END
POPUP "&?"
BEGIN
MENUITEM "&Hilfethemen\tF1", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "Inf&o", ID_HELP_ABOUT
END
END
@ -140,10 +138,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -308,17 +302,11 @@ BEGIN
CONTROL "Befeh&lszeile", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Task-Manager"
IDC_TASKMGR "Task-Manager"
IDS_IDLE_PROCESS "Leerlaufprozess"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Anwendungen"
IDS_TAB_PROCESSES "Prozesse"
IDS_TAB_PERFORMANCE "Systemleistung"

View file

@ -62,8 +62,6 @@ BEGIN
END
POPUP "&Βοήθεια"
BEGIN
MENUITEM "Θέματα &Βοήθειας του Διαχειριστή Διεργασιών", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&Σχετικά με τον Διαχειριστή Διεργασιών", ID_HELP_ABOUT
END
END
@ -140,10 +138,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -308,17 +302,11 @@ BEGIN
CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Task Manager"
IDC_TASKMGR "Task Manager"
IDS_IDLE_PROCESS "System Idle Process"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Applications"
IDS_TAB_PROCESSES "Processes"
IDS_TAB_PERFORMANCE "Performance"

View file

@ -60,8 +60,6 @@ BEGIN
END
POPUP "&Help"
BEGIN
MENUITEM "Task Manager &Help Topics", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&About Task Manager", ID_HELP_ABOUT
END
END
@ -138,8 +136,6 @@ BEGIN
END
END
/* Dialogs */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -304,17 +300,11 @@ BEGIN
CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Task Manager"
IDC_TASKMGR "Task Manager"
IDS_IDLE_PROCESS "System Idle Process"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Applications"
IDS_TAB_PROCESSES "Processes"
IDS_TAB_PERFORMANCE "Performance"

View file

@ -62,8 +62,6 @@ BEGIN
END
POPUP "Ay&uda"
BEGIN
MENUITEM "&Temas de Ayuda del Administrador de tareas", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&Acerca del Administrador de tareas", ID_HELP_ABOUT
END
END
@ -140,10 +138,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -308,17 +302,11 @@ BEGIN
CONTROL "&Línea de comandos", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 127, 160, 75, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Administrador de tareas"
IDC_TASKMGR "Administrador de tareas"
IDS_IDLE_PROCESS "Proceso inactivo del sistema"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Aplicaciones"
IDS_TAB_PROCESSES "Procesos"
IDS_TAB_PERFORMANCE "Rendimiento"

View file

@ -62,8 +62,6 @@ BEGIN
END
POPUP "&Aide"
BEGIN
MENUITEM "&Rubriques d'aide du Gestionnaire des tâches", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "À &propos du Gestionnaire des tâches", ID_HELP_ABOUT
END
END
@ -140,10 +138,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -308,17 +302,11 @@ BEGIN
CONTROL "&Ligne de commande", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 129, 160, 95, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Gestionnaire des tâches"
IDC_TASKMGR "Gestionnaire des tâches"
IDS_IDLE_PROCESS "Processus système en attente"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Applications"
IDS_TAB_PROCESSES "Processus"
IDS_TAB_PERFORMANCE "Performance"

View file

@ -1,4 +1,4 @@
/* TRANSLATOR: Baruch Rutman (peterooch) */
// COPYRIGHT: Baruch Rutman (peterooch)
LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT
@ -62,8 +62,6 @@ BEGIN
END
POPUP "&עזרה"
BEGIN
MENUITEM "&נושאי עזרה של מנהל המשימות", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&אודות מנהל המשימות", ID_HELP_ABOUT
END
END
@ -140,10 +138,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -308,17 +302,11 @@ BEGIN
CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "מנהל המשימות"
IDC_TASKMGR "מנהל המשימות"
IDS_IDLE_PROCESS "תהליך לא פעיל של המערכת"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "יישומים"
IDS_TAB_PROCESSES "תהליכים"
IDS_TAB_PERFORMANCE "ביצועים"

View file

@ -62,8 +62,6 @@ BEGIN
END
POPUP "&Súgó"
BEGIN
MENUITEM "&Témakörök", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&Névjegy", ID_HELP_ABOUT
END
END
@ -140,10 +138,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -308,17 +302,11 @@ BEGIN
CONTROL "&Parancssor", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Feladatkezelõ"
IDC_TASKMGR "Feladatkezelõ"
IDS_IDLE_PROCESS "Üresjárat"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Programok"
IDS_TAB_PROCESSES "Folyamatok"
IDS_TAB_PERFORMANCE "Performance"

View file

@ -1,4 +1,4 @@
/* TRANSLATOR: Zaenal Mutaqin <ade999@gmail.com> */
// COPYRIGHT: Zaenal Mutaqin <ade999@gmail.com>
LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT
@ -62,8 +62,6 @@ BEGIN
END
POPUP "&Help"
BEGIN
MENUITEM "Task Manager &Help Topics", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&About Task Manager", ID_HELP_ABOUT
END
END
@ -140,10 +138,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -308,17 +302,11 @@ BEGIN
CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Manajer Tugas"
IDC_TASKMGR "Manajer Tugas"
IDS_IDLE_PROCESS "Proses Diam Sistem"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Aplikasi"
IDS_TAB_PROCESSES "Proses"
IDS_TAB_PERFORMANCE "Kinerja"

View file

@ -60,8 +60,6 @@ BEGIN
END
POPUP "&Aiuto"
BEGIN
MENUITEM "Task Manager &Help Topics", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&Informazioni su Task Manager", ID_HELP_ABOUT
END
END
@ -138,10 +136,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -306,17 +300,11 @@ BEGIN
CONTROL "&Linea di comando", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 70, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Task Manager"
IDC_TASKMGR "Task Manager"
IDS_IDLE_PROCESS "Processo Idle di sistema"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Applicazioni"
IDS_TAB_PROCESSES "Processi"
IDS_TAB_PERFORMANCE "Prestazioni"

View file

@ -60,8 +60,6 @@ BEGIN
END
POPUP "ヘルプ(&H)"
BEGIN
MENUITEM "トピックの検索(&H)", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "バージョン情報(&A)", ID_HELP_ABOUT
END
END
@ -138,10 +136,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -306,17 +300,11 @@ BEGIN
CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "タスク マネージャ"
IDC_TASKMGR "タスク マネージャ"
IDS_IDLE_PROCESS "System Idle Process"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "アプリケーション"
IDS_TAB_PROCESSES "プロセス"
IDS_TAB_PERFORMANCE "パフォーマンス"

View file

@ -62,8 +62,6 @@ BEGIN
END
POPUP "도움말(&H)"
BEGIN
MENUITEM "작업 관리자 도움말 항목(&H)", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "작업 관리자 정보(&A)", ID_HELP_ABOUT
END
END
@ -140,10 +138,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -308,17 +302,11 @@ BEGIN
CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "작업 관리자"
IDC_TASKMGR "작업 관리자"
IDS_IDLE_PROCESS "System Idle Process"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "응용 프로그램"
IDS_TAB_PROCESSES "프로세스"
IDS_TAB_PERFORMANCE "성능"

View file

@ -60,8 +60,6 @@ BEGIN
END
POPUP "&Help"
BEGIN
MENUITEM "&Help-onderwerpen", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&Info", ID_HELP_ABOUT
END
END
@ -121,11 +119,11 @@ IDR_PROCESS_PAGE_CONTEXT MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "&Proces beëindigen", ID_PROCESS_PAGE_ENDPROCESS
MENUITEM "Pro&ces beëindigen", ID_PROCESS_PAGE_ENDPROCESS
MENUITEM "Process&tructuur beëindigen", ID_PROCESS_PAGE_ENDPROCESSTREE
MENUITEM "&Fouten opsporen", ID_PROCESS_PAGE_DEBUG
MENUITEM SEPARATOR
POPUP "P&rioriteit instellen"
POPUP "&Prioriteit instellen"
BEGIN
MENUITEM "&Realtime", ID_PROCESS_PAGE_SETPRIORITY_REALTIME
MENUITEM "&Hoog", ID_PROCESS_PAGE_SETPRIORITY_HIGH
@ -138,10 +136,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -306,17 +300,11 @@ BEGIN
CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 117, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Taakbeheer"
IDC_TASKMGR "Taakbeheer"
IDS_IDLE_PROCESS "Niet-actieve systeemprocessen"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Toepassingen"
IDS_TAB_PROCESSES "Procesnaam"
IDS_TAB_PERFORMANCE "Prestaties"

View file

@ -60,8 +60,6 @@ BEGIN
END
POPUP "&Hjelp"
BEGIN
MENUITEM "Emner i &hjelp for Oppgavebehandling", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&Om Oppgavebehandling", ID_HELP_ABOUT
END
END
@ -138,10 +136,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -306,17 +300,11 @@ BEGIN
CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Oppgavebehandling"
IDC_TASKMGR "Oppgavebehandling"
IDS_IDLE_PROCESS "System Idle Process"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Programmer"
IDS_TAB_PROCESSES "Prosesser"
IDS_TAB_PERFORMANCE "Ytelse"

View file

@ -67,8 +67,6 @@ BEGIN
END
POPUP "Pomo&c"
BEGIN
MENUITEM "Menedżer zadań - tematy &pomocy", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "Menedżer zadań - &informacje", ID_HELP_ABOUT
END
END
@ -145,10 +143,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -313,17 +307,11 @@ BEGIN
CONTROL "Linia poleceń", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 85, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Menedżer zadań"
IDC_TASKMGR "Menedżer zadań"
IDS_IDLE_PROCESS "Proces bezczynności systemu"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Aplikacje"
IDS_TAB_PROCESSES "Procesy"
IDS_TAB_PERFORMANCE "Wydajność"

View file

@ -60,8 +60,6 @@ BEGIN
END
POPUP "Aj&uda"
BEGIN
MENUITEM "&Tópicos da Ajuda do Gerenciador de tarefas", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "So&bre o Gerenciador de tarefas", ID_HELP_ABOUT
END
END
@ -138,10 +136,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -306,17 +300,11 @@ BEGIN
CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 123, 160, 95, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Gerenciador de tarefas"
IDC_TASKMGR "Gerenciador de tarefas"
IDS_IDLE_PROCESS "Processo inativo do sistema"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Aplicativos"
IDS_TAB_PROCESSES "Processos"
IDS_TAB_PERFORMANCE "Performance"

View file

@ -65,8 +65,6 @@ BEGIN
END
POPUP "Aj&utor"
BEGIN
MENUITEM "&Manual…", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&Despre…", ID_HELP_ABOUT
END
END
@ -143,10 +141,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -311,17 +305,11 @@ BEGIN
CONTROL "Linie de comandă", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 120, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Gestionar de activități"
IDC_TASKMGR "Gestionar de activități"
IDS_IDLE_PROCESS "Proces de inactivitate sistem"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Aplicații"
IDS_TAB_PROCESSES "Procese"
IDS_TAB_PERFORMANCE "Performanță"

View file

@ -62,8 +62,6 @@ BEGIN
END
POPUP "&Справка"
BEGIN
MENUITEM "&Вызов справки", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&О программе...", ID_HELP_ABOUT
END
END
@ -140,10 +138,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -308,17 +302,11 @@ BEGIN
CONTROL "Коммандная строка", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 90, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Диспетчер задач"
IDC_TASKMGR "Диспетчер задач"
IDS_IDLE_PROCESS "Бездействие системы"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Приложения"
IDS_TAB_PROCESSES "Процессы"
IDS_TAB_PERFORMANCE "Быстродействие"

View file

@ -62,8 +62,6 @@ BEGIN
END
POPUP "&Pomocník"
BEGIN
MENUITEM "Témy &Pomocníka pre Správcu úloh", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "Č&o je &Správca úloh", ID_HELP_ABOUT
END
END
@ -140,10 +138,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -308,17 +302,11 @@ BEGIN
CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 130, 160, 95, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Správca úloh systému"
IDC_TASKMGR "Správca úloh systému"
IDS_IDLE_PROCESS "Procesy systémovej nečinnosti"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Aplikácie"
IDS_TAB_PROCESSES "Procesy"
IDS_TAB_PERFORMANCE "Výkon"

View file

@ -63,8 +63,6 @@ BEGIN
END
POPUP "Ndihme"
BEGIN
MENUITEM "Task Manager &Ndihme me teme", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "Rreth Task Menager", ID_HELP_ABOUT
END
END
@ -141,8 +139,6 @@ BEGIN
END
END
/* Dialogs */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -307,17 +303,11 @@ BEGIN
CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Task Manager"
IDC_TASKMGR "Task Manager"
IDS_IDLE_PROCESS "Procese te papune te sistemit"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Aplikacione"
IDS_TAB_PROCESSES "Procese"
IDS_TAB_PERFORMANCE "Performanca"

View file

@ -62,8 +62,6 @@ BEGIN
END
POPUP "&Hjälp"
BEGIN
MENUITEM "Aktivitetshanteraren &hjälpavsnitt", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&Om Aktivitetshanteraren", ID_HELP_ABOUT
END
END
@ -140,10 +138,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -308,17 +302,11 @@ BEGIN
CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 133, 160, 95, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Aktivitetshanteraren"
IDC_TASKMGR "Aktivitetshanteraren"
IDS_IDLE_PROCESS "Systemets lediga resurser"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Program"
IDS_TAB_PROCESSES "Processer"
IDS_TAB_PERFORMANCE "Prestanda"

View file

@ -62,8 +62,6 @@ BEGIN
END
POPUP "&Yardım"
BEGIN
MENUITEM "&Yardım Konuları", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&Görev Yöneticisi Üzerine", ID_HELP_ABOUT
END
END
@ -140,8 +138,6 @@ BEGIN
END
END
/* Dialogs */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -306,17 +302,11 @@ BEGIN
CONTROL "Komut Yatacı", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Görev Yöneticisi"
IDC_TASKMGR "Görev Yöneticisi"
IDS_IDLE_PROCESS "Boş Dizge İşlemi"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Uygulamalar"
IDS_TAB_PROCESSES "İşlemler"
IDS_TAB_PERFORMANCE "Başarım"

View file

@ -60,8 +60,6 @@ BEGIN
END
POPUP "&Довідка"
BEGIN
MENUITEM "&Зміст", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&Про Диспетчер завдань", ID_HELP_ABOUT
END
END
@ -138,10 +136,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -306,17 +300,11 @@ BEGIN
CONTROL "Command &Line", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "Диспетчер завдань"
IDC_TASKMGR "Диспетчер завдань"
IDS_IDLE_PROCESS "Бездіяльність системи"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "Додатки"
IDS_TAB_PROCESSES "Процеси"
IDS_TAB_PERFORMANCE "Швидкодія"

View file

@ -66,8 +66,6 @@ BEGIN
END
POPUP "帮助(&H)"
BEGIN
MENUITEM "任务管理器帮助主题(&H)", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "关于任务管理器(&A)", ID_HELP_ABOUT
END
END
@ -144,10 +142,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -312,17 +306,11 @@ BEGIN
CONTROL "命令行(&L)", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "任务管理器"
IDC_TASKMGR "任务管理器"
IDS_IDLE_PROCESS "系统空闲进程"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "应用程序"
IDS_TAB_PROCESSES "进程"
IDS_TAB_PERFORMANCE "性能"
@ -376,7 +364,7 @@ BEGIN
IDS_MSG_UNABLETERMINATEPRO "无法终止进程"
IDS_MSG_CLOSESYSTEMPROCESS "这是一个关键的系统过程。任务管理器不会结束这一进程。"
IDS_MSG_UNABLECHANGEPRIORITY "无法更改优先级"
IDS_MSG_WARNINGCHANGEPRIORITY "警告: 改变这一进程的优先级可能会\n导致意外的结果包括系统不稳定。 您确定\n要更改优先级类"
IDS_MSG_WARNINGCHANGEPRIORITY "警告改变这一进程的优先级可能会\n导致意外的结果包括系统不稳定。 您确定\n要更改优先级类"
IDS_MSG_TRAYICONCPUUSAGE "CPU 使用情况: %d%%"
IDS_STATUS_MEMUSAGE "内存使用情况: %s / %s (%d%%)"
IDS_STATUS_CPUUSAGE "CPU 使用情况: %3d%%"

View file

@ -1,7 +1,5 @@
/*
* LICENSE: GPL - See COPYING in the top level directory
* TRANSLATOR: Elton Chung <elton328@gmail.com>
*/
// LICENSE: GPL - See COPYING in the top level directory
// COPYRIGHT: Elton Chung <elton328@gmail.com>
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
@ -65,8 +63,6 @@ BEGIN
END
POPUP "說明(&H)"
BEGIN
MENUITEM "工作管理員說明主题(&H)", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "關於工作管理員(&A)", ID_HELP_ABOUT
END
END
@ -143,10 +139,6 @@ BEGIN
END
END
/* Dialogs */
/* TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened */
IDD_TASKMGR_DIALOG DIALOGEX 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
@ -311,17 +303,11 @@ BEGIN
CONTROL "命令列(&L)", IDC_COMMANDLINE, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, 107, 160, 65, 10
END
/* String Tables */
STRINGTABLE
BEGIN
IDS_APP_TITLE "工作管理員"
IDC_TASKMGR "工作管理員"
IDS_IDLE_PROCESS "系統空閒進程"
END
STRINGTABLE
BEGIN
IDS_TAB_APPS "應用程式"
IDS_TAB_PROCESSES "處理程序"
IDS_TAB_PERFORMANCE "性能"

View file

@ -91,9 +91,8 @@ void PerfDataUninitialize(void)
HeapFree(GetProcessHeap(), 0, pEntry);
}
if (SystemProcessorTimeInfo) {
if (SystemProcessorTimeInfo)
HeapFree(GetProcessHeap(), 0, SystemProcessorTimeInfo);
}
}
static void SidToUserName(PSID Sid, LPWSTR szBuffer, DWORD BufferSize)
@ -257,18 +256,16 @@ void PerfDataRefresh(void)
/* If it's a first call - skip idle time calcs */
if (liOldIdleTime.QuadPart != 0) {
/* CurrentValue = NewValue - OldValue */
// CurrentValue = NewValue - OldValue
dbIdleTime = Li2Double(SysPerfInfo.IdleProcessTime) - Li2Double(liOldIdleTime);
dbKernelTime = CurrentKernelTime - OldKernelTime;
dbSystemTime = Li2Double(SysTimeInfo.CurrentTime) - Li2Double(liOldSystemTime);
/* CurrentCpuIdle = IdleTime / SystemTime */
dbIdleTime = dbIdleTime / dbSystemTime;
dbKernelTime = dbKernelTime / dbSystemTime;
/* CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors */
dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SystemBasicInfo.NumberOfProcessors; /* + 0.5; */
dbKernelTime = 100.0 - dbKernelTime * 100.0 / (double)SystemBasicInfo.NumberOfProcessors; /* + 0.5; */
dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SystemBasicInfo.NumberOfProcessors;
dbKernelTime = 100.0 - dbKernelTime * 100.0 / (double)SystemBasicInfo.NumberOfProcessors;
}
/* Store new CPU's idle and system time */
@ -320,11 +317,11 @@ void PerfDataRefresh(void)
pPerfData[Idx].ProcessId = pSPI->UniqueProcessId;
if (pPDOld) {
if (pPDOld) {
double CurTime = Li2Double(pSPI->KernelTime) + Li2Double(pSPI->UserTime);
double OldTime = Li2Double(pPDOld->KernelTime) + Li2Double(pPDOld->UserTime);
double CpuTime = (CurTime - OldTime) / dbSystemTime;
CpuTime = CpuTime * 100.0 / (double)SystemBasicInfo.NumberOfProcessors; /* + 0.5; */
CpuTime = CpuTime * 100.0 / (double)SystemBasicInfo.NumberOfProcessors;
pPerfData[Idx].CPUUsage = (ULONG)CpuTime;
}
pPerfData[Idx].CPUTime.QuadPart = pSPI->UserTime.QuadPart + pSPI->KernelTime.QuadPart;
@ -390,25 +387,22 @@ ReadProcOwner:
} else {
ClearInfo:
/* clear information we were unable to fetch */
ZeroMemory(&pPerfData[Idx].IOCounters, sizeof(IO_COUNTERS));
memset(&pPerfData[Idx].IOCounters, 0, sizeof(IO_COUNTERS));
}
cwcUserName = _countof(pPerfData[0].UserName);
CachedGetUserFromSid(ProcessUser, pPerfData[Idx].UserName, &cwcUserName);
if (ProcessSD != NULL)
{
LocalFree((HLOCAL)ProcessSD);
}
pPerfData[Idx].UserTime.QuadPart = pSPI->UserTime.QuadPart;
pPerfData[Idx].KernelTime.QuadPart = pSPI->KernelTime.QuadPart;
pSPI = (PSYSTEM_PROCESS_INFORMATION)((LPBYTE)pSPI + pSPI->NextEntryOffset);
}
HeapFree(GetProcessHeap(), 0, pBuffer);
if (pPerfDataOld) {
if (pPerfDataOld)
HeapFree(GetProcessHeap(), 0, pPerfDataOld);
}
pPerfDataOld = pPerfData;
LeaveCriticalSection(&PerfDataCriticalSection);
}
@ -422,17 +416,13 @@ ULONG PerfDataGetProcessIndex(ULONG pid)
for (idx = 0; idx < ProcessCount; idx++)
{
if (PtrToUlong(pPerfData[idx].ProcessId) == pid)
{
break;
}
}
LeaveCriticalSection(&PerfDataCriticalSection);
if (idx == ProcessCount)
{
return -1;
}
return idx;
}
@ -625,16 +615,15 @@ cleanup:
void PerfDataDeallocCommandLineCache()
{
PCMD_LINE_CACHE cache = global_cache;
PCMD_LINE_CACHE cache_old;
PCMD_LINE_CACHE cache, pnext;
while (cache && cache->pnext != NULL)
for (cache = global_cache; cache; cache = pnext)
{
cache_old = cache;
cache = cache->pnext;
HeapFree(GetProcessHeap(), 0, cache_old);
pnext = cache->pnext;
HeapFree(GetProcessHeap(), 0, cache);
}
global_cache = NULL;
}
ULONG PerfDataGetSessionId(ULONG Index)
@ -1088,9 +1077,7 @@ ULONG PerfDataGetTotalThreadCount(void)
EnterCriticalSection(&PerfDataCriticalSection);
for (i=0; i<ProcessCount; i++)
{
ThreadCount += pPerfData[i].ThreadCount;
}
LeaveCriticalSection(&PerfDataCriticalSection);

View file

@ -6,10 +6,6 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 + (double)((x).LowPart))
typedef struct _PERFDATA
@ -34,16 +30,15 @@ typedef struct _PERFDATA
ULONG USERObjectCount;
ULONG GDIObjectCount;
IO_COUNTERS IOCounters;
LARGE_INTEGER UserTime;
LARGE_INTEGER KernelTime;
} PERFDATA, *PPERFDATA;
typedef struct _CMD_LINE_CACHE
{
DWORD idx;
DWORD idx;
LPWSTR str;
ULONG len;
ULONG len;
struct _CMD_LINE_CACHE* pnext;
} CMD_LINE_CACHE, *PCMD_LINE_CACHE;
@ -97,8 +92,3 @@ ULONG PerfDataGetPhysicalMemorySystemCacheK(void);
ULONG PerfDataGetSystemHandleCount(void);
ULONG PerfDataGetTotalThreadCount(void);
#ifdef __cplusplus
};
#endif

View file

@ -81,11 +81,6 @@ void AdjustFrameSize(HWND hCntrl, HWND hDlg, int nXDifference, int nYDifference,
InvalidateRect(hCntrl, NULL, TRUE);
}
static void AdjustControlPosition(HWND hCntrl, HWND hDlg, int nXDifference, int nYDifference)
{
AdjustFrameSize(hCntrl, hDlg, nXDifference, nYDifference, 0);
}
static void AdjustCntrlPos(int ctrl_id, HWND hDlg, int nXDifference, int nYDifference)
{
AdjustFrameSize(GetDlgItem(hDlg, ctrl_id), hDlg, nXDifference, nYDifference, 0);
@ -108,17 +103,18 @@ PerformancePageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
break;
case WM_INITDIALOG:
/* Save the width and height */
{
TFormat fmt;
// Save the width and height
GetClientRect(hDlg, &rc);
nPerformancePageWidth = rc.right;
nPerformancePageHeight = rc.bottom;
/* Update window position */
// Update window position
SetWindowPos(hDlg, NULL, 15, 30, 0, 0, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER);
/*
* Get handles to all the controls
*/
// Get handles to all the controls
hTotalsFrame = GetDlgItem(hDlg, IDC_TOTALS_FRAME);
hCommitChargeFrame = GetDlgItem(hDlg, IDC_COMMIT_CHARGE_FRAME);
hKernelMemoryFrame = GetDlgItem(hDlg, IDC_KERNEL_MEMORY_FRAME);
@ -147,36 +143,29 @@ PerformancePageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
hPerformancePageMemUsageHistoryGraph = GetDlgItem(hDlg, IDC_MEM_USAGE_HISTORY_GRAPH);
hPerformancePageCpuUsageHistoryGraph = GetDlgItem(hDlg, IDC_CPU_USAGE_HISTORY_GRAPH);
GetClientRect(hPerformancePageCpuUsageHistoryGraph, &rc);
/* create the control */
GraphCtrl_Create(&PerformancePageCpuUsageHistoryGraph, hPerformancePageCpuUsageHistoryGraph, hDlg, IDC_CPU_USAGE_HISTORY_GRAPH);
/* customize the control */
GraphCtrl_SetRange(&PerformancePageCpuUsageHistoryGraph, 0.0, 100.0, 10);
GraphCtrl_SetBackgroundColor(&PerformancePageCpuUsageHistoryGraph, RGB(0, 0, 0)) ;
GraphCtrl_SetGridColor(&PerformancePageCpuUsageHistoryGraph, RGB(0, 128, 64));
// Create the controls
fmt.clrBack = RGB(0, 0, 0);
fmt.clrGrid = RGB(0, 128, 64);
fmt.clrPlot0 = RGB(0, 255, 0);
fmt.clrPlot1 = RGB(255, 0, 0);
fmt.GridCellWidth = fmt.GridCellHeight = 12;
fmt.DrawSecondaryPlot = TaskManagerSettings.ShowKernelTimes;
GraphCtrl_Create(&PerformancePageCpuUsageHistoryGraph, hPerformancePageCpuUsageHistoryGraph, hDlg, &fmt);
GraphCtrl_SetPlotColor(&PerformancePageCpuUsageHistoryGraph, 0, RGB(0, 255, 0)) ;
GraphCtrl_SetPlotColor(&PerformancePageCpuUsageHistoryGraph, 1, RGB(255, 0, 0)) ;
GetClientRect(hPerformancePageMemUsageHistoryGraph, &rc);
GraphCtrl_Create(&PerformancePageMemUsageHistoryGraph, hPerformancePageMemUsageHistoryGraph, hDlg, IDC_MEM_USAGE_HISTORY_GRAPH);
GraphCtrl_SetRange(&PerformancePageMemUsageHistoryGraph, 0.0, 100.0, 10) ;
GraphCtrl_SetBackgroundColor(&PerformancePageMemUsageHistoryGraph, RGB(0, 0, 0)) ;
GraphCtrl_SetGridColor(&PerformancePageMemUsageHistoryGraph, RGB(0, 128, 64)) ;
GraphCtrl_SetPlotColor(&PerformancePageMemUsageHistoryGraph, 0, RGB(255, 255, 0)) ;
/* Start our refresh thread */
fmt.clrPlot0 = RGB(255, 255, 0);
fmt.clrPlot1 = RGB(100, 255, 255);
fmt.DrawSecondaryPlot = TRUE;
GraphCtrl_Create(&PerformancePageMemUsageHistoryGraph, hPerformancePageMemUsageHistoryGraph, hDlg, &fmt);
#ifdef RUN_PERF_PAGE
hPerformanceThread = CreateThread(NULL, 0, PerformancePageRefreshThread, NULL, 0, &dwPerformanceThread);
#endif
/*
* Subclass graph buttons
*/
// Subclass graph buttons
OldGraphWndProc = (WNDPROC)SetWindowLongPtrW(hCpuUsageGraph, GWLP_WNDPROC, (LONG_PTR)Graph_WndProc);
SetWindowLongPtrW(hMemUsageGraph, GWLP_WNDPROC, (LONG_PTR)Graph_WndProc);
OldGraphCtrlWndProc = (WNDPROC)SetWindowLongPtrW(hPerformancePageMemUsageHistoryGraph, GWLP_WNDPROC, (LONG_PTR)GraphCtrl_WndProc);
SetWindowLongPtrW(hPerformancePageCpuUsageHistoryGraph, GWLP_WNDPROC, (LONG_PTR)GraphCtrl_WndProc);
return TRUE;
}
case WM_COMMAND:
break;
@ -195,7 +184,7 @@ PerformancePageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
nPerformancePageHeight = cy;
} while (0);
/* Reposition the performance page's controls */
// Reposition the performance page's controls
AdjustFrameSize(hTotalsFrame, hDlg, 0, nYDifference, 0);
AdjustFrameSize(hCommitChargeFrame, hDlg, 0, nYDifference, 0);
AdjustFrameSize(hKernelMemoryFrame, hDlg, 0, nYDifference, 0);
@ -213,18 +202,18 @@ PerformancePageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
AdjustCntrlPos(IDS_TOTALS_PROCESS_COUNT, hDlg, 0, nYDifference);
AdjustCntrlPos(IDS_TOTALS_THREAD_COUNT, hDlg, 0, nYDifference);
AdjustControlPosition(hCommitChargeTotalEdit, hDlg, 0, nYDifference);
AdjustControlPosition(hCommitChargeLimitEdit, hDlg, 0, nYDifference);
AdjustControlPosition(hCommitChargePeakEdit, hDlg, 0, nYDifference);
AdjustControlPosition(hKernelMemoryTotalEdit, hDlg, 0, nYDifference);
AdjustControlPosition(hKernelMemoryPagedEdit, hDlg, 0, nYDifference);
AdjustControlPosition(hKernelMemoryNonPagedEdit, hDlg, 0, nYDifference);
AdjustControlPosition(hPhysicalMemoryTotalEdit, hDlg, 0, nYDifference);
AdjustControlPosition(hPhysicalMemoryAvailableEdit, hDlg, 0, nYDifference);
AdjustControlPosition(hPhysicalMemorySystemCacheEdit, hDlg, 0, nYDifference);
AdjustControlPosition(hTotalsHandleCountEdit, hDlg, 0, nYDifference);
AdjustControlPosition(hTotalsProcessCountEdit, hDlg, 0, nYDifference);
AdjustControlPosition(hTotalsThreadCountEdit, hDlg, 0, nYDifference);
AdjustFrameSize(hCommitChargeTotalEdit, hDlg, 0, nYDifference, 0);
AdjustFrameSize(hCommitChargeLimitEdit, hDlg, 0, nYDifference, 0);
AdjustFrameSize(hCommitChargePeakEdit, hDlg, 0, nYDifference, 0);
AdjustFrameSize(hKernelMemoryTotalEdit, hDlg, 0, nYDifference, 0);
AdjustFrameSize(hKernelMemoryPagedEdit, hDlg, 0, nYDifference, 0);
AdjustFrameSize(hKernelMemoryNonPagedEdit, hDlg, 0, nYDifference, 0);
AdjustFrameSize(hPhysicalMemoryTotalEdit, hDlg, 0, nYDifference, 0);
AdjustFrameSize(hPhysicalMemoryAvailableEdit, hDlg, 0, nYDifference, 0);
AdjustFrameSize(hPhysicalMemorySystemCacheEdit, hDlg, 0, nYDifference, 0);
AdjustFrameSize(hTotalsHandleCountEdit, hDlg, 0, nYDifference, 0);
AdjustFrameSize(hTotalsProcessCountEdit, hDlg, 0, nYDifference, 0);
AdjustFrameSize(hTotalsThreadCountEdit, hDlg, 0, nYDifference, 0);
nXDifference += lastX;
nYDifference += lastY;
@ -263,8 +252,8 @@ PerformancePageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
void RefreshPerformancePage(void)
{
#ifdef RUN_PERF_PAGE
/* Signal the event so that our refresh thread
* will wake up and refresh the performance page */
// Signal the event so that our refresh thread
// will wake up and refresh the performance page
PostThreadMessage(dwPerformanceThread, WM_TIMER, 0, 0);
#endif
}
@ -299,7 +288,7 @@ DWORD WINAPI PerformancePageRefreshThread(PVOID Parameter)
LoadStringW(hInst, IDS_STATUS_MEMUSAGE, szMemUsage, 256);
LoadStringW(hInst, IDS_STATUS_PROCESSES, szProcesses, 256);
while (1)
for (;;)
{
int nBarsUsed1;
int nBarsUsed2;
@ -307,15 +296,13 @@ DWORD WINAPI PerformancePageRefreshThread(PVOID Parameter)
WCHAR szChargeTotalFormat[256];
WCHAR szChargeLimitFormat[256];
/* Wait for an the event or application close */
// Wait for an the event or application close
if (GetMessage(&msg, NULL, 0, 0) <= 0)
return 0;
if (msg.message == WM_TIMER)
{
/*
* Update the commit charge info
*/
// Update the commit charge info
CommitChargeTotal = PerfDataGetCommitChargeTotalK();
CommitChargeLimit = PerfDataGetCommitChargeLimitK();
CommitChargePeak = PerfDataGetCommitChargePeakK();
@ -338,9 +325,7 @@ DWORD WINAPI PerformancePageRefreshThread(PVOID Parameter)
(CommitChargeLimit ? ((CommitChargeTotal * 100) / CommitChargeLimit) : 0));
SendMessageW(hStatusWnd, SB_SETTEXT, 2, (LPARAM)Text);
/*
* Update the kernel memory info
*/
// Update the kernel memory info
KernelMemoryTotal = PerfDataGetKernelMemoryTotalK();
KernelMemoryPaged = PerfDataGetKernelMemoryPagedK();
KernelMemoryNonPaged = PerfDataGetKernelMemoryNonPagedK();
@ -351,9 +336,7 @@ DWORD WINAPI PerformancePageRefreshThread(PVOID Parameter)
_ultow(KernelMemoryNonPaged, Text, 10);
SetWindowTextW(hKernelMemoryNonPagedEdit, Text);
/*
* Update the physical memory info
*/
// Update the physical memory info
PhysicalMemoryTotal = PerfDataGetPhysicalMemoryTotalK();
PhysicalMemoryAvailable = PerfDataGetPhysicalMemoryAvailableK();
PhysicalMemorySystemCache = PerfDataGetPhysicalMemorySystemCacheK();
@ -364,9 +347,7 @@ DWORD WINAPI PerformancePageRefreshThread(PVOID Parameter)
_ultow(PhysicalMemorySystemCache, Text, 10);
SetWindowTextW(hPhysicalMemorySystemCacheEdit, Text);
/*
* Update the totals info
*/
// Update the totals info
TotalHandles = PerfDataGetSystemHandleCount();
TotalThreads = PerfDataGetTotalThreadCount();
TotalProcesses = PerfDataGetProcessCount();
@ -379,24 +360,18 @@ DWORD WINAPI PerformancePageRefreshThread(PVOID Parameter)
wsprintfW(Text, szProcesses, TotalProcesses);
SendMessageW(hStatusWnd, SB_SETTEXT, 0, (LPARAM)Text);
/*
* Redraw the graphs
*/
// Redraw the graphs
InvalidateRect(hCpuUsageGraph, NULL, FALSE);
InvalidateRect(hMemUsageGraph, NULL, FALSE);
/*
* Get the CPU usage
*/
// Get the CPU usage
CpuUsage = PerfDataGetProcessorUsage();
CpuKernelUsage = PerfDataGetProcessorSystemUsage();
wsprintfW(Text, szCpuUsage, CpuUsage);
SendMessageW(hStatusWnd, SB_SETTEXT, 1, (LPARAM)Text);
/*
* Get the memory usage
*/
// Get the memory usage
CommitChargeTotal = PerfDataGetCommitChargeTotalK();
CommitChargeLimit = PerfDataGetCommitChargeLimitK();
nBarsUsed1 = CommitChargeLimit ? ((CommitChargeTotal * 100) / CommitChargeLimit) : 0;
@ -405,8 +380,8 @@ DWORD WINAPI PerformancePageRefreshThread(PVOID Parameter)
PhysicalMemoryAvailable = PerfDataGetPhysicalMemoryAvailableK();
nBarsUsed2 = PhysicalMemoryTotal ? ((PhysicalMemoryAvailable * 100) / PhysicalMemoryTotal) : 0;
GraphCtrl_AppendPoint(&PerformancePageCpuUsageHistoryGraph, CpuUsage, CpuKernelUsage, 0.0, 0.0);
GraphCtrl_AppendPoint(&PerformancePageMemUsageHistoryGraph, nBarsUsed1, nBarsUsed2, 0.0, 0.0);
GraphCtrl_AddPoint(&PerformancePageCpuUsageHistoryGraph, CpuUsage, CpuKernelUsage);
GraphCtrl_AddPoint(&PerformancePageMemUsageHistoryGraph, nBarsUsed1, nBarsUsed2);
InvalidateRect(hPerformancePageMemUsageHistoryGraph, NULL, FALSE);
InvalidateRect(hPerformancePageCpuUsageHistoryGraph, NULL, FALSE);
}
@ -426,13 +401,16 @@ void PerformancePage_OnViewShowKernelTimes(void)
{
CheckMenuItem(hViewMenu, ID_VIEW_SHOWKERNELTIMES, MF_BYCOMMAND|MF_UNCHECKED);
TaskManagerSettings.ShowKernelTimes = FALSE;
PerformancePageCpuUsageHistoryGraph.DrawSecondaryPlot = FALSE;
}
else
{
CheckMenuItem(hViewMenu, ID_VIEW_SHOWKERNELTIMES, MF_BYCOMMAND|MF_CHECKED);
TaskManagerSettings.ShowKernelTimes = TRUE;
PerformancePageCpuUsageHistoryGraph.DrawSecondaryPlot = TRUE;
}
GraphCtrl_RedrawBitmap(&PerformancePageCpuUsageHistoryGraph, PerformancePageCpuUsageHistoryGraph.BitmapHeight);
RefreshPerformancePage();
}

View file

@ -6,18 +6,10 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
extern HWND hPerformancePage; /* Performance Property Page */
extern HWND hPerformancePage;
INT_PTR CALLBACK PerformancePageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
void RefreshPerformancePage(void);
void PerformancePage_OnViewShowKernelTimes(void);
void PerformancePage_OnViewCPUHistoryOneGraphAll(void);
void PerformancePage_OnViewCPUHistoryOneGraphPerCPU(void);
#ifdef __cplusplus
};
#endif

View file

@ -17,12 +17,11 @@ typedef struct
ULONG ProcessId;
} PROCESS_PAGE_LIST_ITEM, *LPPROCESS_PAGE_LIST_ITEM;
HWND hProcessPage; /* Process List Property Page */
HWND hProcessPageListCtrl; /* Process ListCtrl Window */
HWND hProcessPageHeaderCtrl; /* Process Header Control */
HWND hProcessPageEndProcessButton; /* Process End Process button */
HWND hProcessPageShowAllProcessesButton;/* Process Show All Processes checkbox */
HWND hProcessPage;
HWND hProcessPageListCtrl;
HWND hProcessPageHeaderCtrl;
HWND hProcessPageEndProcessButton;
HWND hProcessPageShowAllProcessesButton;
BOOL bProcessPageSelectionMade = FALSE; /* Is item in ListCtrl selected */
static int nProcessPageWidth;
@ -73,9 +72,7 @@ int ProcGetIndexByProcessId(DWORD dwProcessId)
(void)ListView_GetItem(hProcessPageListCtrl, &item);
pData = (LPPROCESS_PAGE_LIST_ITEM)item.lParam;
if (pData->ProcessId == dwProcessId)
{
return i;
}
}
return 0;
}
@ -160,7 +157,6 @@ ProcessPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
/* Refresh page */
ProcessPageUpdate();
return TRUE;
case WM_DESTROY:
@ -177,8 +173,8 @@ ProcessPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
/* Handle the button clicks */
switch (LOWORD(wParam))
{
case IDC_ENDPROCESS:
ProcessPage_OnEndProcess();
case IDC_ENDPROCESS:
ProcessPage_OnEndProcess();
}
break;
@ -248,31 +244,21 @@ void ProcessPageOnNotify(WPARAM wParam, LPARAM lParam)
case LVN_ITEMCHANGED:
ProcessPageUpdate();
break;
case LVN_GETDISPINFO:
if (!(pnmdi->item.mask & LVIF_TEXT))
break;
pData = (LPPROCESS_PAGE_LIST_ITEM)pnmdi->item.lParam;
Index = PerfDataGetProcessIndex(pData->ProcessId);
ColumnIndex = pnmdi->item.iSubItem;
PerfDataGetText(Index, ColumnIndex, pnmdi->item.pszText, (ULONG)pnmdi->item.cchTextMax);
break;
case NM_RCLICK:
ProcessPageShowContextMenu(GetSelectedProcessId());
break;
case LVN_KEYDOWN:
if (((LPNMLVKEYDOWN)lParam)->wVKey == VK_DELETE)
ProcessPage_OnEndProcess();
break;
}
}
else if (pnmh->hwndFrom == hProcessPageHeaderCtrl)
@ -280,25 +266,16 @@ void ProcessPageOnNotify(WPARAM wParam, LPARAM lParam)
switch (pnmh->code)
{
case HDN_ITEMCLICK:
TaskManagerSettings.SortColumn = ColumnDataHints[pnmhdr->iItem];
TaskManagerSettings.SortAscending = !TaskManagerSettings.SortAscending;
(void)ListView_SortItems(hProcessPageListCtrl, ProcessPageCompareFunc, NULL);
break;
case HDN_ITEMCHANGED:
UpdateColumnDataHints();
break;
case HDN_ENDDRAG:
UpdateColumnDataHints();
break;
}
}
}
@ -351,7 +328,7 @@ void ProcessPageShowContextMenu(DWORD dwProcessId)
if (si.dwNumberOfProcessors < 2)
RemoveMenu(hSubMenu, ID_PROCESS_PAGE_SETAFFINITY, MF_BYCOMMAND);
switch (dwProcessPriorityClass) {
switch (dwProcessPriorityClass) {
case REALTIME_PRIORITY_CLASS:
CheckMenuRadioItem(hPriorityMenu, ID_PROCESS_PAGE_SETPRIORITY_REALTIME, ID_PROCESS_PAGE_SETPRIORITY_LOW, ID_PROCESS_PAGE_SETPRIORITY_REALTIME, MF_BYCOMMAND);
break;
@ -405,13 +382,12 @@ DWORD WINAPI ProcessPageRefreshThread(void *lpParameter)
{
MSG msg;
while (1) {
/* Wait for an the event or application close */
for (;;) {
// Wait for an the event or application close
if (GetMessage(&msg, NULL, 0, 0) <= 0)
return 0;
if (msg.message == WM_TIMER) {
UpdateProcesses();
if (IsWindowVisible(hProcessPage))
@ -452,15 +428,11 @@ void UpdateProcesses()
{
/* Add new processes by checking against the current items */
for (l = 0; l < PerfDataGetProcessCount(); l++)
{
AddProcess(l);
}
}
if (TaskManagerSettings.SortColumn != -1)
{
(void)ListView_SortItems(hProcessPageListCtrl, ProcessPageCompareFunc, NULL);
}
SendMessage(hProcessPageListCtrl, WM_SETREDRAW, TRUE, 0);
@ -471,12 +443,6 @@ void UpdateProcesses()
ListView_SetItemState(hProcessPageListCtrl, 0, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
bProcessPageSelectionMade = TRUE;
}
/*
else
{
bProcessPageSelectionMade = FALSE;
}
*/
}
BOOL ProcessRunning(ULONG ProcessId)
@ -484,14 +450,12 @@ BOOL ProcessRunning(ULONG ProcessId)
HANDLE hProcess;
DWORD exitCode;
if (ProcessId == 0) {
if (ProcessId == 0)
return TRUE;
}
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId);
if (hProcess == NULL) {
if (hProcess == NULL)
return FALSE;
}
if (GetExitCodeProcess(hProcess, &exitCode)) {
CloseHandle(hProcess);
@ -544,22 +508,29 @@ void AddProcess(ULONG Index)
BOOL PerfDataGetText(ULONG Index, ULONG ColumnIndex, LPTSTR lpText, ULONG nMaxCount)
{
IO_COUNTERS iocounters;
LARGE_INTEGER time;
if (ColumnDataHints[ColumnIndex] == COLUMN_IMAGENAME)
switch (ColumnDataHints[ColumnIndex]) {
case COLUMN_IMAGENAME:
PerfDataGetImageName(Index, lpText, nMaxCount);
if (ColumnDataHints[ColumnIndex] == COLUMN_PID)
return TRUE;
case COLUMN_PID:
wsprintfW(lpText, L"%lu", PerfDataGetProcessId(Index));
if (ColumnDataHints[ColumnIndex] == COLUMN_USERNAME)
return TRUE;
case COLUMN_USERNAME:
PerfDataGetUserName(Index, lpText, nMaxCount);
if (ColumnDataHints[ColumnIndex] == COLUMN_COMMANDLINE)
return TRUE;
case COLUMN_COMMANDLINE:
PerfDataGetCommandLine(Index, lpText, nMaxCount);
if (ColumnDataHints[ColumnIndex] == COLUMN_SESSIONID)
return TRUE;
case COLUMN_SESSIONID:
wsprintfW(lpText, L"%lu", PerfDataGetSessionId(Index));
if (ColumnDataHints[ColumnIndex] == COLUMN_CPUUSAGE)
return TRUE;
case COLUMN_CPUUSAGE:
wsprintfW(lpText, L"%02lu", PerfDataGetCPUUsage(Index));
if (ColumnDataHints[ColumnIndex] == COLUMN_CPUTIME)
return TRUE;
case COLUMN_CPUTIME:
{
LARGE_INTEGER time;
DWORD dwHours;
DWORD dwMinutes;
DWORD dwSeconds;
@ -567,116 +538,100 @@ BOOL PerfDataGetText(ULONG Index, ULONG ColumnIndex, LPTSTR lpText, ULONG nMaxCo
time = PerfDataGetCPUTime(Index);
gethmsfromlargeint(time, &dwHours, &dwMinutes, &dwSeconds);
wsprintfW(lpText, L"%lu:%02lu:%02lu", dwHours, dwMinutes, dwSeconds);
return TRUE;
}
if (ColumnDataHints[ColumnIndex] == COLUMN_MEMORYUSAGE)
{
case COLUMN_MEMORYUSAGE:
wsprintfW(lpText, L"%lu", PerfDataGetWorkingSetSizeBytes(Index) / 1024);
CommaSeparateNumberString(lpText, nMaxCount);
wcscat(lpText, L" K");
}
if (ColumnDataHints[ColumnIndex] == COLUMN_PEAKMEMORYUSAGE)
{
return TRUE;
case COLUMN_PEAKMEMORYUSAGE:
wsprintfW(lpText, L"%lu", PerfDataGetPeakWorkingSetSizeBytes(Index) / 1024);
CommaSeparateNumberString(lpText, nMaxCount);
wcscat(lpText, L" K");
}
if (ColumnDataHints[ColumnIndex] == COLUMN_MEMORYUSAGEDELTA)
{
return TRUE;
case COLUMN_MEMORYUSAGEDELTA:
wsprintfW(lpText, L"%lu", PerfDataGetWorkingSetSizeDelta(Index) / 1024);
CommaSeparateNumberString(lpText, nMaxCount);
wcscat(lpText, L" K");
}
if (ColumnDataHints[ColumnIndex] == COLUMN_PAGEFAULTS)
{
return TRUE;
case COLUMN_PAGEFAULTS:
wsprintfW(lpText, L"%lu", PerfDataGetPageFaultCount(Index));
CommaSeparateNumberString(lpText, nMaxCount);
}
if (ColumnDataHints[ColumnIndex] == COLUMN_PAGEFAULTSDELTA)
{
return TRUE;
case COLUMN_PAGEFAULTSDELTA:
wsprintfW(lpText, L"%lu", PerfDataGetPageFaultCountDelta(Index));
CommaSeparateNumberString(lpText, nMaxCount);
}
if (ColumnDataHints[ColumnIndex] == COLUMN_VIRTUALMEMORYSIZE)
{
return TRUE;
case COLUMN_VIRTUALMEMORYSIZE:
wsprintfW(lpText, L"%lu", PerfDataGetVirtualMemorySizeBytes(Index) / 1024);
CommaSeparateNumberString(lpText, nMaxCount);
wcscat(lpText, L" K");
}
if (ColumnDataHints[ColumnIndex] == COLUMN_PAGEDPOOL)
{
return TRUE;
case COLUMN_PAGEDPOOL:
wsprintfW(lpText, L"%lu", PerfDataGetPagedPoolUsagePages(Index) / 1024);
CommaSeparateNumberString(lpText, nMaxCount);
wcscat(lpText, L" K");
}
if (ColumnDataHints[ColumnIndex] == COLUMN_NONPAGEDPOOL)
{
return TRUE;
case COLUMN_NONPAGEDPOOL:
wsprintfW(lpText, L"%lu", PerfDataGetNonPagedPoolUsagePages(Index) / 1024);
CommaSeparateNumberString(lpText, nMaxCount);
wcscat(lpText, L" K");
}
if (ColumnDataHints[ColumnIndex] == COLUMN_BASEPRIORITY)
return TRUE;
case COLUMN_BASEPRIORITY:
wsprintfW(lpText, L"%lu", PerfDataGetBasePriority(Index));
if (ColumnDataHints[ColumnIndex] == COLUMN_HANDLECOUNT)
{
return TRUE;
case COLUMN_HANDLECOUNT:
wsprintfW(lpText, L"%lu", PerfDataGetHandleCount(Index));
CommaSeparateNumberString(lpText, nMaxCount);
}
if (ColumnDataHints[ColumnIndex] == COLUMN_THREADCOUNT)
{
return TRUE;
case COLUMN_THREADCOUNT:
wsprintfW(lpText, L"%lu", PerfDataGetThreadCount(Index));
CommaSeparateNumberString(lpText, nMaxCount);
}
if (ColumnDataHints[ColumnIndex] == COLUMN_USEROBJECTS)
{
return TRUE;
case COLUMN_USEROBJECTS:
wsprintfW(lpText, L"%lu", PerfDataGetUSERObjectCount(Index));
CommaSeparateNumberString(lpText, nMaxCount);
}
if (ColumnDataHints[ColumnIndex] == COLUMN_GDIOBJECTS)
{
return TRUE;
case COLUMN_GDIOBJECTS:
wsprintfW(lpText, L"%lu", PerfDataGetGDIObjectCount(Index));
CommaSeparateNumberString(lpText, nMaxCount);
}
if (ColumnDataHints[ColumnIndex] == COLUMN_IOREADS)
{
return TRUE;
case COLUMN_IOREADS:
PerfDataGetIOCounters(Index, &iocounters);
_ui64tow(iocounters.ReadOperationCount, lpText, 10);
CommaSeparateNumberString(lpText, nMaxCount);
}
if (ColumnDataHints[ColumnIndex] == COLUMN_IOWRITES)
{
return TRUE;
case COLUMN_IOWRITES:
PerfDataGetIOCounters(Index, &iocounters);
_ui64tow(iocounters.WriteOperationCount, lpText, 10);
CommaSeparateNumberString(lpText, nMaxCount);
}
if (ColumnDataHints[ColumnIndex] == COLUMN_IOOTHER)
{
return TRUE;
case COLUMN_IOOTHER:
PerfDataGetIOCounters(Index, &iocounters);
_ui64tow(iocounters.OtherOperationCount, lpText, 10);
CommaSeparateNumberString(lpText, nMaxCount);
}
if (ColumnDataHints[ColumnIndex] == COLUMN_IOREADBYTES)
{
return TRUE;
case COLUMN_IOREADBYTES:
PerfDataGetIOCounters(Index, &iocounters);
_ui64tow(iocounters.ReadTransferCount, lpText, 10);
CommaSeparateNumberString(lpText, nMaxCount);
}
if (ColumnDataHints[ColumnIndex] == COLUMN_IOWRITEBYTES)
{
return TRUE;
case COLUMN_IOWRITEBYTES:
PerfDataGetIOCounters(Index, &iocounters);
_ui64tow(iocounters.WriteTransferCount, lpText, 10);
CommaSeparateNumberString(lpText, nMaxCount);
}
if (ColumnDataHints[ColumnIndex] == COLUMN_IOOTHERBYTES)
{
return TRUE;
case COLUMN_IOOTHERBYTES:
PerfDataGetIOCounters(Index, &iocounters);
_ui64tow(iocounters.OtherTransferCount, lpText, 10);
CommaSeparateNumberString(lpText, nMaxCount);
return TRUE;
}
return FALSE;
}
void gethmsfromlargeint(LARGE_INTEGER largeint, DWORD *dwHours, DWORD *dwMinutes, DWORD *dwSeconds)
{
#ifdef _MSC_VER
@ -707,9 +662,7 @@ int largeintcmp(LARGE_INTEGER l1, LARGE_INTEGER l2)
{
ret = CMP(dwMinutes1, dwMinutes2);
if (ret == 0)
{
ret = CMP(dwSeconds1, dwSeconds2);
}
}
return ret;
}

View file

@ -150,7 +150,6 @@
#define ID_WINDOWS_MAXIMIZE 32788
#define ID_WINDOWS_CASCADE 32789
#define ID_WINDOWS_BRINGTOFRONT 32790
#define ID_HELP_TOPICS 32791
#define ID_HELP_ABOUT 32792
#define ID_FILE_EXIT 32793
#define ID_OPTIONS_SHOW16BITTASKS 32794

View file

@ -15,47 +15,27 @@
#define STATUS_WINDOW 2001
/* Global Variables: */
HINSTANCE hInst; /* current instance */
HWND hMainWnd; /* Main Window */
HWND hStatusWnd; /* Status Bar Window */
HWND hTabWnd; /* Tab Control Window */
HMENU hWindowMenu = NULL;
int nMinimumWidth; /* Minimum width of the dialog (OnSize()'s cx) */
int nMinimumHeight; /* Minimum height of the dialog (OnSize()'s cy) */
int nOldWidth; /* Holds the previous client area width */
int nOldHeight; /* Holds the previous client area height */
BOOL bWasKeyboardInput = FALSE; /* TabChange by Keyboard or Mouse ? */
TASKMANAGER_SETTINGS TaskManagerSettings;
////////////////////////////////////////////////////////////////////////////////
// Taken from WinSpy++ 1.7
// http://www.catch22.net/software/winspy
// Copyright (c) 2002 by J Brown
//
//
// Copied from uxtheme.h
// If you have this new header, then delete these and
// #include <uxtheme.h> instead!
//
#define ETDT_DISABLE 0x00000001
#define ETDT_ENABLE 0x00000002
#define ETDT_USETABTEXTURE 0x00000004
#define ETDT_ENABLETAB (ETDT_ENABLE | ETDT_USETABTEXTURE)
//
typedef HRESULT (WINAPI * ETDTProc) (HWND, DWORD);
//
// Try to call EnableThemeDialogTexture, if uxtheme.dll is present
//
BOOL EnableDialogTheme(HWND hwnd)
{
HMODULE hUXTheme;
@ -99,7 +79,6 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
TOKEN_PRIVILEGES tkp;
HANDLE hMutex;
/* check wether we're already running or not */
hMutex = CreateMutexW(NULL, TRUE, L"taskmgrros");
if (hMutex && GetLastError() == ERROR_ALREADY_EXISTS)
{
@ -152,10 +131,8 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
CloseHandle(hToken);
}
/* Load our settings from the registry */
LoadSettings();
/* Initialize perf data */
if (!PerfDataInitialize())
return -1;
@ -167,7 +144,6 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
DialogBoxW(hInst, (LPCWSTR)IDD_TASKMGR_DIALOG, NULL, TaskManagerWndProc);
/* Save our settings to the registry */
SaveSettings();
PerfDataUninitialize();
CloseHandle(hMutex);
@ -176,7 +152,6 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
return 0;
}
/* Message handler for dialog box. */
INT_PTR CALLBACK
TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
@ -298,8 +273,6 @@ TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
case ID_PROCESS_PAGE_SETPRIORITY_LOW:
DoSetPriority(IDLE_PRIORITY_CLASS);
break;
/* ShutDown items */
case ID_SHUTDOWN_STANDBY:
ShutDown_StandBy();
break;
@ -327,7 +300,6 @@ TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
case ID_SHUTDOWN_EJECT_COMPUTER:
ShutDown_EjectComputer();
break;
case ID_HELP_ABOUT:
OnAbout();
break;
@ -336,12 +308,11 @@ TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
break;
}
break;
case WM_ONTRAYICON:
switch(lParam)
{
case WM_RBUTTONDOWN:
{
{
POINT pt;
BOOL OnTop;
HMENU hMenu, hPopupMenu;
@ -368,13 +339,12 @@ TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
DestroyMenu(hMenu);
break;
}
}
case WM_LBUTTONDBLCLK:
TaskManager_OnRestoreMainWindow();
break;
}
break;
case WM_NOTIFY:
pnmh = (LPNMHDR)lParam;
if ((pnmh->hwndFrom == hTabWnd) &&
@ -394,7 +364,6 @@ TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
}
}
break;
case WM_SIZING:
/* Make sure the user is sizing the dialog */
/* in an acceptable range */
@ -418,18 +387,9 @@ TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
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_RemoveIcon();
@ -448,16 +408,13 @@ TaskManagerWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
if (hWindowMenu)
DestroyMenu(hWindowMenu);
return DefWindowProcW(hDlg, message, wParam, lParam);
case WM_TIMER:
/* Refresh the performance data */
PerfDataRefresh();
RefreshApplicationPage();
RefreshProcessPage();
RefreshPerformancePage();
TrayIcon_UpdateIcon();
break;
case WM_SYSCOLORCHANGE:
/* Forward WM_SYSCOLORCHANGE to common controls */
SendMessage(hApplicationPageListCtrl, WM_SYSCOLORCHANGE, 0, 0);
@ -510,7 +467,6 @@ BOOL OnCreate(HWND hWnd)
SendMessageW(hMainWnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIconW(hInst, MAKEINTRESOURCEW(IDI_TASKMANAGER)));
/* Initialize the Windows Common Controls DLL */
InitCommonControls();
/* Get the minimum window sizes */
@ -531,15 +487,9 @@ BOOL OnCreate(HWND hWnd)
/* Create tab pages */
hTabWnd = GetDlgItem(hWnd, IDC_TAB);
#if 1
hApplicationPage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_APPLICATION_PAGE), hWnd, ApplicationPageWndProc); EnableDialogTheme(hApplicationPage);
hProcessPage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_PROCESS_PAGE), hWnd, ProcessPageWndProc); EnableDialogTheme(hProcessPage);
hPerformancePage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_PERFORMANCE_PAGE), hWnd, PerformancePageWndProc); EnableDialogTheme(hPerformancePage);
#else
hApplicationPage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_APPLICATION_PAGE), hTabWnd, ApplicationPageWndProc); EnableDialogTheme(hApplicationPage);
hProcessPage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_PROCESS_PAGE), hTabWnd, ProcessPageWndProc); EnableDialogTheme(hProcessPage);
hPerformancePage = CreateDialogW(hInst, MAKEINTRESOURCEW(IDD_PERFORMANCE_PAGE), hTabWnd, PerformancePageWndProc); EnableDialogTheme(hPerformancePage);
#endif
/* Insert tabs */
LoadStringW(hInst, IDS_TAB_APPS, szTemp, 256);
@ -562,13 +512,6 @@ BOOL OnCreate(HWND hWnd)
GetClientRect(hWnd, &rc);
nOldWidth = rc.right;
nOldHeight = rc.bottom;
/* nOldStartX = rc.left; */
/*nOldStartY = rc.top; */
#define PAGE_OFFSET_LEFT 17
#define PAGE_OFFSET_TOP 72
#define PAGE_OFFSET_WIDTH (PAGE_OFFSET_LEFT*2)
#define PAGE_OFFSET_HEIGHT (PAGE_OFFSET_TOP+32)
if ((TaskManagerSettings.Left != 0) ||
(TaskManagerSettings.Top != 0) ||
@ -576,11 +519,6 @@ BOOL OnCreate(HWND hWnd)
(TaskManagerSettings.Bottom != 0))
{
MoveWindow(hWnd, TaskManagerSettings.Left, TaskManagerSettings.Top, TaskManagerSettings.Right - TaskManagerSettings.Left, TaskManagerSettings.Bottom - TaskManagerSettings.Top, TRUE);
#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);
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);
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);
#endif
}
if (TaskManagerSettings.Maximized)
ShowWindow(hWnd, SW_MAXIMIZE);
@ -593,7 +531,6 @@ BOOL OnCreate(HWND hWnd)
hUpdateSpeedMenu = GetSubMenu(hViewMenu, 1);
hCPUHistoryMenu = GetSubMenu(hViewMenu, 7);
/* Check or uncheck the always on top menu item */
if (TaskManagerSettings.AlwaysOnTop) {
CheckMenuItem(hEditMenu, ID_OPTIONS_ALWAYSONTOP, MF_BYCOMMAND|MF_CHECKED);
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
@ -602,19 +539,16 @@ BOOL OnCreate(HWND hWnd)
SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
}
/* Check or uncheck the minimize on use menu item */
if (TaskManagerSettings.MinimizeOnUse)
CheckMenuItem(hEditMenu, ID_OPTIONS_MINIMIZEONUSE, MF_BYCOMMAND|MF_CHECKED);
else
CheckMenuItem(hEditMenu, ID_OPTIONS_MINIMIZEONUSE, MF_BYCOMMAND|MF_UNCHECKED);
/* Check or uncheck the hide when minimized menu item */
if (TaskManagerSettings.HideWhenMinimized)
CheckMenuItem(hEditMenu, ID_OPTIONS_HIDEWHENMINIMIZED, MF_BYCOMMAND|MF_CHECKED);
else
CheckMenuItem(hEditMenu, ID_OPTIONS_HIDEWHENMINIMIZED, MF_BYCOMMAND|MF_UNCHECKED);
/* Check or uncheck the show 16-bit tasks menu item */
if (TaskManagerSettings.Show16BitTasks)
CheckMenuItem(hEditMenu, ID_OPTIONS_SHOW16BITTASKS, MF_BYCOMMAND|MF_CHECKED);
else
@ -670,7 +604,6 @@ BOOL OnCreate(HWND hWnd)
/* 3- Set the menu item text to its formatted counterpart */
ModifyMenuW(hShutMenu, ID_SHUTDOWN_LOGOFF, MF_BYCOMMAND | MF_STRING, ID_SHUTDOWN_LOGOFF, szLogOffItem);
/* Setup update speed */
SetUpdateSpeed(hWnd);
/*
@ -690,24 +623,11 @@ BOOL OnCreate(HWND hWnd)
return TRUE;
}
/* OnMove()
* This function handles all the moving events for the application
* It moves every child window that needs moving
*/
void OnMove( WPARAM 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);
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);
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);
#endif
}
/* OnSize()
* This function handles all the sizing events for the application
* It re-sizes every window, and child window that needs re-sizing
*/
void OnSize( WPARAM nType, int cx, int cy )
void OnSize(WPARAM nType, int cx, int cy)
{
int nParts[3];
int nXDifference;
@ -1025,18 +945,17 @@ LPWSTR GetLastErrorText(LPWSTR lpszBuf, DWORD dwSize)
LANG_NEUTRAL,
(LPWSTR)&lpszTemp,
0,
NULL );
NULL);
/* supplied buffer is not long enough */
if (!dwRet || ( (long)dwSize < (long)dwRet+14)) {
if (!dwRet || ((long)dwSize < (long)dwRet+14))
lpszBuf[0] = L'\0';
} else {
else {
lpszTemp[lstrlenW(lpszTemp)-2] = L'\0'; /*remove cr and newline character */
wsprintfW(lpszBuf, L"%s (0x%x)", lpszTemp, (int)GetLastError());
}
if (lpszTemp) {
if (lpszTemp)
LocalFree((HLOCAL)lpszTemp);
}
return lpszBuf;
}

View file

@ -6,10 +6,6 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include "resource.h"
#define RUN_APPS_PAGE
@ -39,15 +35,14 @@ typedef struct
BOOL HideWhenMinimized;
BOOL Show16BitTasks;
/* Update speed settings */
/* How many half-seconds in between updates (i.e. 0 - Paused, 1 - High, 2 - Normal, 4 - Low) */
// 0 - Paused, 1 - High, 2 - Normal, 4 - Low
DWORD UpdateSpeed;
/* Applications page settings */
DWORD ViewMode;
/* Processes page settings */
BOOL ShowProcessesFromAllUsers; /* Server-only? */
BOOL ShowProcessesFromAllUsers;
BOOL Columns[COLUMN_NMAX];
int ColumnOrderArray[COLUMN_NMAX];
int ColumnSizeArray[COLUMN_NMAX];
@ -57,10 +52,8 @@ typedef struct
/* Performance page settings */
BOOL CPUHistory_OneGraphPerCPU;
BOOL ShowKernelTimes;
} TASKMANAGER_SETTINGS, *LPTASKMANAGER_SETTINGS;
/* Global Variables: */
extern HINSTANCE hInst; /* current instance */
extern HWND hMainWnd; /* Main Window */
extern HWND hStatusWnd; /* Status Bar Window */
@ -71,7 +64,6 @@ extern int nOldWidth; /* Holds the previous client area width */
extern int nOldHeight; /* Holds the previous client area height */
extern TASKMANAGER_SETTINGS TaskManagerSettings;
/* Forward declarations of functions included in this code module: */
INT_PTR CALLBACK TaskManagerWndProc(HWND, UINT, WPARAM, LPARAM);
BOOL OnCreate(HWND hWnd);
void OnSize(WPARAM nType, int cx, int cy);
@ -83,9 +75,5 @@ void TaskManager_OnRestoreMainWindow(void);
void TaskManager_OnViewUpdateSpeed(DWORD);
void TaskManager_OnTabWndSelChange(void);
VOID ShowWin32Error(DWORD dwError);
LPTSTR GetLastErrorText( LPTSTR lpszBuf, DWORD dwSize );
LPTSTR GetLastErrorText(LPTSTR lpszBuf, DWORD dwSize);
DWORD EndLocalThread(HANDLE *hThread, DWORD dwThread);
#ifdef __cplusplus
}
#endif

View file

@ -7,7 +7,7 @@
#include "precomp.h"
HICON TrayIcon_GetProcessorUsageIcon(void)
HICON TrayIcon_GetProcessorUsageIcon(ULONG CpuUsage)
{
HICON hTrayIcon = NULL;
HDC hScreenDC = NULL;
@ -16,7 +16,6 @@ HICON TrayIcon_GetProcessorUsageIcon(void)
HBITMAP hOldBitmap = NULL;
HBITMAP hBitmapMask = NULL;
ICONINFO iconInfo;
ULONG CpuUsage;
int nLinesToDraw;
HBRUSH hBitmapBrush = NULL;
RECT rc;
@ -47,8 +46,6 @@ HICON TrayIcon_GetProcessorUsageIcon(void)
*/
hOldBitmap = SelectObject(hDC, hBitmap);
CpuUsage = PerfDataGetProcessorUsage();
/*
* Calculate how many lines to draw
* since we have 11 rows of space
@ -97,16 +94,18 @@ done:
return hTrayIcon;
}
BOOL TrayIcon_AddIcon(void)
BOOL TrayIcon_Update(DWORD dwMessage)
{
NOTIFYICONDATAW nid;
ULONG CpuUsage;
HICON hIcon = NULL;
BOOL bRetVal;
WCHAR szMsg[64];
memset(&nid, 0, sizeof(nid));
hIcon = TrayIcon_GetProcessorUsageIcon();
CpuUsage = PerfDataGetProcessorUsage();
hIcon = TrayIcon_GetProcessorUsageIcon(CpuUsage);
nid.cbSize = sizeof(nid);
nid.hWnd = hMainWnd;
@ -115,10 +114,10 @@ BOOL TrayIcon_AddIcon(void)
nid.uCallbackMessage = WM_ONTRAYICON;
nid.hIcon = hIcon;
LoadStringW(GetModuleHandleW(NULL), IDS_MSG_TRAYICONCPUUSAGE, szMsg, _countof(szMsg));
wsprintfW(nid.szTip, szMsg, PerfDataGetProcessorUsage());
LoadStringW(hInst, IDS_MSG_TRAYICONCPUUSAGE, szMsg, _countof(szMsg));
wsprintfW(nid.szTip, szMsg, CpuUsage);
bRetVal = Shell_NotifyIconW(NIM_ADD, &nid);
bRetVal = Shell_NotifyIconW(dwMessage, &nid);
if (hIcon)
DestroyIcon(hIcon);
@ -126,6 +125,11 @@ BOOL TrayIcon_AddIcon(void)
return bRetVal;
}
BOOL TrayIcon_AddIcon(VOID)
{
return TrayIcon_Update(NIM_ADD);
}
BOOL TrayIcon_RemoveIcon(void)
{
NOTIFYICONDATAW nid;
@ -143,28 +147,5 @@ BOOL TrayIcon_RemoveIcon(void)
BOOL TrayIcon_UpdateIcon(void)
{
NOTIFYICONDATAW nid;
HICON hIcon = NULL;
BOOL bRetVal;
WCHAR szMsg[64];
memset(&nid, 0, sizeof(nid));
hIcon = TrayIcon_GetProcessorUsageIcon();
nid.cbSize = sizeof(nid);
nid.hWnd = hMainWnd;
nid.uID = 0;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uCallbackMessage = WM_ONTRAYICON;
nid.hIcon = hIcon;
LoadStringW(hInst, IDS_MSG_TRAYICONCPUUSAGE, szMsg, _countof(szMsg));
wsprintfW(nid.szTip, szMsg, PerfDataGetProcessorUsage());
bRetVal = Shell_NotifyIconW(NIM_MODIFY, &nid);
if (hIcon)
DestroyIcon(hIcon);
return bRetVal;
return TrayIcon_Update(NIM_MODIFY);
}