From 05790cd38ddfe449dfddf5f77ae9692c6d6e9d1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 9 Nov 2014 11:48:18 +0000 Subject: [PATCH] [TASKMGR] Displays the current user name in the TaskMgr shutdown menu. Patch by Ismael Ferreras Morezuelas (swyter) with minor modifications by me. CORE-8536 #resolve #comment Committed in r65339, thanks! svn path=/trunk/; revision=65339 --- reactos/base/applications/taskmgr/precomp.h | 1 + reactos/base/applications/taskmgr/taskmgr.c | 36 ++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/reactos/base/applications/taskmgr/precomp.h b/reactos/base/applications/taskmgr/precomp.h index e70ffa3fd36..f6bc6813170 100644 --- a/reactos/base/applications/taskmgr/precomp.h +++ b/reactos/base/applications/taskmgr/precomp.h @@ -5,6 +5,7 @@ #error Task-Manager uses NDK functions, so it can only be compiled with Unicode support enabled! #endif +#include #include #include diff --git a/reactos/base/applications/taskmgr/taskmgr.c b/reactos/base/applications/taskmgr/taskmgr.c index 01a73b296b8..845fc7635ed 100644 --- a/reactos/base/applications/taskmgr/taskmgr.c +++ b/reactos/base/applications/taskmgr/taskmgr.c @@ -564,13 +564,17 @@ BOOL OnCreate(HWND hWnd) HMENU hMenu; HMENU hEditMenu; HMENU hViewMenu; + HMENU hShutMenu; HMENU hUpdateSpeedMenu; HMENU hCPUHistoryMenu; int nActivePage; int nParts[3]; RECT rc; WCHAR szTemp[256]; + WCHAR szLogOffItem[MAX_PATH]; + LPTSTR lpUserName; TCITEM item; + DWORD len = 0; SendMessageW(hMainWnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIconW(hInst, MAKEINTRESOURCEW(IDI_TASKMANAGER))); @@ -653,8 +657,9 @@ BOOL OnCreate(HWND hWnd) hMenu = GetMenu(hWnd); hEditMenu = GetSubMenu(hMenu, 1); hViewMenu = GetSubMenu(hMenu, 2); + hShutMenu = GetSubMenu(hMenu, 4); hUpdateSpeedMenu = GetSubMenu(hViewMenu, 1); - hCPUHistoryMenu = GetSubMenu(hViewMenu, 7); + hCPUHistoryMenu = GetSubMenu(hViewMenu, 7); /* Check or uncheck the always on top menu item */ if (TaskManagerSettings.AlwaysOnTop) { @@ -704,6 +709,35 @@ BOOL OnCreate(HWND hWnd) TabCtrl_SetCurFocus/*Sel*/(hTabWnd, 2); TabCtrl_SetCurFocus/*Sel*/(hTabWnd, nActivePage); + /* Set the username in the "Log Off %s" item of the Shutdown menu */ + + /* 1- Get the menu item text and store it temporarily */ + GetMenuStringW(hShutMenu, ID_SHUTDOWN_LOGOFF, szTemp, 256, MF_BYCOMMAND); + + /* 2- Retrieve the username length first, then allocate a buffer for it and call it again */ + if (!GetUserNameW(NULL, &len) && GetLastError() == ERROR_INSUFFICIENT_BUFFER) + { + lpUserName = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len * sizeof(WCHAR)); + if (lpUserName && GetUserNameW(lpUserName, &len)) + { + _snwprintf(szLogOffItem, sizeof(szLogOffItem)/sizeof(szLogOffItem[0]), szTemp, lpUserName); + szLogOffItem[sizeof(szLogOffItem)/sizeof(szLogOffItem[0]) - 1] = UNICODE_NULL; + } + else + { + _snwprintf(szLogOffItem, sizeof(szLogOffItem)/sizeof(szLogOffItem[0]), szTemp, L"n/a"); + } + + if (lpUserName) HeapFree(GetProcessHeap(), 0, lpUserName); + } + else + { + _snwprintf(szLogOffItem, sizeof(szLogOffItem)/sizeof(szLogOffItem[0]), szTemp, L"n/a"); + } + + /* 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);