From d5ba2a37845e5767f30529e4e7c89d8f82dd815e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 17 Jul 2016 23:06:03 +0000 Subject: [PATCH] [EVENTVWR] Commit "Part 1" of my Improvements for the Event Log Viewer. See CORE-11637 description for more details (too long to stay there). svn path=/trunk/; revision=71958 --- .../mscutils/eventvwr/CMakeLists.txt | 7 +- .../applications/mscutils/eventvwr/eventvwr.c | 2656 ++++++++++++++--- .../mscutils/eventvwr/eventvwr.rc | 5 +- .../mscutils/eventvwr/lang/bg-BG.rc | 75 +- .../mscutils/eventvwr/lang/cs-CZ.rc | 75 +- .../mscutils/eventvwr/lang/de-DE.rc | 75 +- .../mscutils/eventvwr/lang/el-GR.rc | 75 +- .../mscutils/eventvwr/lang/en-US.rc | 75 +- .../mscutils/eventvwr/lang/es-ES.rc | 75 +- .../mscutils/eventvwr/lang/fr-FR.rc | 75 +- .../mscutils/eventvwr/lang/he-IL.rc | 75 +- .../mscutils/eventvwr/lang/it-IT.rc | 75 +- .../mscutils/eventvwr/lang/ja-JP.rc | 75 +- .../mscutils/eventvwr/lang/ko-KR.rc | 75 +- .../mscutils/eventvwr/lang/no-NO.rc | 75 +- .../mscutils/eventvwr/lang/pl-PL.rc | 75 +- .../mscutils/eventvwr/lang/pt-BR.rc | 75 +- .../mscutils/eventvwr/lang/ro-RO.rc | 75 +- .../mscutils/eventvwr/lang/ru-RU.rc | 99 +- .../mscutils/eventvwr/lang/sk-SK.rc | 75 +- .../mscutils/eventvwr/lang/sq-AL.rc | 75 +- .../mscutils/eventvwr/lang/sv-SE.rc | 75 +- .../mscutils/eventvwr/lang/tr-TR.rc | 75 +- .../mscutils/eventvwr/lang/uk-UA.rc | 75 +- .../mscutils/eventvwr/lang/zh-CN.rc | 75 +- .../mscutils/eventvwr/lang/zh-TW.rc | 75 +- .../mscutils/eventvwr/res/COPYING | 15 + .../mscutils/eventvwr/res/key.ico | Bin 0 -> 2550 bytes .../mscutils/eventvwr/res/lock.ico | Bin 0 -> 2550 bytes .../applications/mscutils/eventvwr/resource.h | 68 +- 30 files changed, 3760 insertions(+), 740 deletions(-) create mode 100644 reactos/base/applications/mscutils/eventvwr/res/COPYING create mode 100644 reactos/base/applications/mscutils/eventvwr/res/key.ico create mode 100644 reactos/base/applications/mscutils/eventvwr/res/lock.ico diff --git a/reactos/base/applications/mscutils/eventvwr/CMakeLists.txt b/reactos/base/applications/mscutils/eventvwr/CMakeLists.txt index 37223fa7ecb..6bd25cbff44 100644 --- a/reactos/base/applications/mscutils/eventvwr/CMakeLists.txt +++ b/reactos/base/applications/mscutils/eventvwr/CMakeLists.txt @@ -3,10 +3,7 @@ file(GLOB eventvwr_rc_deps res/*.*) add_rc_deps(eventvwr.rc ${eventvwr_rc_deps}) add_executable(eventvwr eventvwr.c eventvwr.rc) set_module_type(eventvwr win32gui UNICODE) -add_importlibs(eventvwr user32 gdi32 comctl32 comdlg32 advapi32 shell32 msvcrt kernel32 ntdll) - -if(MSVC) - add_importlibs(eventvwr ntdll) -endif() +target_link_libraries(eventvwr ${PSEH_LIB}) +add_importlibs(eventvwr user32 gdi32 comctl32 comdlg32 advapi32 shell32 shlwapi msvcrt kernel32 ntdll) add_cd_file(TARGET eventvwr DESTINATION reactos/system32 FOR all) diff --git a/reactos/base/applications/mscutils/eventvwr/eventvwr.c b/reactos/base/applications/mscutils/eventvwr/eventvwr.c index f8ed39877cf..fd9b952ca37 100644 --- a/reactos/base/applications/mscutils/eventvwr/eventvwr.c +++ b/reactos/base/applications/mscutils/eventvwr/eventvwr.c @@ -17,28 +17,46 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* - * COPYRIGHT : See COPYING in the top level directory - * PROJECT : Event Log Viewer - * FILE : eventvwr.c - * PROGRAMMER: Marc Piulachs (marc.piulachs at codexchange [dot] net) + * PROJECT: ReactOS Event Log Viewer + * LICENSE: GPL - See COPYING in the top level directory + * FILE: base/applications/mscutils/eventvwr/eventvwr.c + * PURPOSE: Colors dialog + * PROGRAMMERS: Marc Piulachs (marc.piulachs at codexchange [dot] net) + * Eric Kohl + * Hermes Belusca-Maito */ #include #include +#define WIN32_NO_STATUS + #include #include -#include #include +#include #include #include + +#include + +#define ROUND_DOWN(n, align) (((ULONG)n) & ~((align) - 1l)) +#define ROUND_UP(n, align) ROUND_DOWN(((ULONG)n) + (align) - 1, (align)) + #include +#include #include #include #include #include +/* + * windowsx.h extensions + */ +#define EnableDlgItem(hDlg, nID, bEnable) \ + EnableWindow(GetDlgItem((hDlg), (nID)), (bEnable)) + #include /* Missing RichEdit flags in our richedit.h */ @@ -50,6 +68,12 @@ #include "resource.h" +#ifndef WM_APP + #define WM_APP 0x8000 +#endif +#define PM_PROGRESS_DLG (WM_APP + 1) + + typedef struct _DETAILDATA { BOOL bDisplayWords; @@ -84,6 +108,9 @@ static const LPCWSTR SystemLogs[] = HINSTANCE hInst; /* Current instance */ WCHAR szTitle[MAX_LOADSTRING]; /* The title bar text */ WCHAR szTitleTemplate[MAX_LOADSTRING]; /* The logged-on title bar text */ +WCHAR szStatusBarTemplate[MAX_LOADSTRING]; /* The status bar text */ +WCHAR szLoadingWait[MAX_LOADSTRING]; /* The "Loading, please wait..." text */ +WCHAR szEmptyList[MAX_LOADSTRING]; /* The "There are no items to show in this view" text */ WCHAR szSaveFilter[MAX_LOADSTRING]; /* Filter Mask for the save Dialog */ INT nSplitPos; /* Splitter position */ HWND hwndMainWindow; /* Main window */ @@ -91,27 +118,115 @@ HWND hwndTreeView; /* TreeView control */ HWND hwndListView; /* ListView control */ HWND hwndStatus; /* Status bar */ HMENU hMainMenu; /* The application's main menu */ -WCHAR szStatusBarTemplate[MAX_LOADSTRING]; /* The status bar text */ +HWND hProgressDlg = NULL; /* A progress dialog that pops up */ HTREEITEM htiSystemLogs = NULL, htiAppLogs = NULL, htiUserLogs = NULL; -BOOL NewestEventsFirst = TRUE; -PEVENTLOGRECORD *g_RecordPtrs = NULL; + +/* + * Structure that caches information about an opened event log. + */ +typedef struct _EVENTLOG +{ + LIST_ENTRY ListEntry; + + // HANDLE hEventLog; // At least for user logs, a handle is kept opened (by eventlog service) as long as the event viewer has the focus on this log. + + PWSTR ComputerName; // Computer where the log resides + +/** Cached information **/ + PWSTR LogName; // Internal name (from registry, or file path for user logs) + PWSTR FileName; // Cached, for user logs; retrieved once (at startup) from registry for system logs (i.e. may be different from the one opened by the eventlog service) + // PWSTR DisplayName; // The default value is the one computed; can be modified by the user for this local session only. + // We can use the TreeView' item name for the DisplayName... + BOOL Permanent; // TRUE: system log; FALSE: user log + +/** Volatile information **/ + // ULONG Flags; + // ULONG MaxSize; // Always retrieved from registry (only valid for system logs) + // ULONG Retention; // Always retrieved from registry (only valid for system logs) +} EVENTLOG, *PEVENTLOG; + +typedef struct _EVENTLOGFILTER +{ + LIST_ENTRY ListEntry; + + // HANDLE hEnumEventsThread; + // HANDLE hStopEnumEvent; + + // PWSTR DisplayName; // The default value is the one computed; can be modified by the user for this local session only. + // We can use the TreeView' item name for the DisplayName... + + BOOL Information; + BOOL Warning; + BOOL Error; + BOOL AuditSuccess; + BOOL AuditFailure; + + // ULONG Category; + ULONG EventID; + + /* + * The following three string filters are multi-strings that enumerate + * the list of sources/users/computers to be shown. If a string points + * to an empty string: "\0", it filters for an empty source/user/computer. + * If a string points to NULL, it filters for all sources/users/computers. + */ + PWSTR Sources; + PWSTR Users; + PWSTR ComputerNames; + + /* List of event logs maintained by this filter */ + ULONG NumOfEventLogs; + PEVENTLOG EventLogs[ANYSIZE_ARRAY]; +} EVENTLOGFILTER, *PEVENTLOGFILTER; + +/* Global event records cache for the current active event log filter */ DWORD g_TotalRecords = 0; +PEVENTLOGRECORD *g_RecordPtrs = NULL; + +/* Lists of event logs and event log filters */ +LIST_ENTRY EventLogList; +LIST_ENTRY EventLogFilterList; +PEVENTLOGFILTER ActiveFilter = NULL; +BOOL NewestEventsFirst = TRUE; + +HANDLE hEnumEventsThread = NULL; +HANDLE hStopEnumEvent = NULL; + +/* + * Event-enumerator command structures. + */ +typedef struct _ENUM_COMMAND_PARAM +{ + BOOL Start; + PEVENTLOGFILTER EventLogFilter; +} ENUM_COMMAND_PARAM, *PENUM_COMMAND_PARAM; + +ENUM_COMMAND_PARAM EnumCommand; +HANDLE hStartStopEnumEvent = NULL; // End-of-application event +HANDLE hStartEnumEvent = NULL; // Command event + +/* Default Open/Save-As dialog box */ OPENFILENAMEW sfn; -LPWSTR lpComputerName = NULL; -LPWSTR lpSourceLogName = NULL; - -DWORD dwNumLogs = 0; -LPWSTR* LogNames = NULL; /* Forward declarations of functions included in this code module */ -ATOM MyRegisterClass(HINSTANCE hInstance); + +static DWORD WINAPI +StartStopEnumEventsThread(IN LPVOID lpParameter); + +VOID BuildLogListAndFilterList(IN LPCWSTR lpComputerName); +VOID FreeLogList(VOID); +VOID FreeLogFilterList(VOID); + +ATOM MyRegisterClass(HINSTANCE); BOOL InitInstance(HINSTANCE, int); +VOID CleanupInstance(HINSTANCE); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); +static INT_PTR CALLBACK StatusMessageWindowProc(HWND, UINT, WPARAM, LPARAM); +INT_PTR EventLogProperties(HINSTANCE, HWND); INT_PTR CALLBACK EventDetails(HWND, UINT, WPARAM, LPARAM); -static INT_PTR CALLBACK StatusMessageWindowProc (HWND, UINT, WPARAM, LPARAM); int APIENTRY @@ -120,10 +235,11 @@ wWinMain(HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) { - MSG msg; - HACCEL hAccelTable; + HANDLE hThread; INITCOMMONCONTROLSEX iccx; HMODULE hRichEdit; + HACCEL hAccelTable; + MSG msg; UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); @@ -135,42 +251,92 @@ wWinMain(HINSTANCE hInstance, iccx.dwICC = ICC_LISTVIEW_CLASSES; InitCommonControlsEx(&iccx); + /* Load the RichEdit DLL to add support for RichEdit controls */ + hRichEdit = LoadLibraryW(L"riched20.dll"); + if (!hRichEdit) + return -1; + + msg.wParam = (WPARAM)-1; + /* Initialize global strings */ LoadStringW(hInstance, IDS_APP_TITLE, szTitle, ARRAYSIZE(szTitle)); LoadStringW(hInstance, IDS_APP_TITLE_EX, szTitleTemplate, ARRAYSIZE(szTitleTemplate)); LoadStringW(hInstance, IDS_STATUS_MSG, szStatusBarTemplate, ARRAYSIZE(szStatusBarTemplate)); - MyRegisterClass(hInstance); + LoadStringW(hInstance, IDS_LOADING_WAIT, szLoadingWait, ARRAYSIZE(szLoadingWait)); + LoadStringW(hInstance, IDS_NO_ITEMS, szEmptyList, ARRAYSIZE(szEmptyList)); + + if (!MyRegisterClass(hInstance)) + goto Quit; /* Perform application initialization */ if (!InitInstance(hInstance, nCmdShow)) - { - return FALSE; - } - - /* Load the RichEdit DLL to add support for RichEdit controls */ - hRichEdit = LoadLibraryW(L"riched20.dll"); - if (!hRichEdit) - { - return FALSE; - } + goto Quit; hAccelTable = LoadAcceleratorsW(hInstance, MAKEINTRESOURCEW(IDA_EVENTVWR)); + /* Create the Start/Stop enumerator thread */ + // Manual-reset event + hStartStopEnumEvent = CreateEventW(NULL, TRUE, FALSE, NULL); + if (!hStartStopEnumEvent) + goto Cleanup; + + // Auto-reset event + hStartEnumEvent = CreateEventW(NULL, FALSE, FALSE, NULL); + if (!hStartEnumEvent) + goto Cleanup; + + hThread = CreateThread(NULL, 0, + StartStopEnumEventsThread, + NULL, 0, NULL); + if (!hThread) + goto Cleanup; + + /* Retrieve the available event logs on this computer and create filters for them */ + InitializeListHead(&EventLogList); + InitializeListHead(&EventLogFilterList); + // TODO: Implement connection to remote computer... + // At the moment we only support the user local computer. + BuildLogListAndFilterList(NULL); + + // TODO: If the user wants to open an external event log with the Event Log Viewer + // (via the command line), it's here that the log should be opened. + /* Main message loop */ while (GetMessageW(&msg, NULL, 0, 0)) { - if (!TranslateAcceleratorW(msg.hwnd, hAccelTable, &msg)) + if (!TranslateAcceleratorW(hwndMainWindow, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessageW(&msg); } } + SetEvent(hStartStopEnumEvent); + WaitForSingleObject(hThread, INFINITE); + CloseHandle(hThread); + + /* Free the filters list and the event logs list */ + FreeLogFilterList(); + FreeLogList(); + +Cleanup: + /* Handle cleanup */ + if (hStartEnumEvent) + CloseHandle(hStartEnumEvent); + if (hStartStopEnumEvent) + CloseHandle(hStartStopEnumEvent); + + CleanupInstance(hInstance); + +Quit: FreeLibrary(hRichEdit); return (int)msg.wParam; } + +/* GENERIC HELPER FUNCTIONS ***************************************************/ + VOID ShowLastWin32Error(VOID) { @@ -178,7 +344,7 @@ ShowLastWin32Error(VOID) LPWSTR lpMessageBuffer; dwError = GetLastError(); - FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, + FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwError, 0, @@ -191,8 +357,8 @@ ShowLastWin32Error(VOID) } VOID -EventTimeToSystemTime(DWORD EventTime, - SYSTEMTIME *pSystemTime) +EventTimeToSystemTime(IN DWORD EventTime, + OUT PSYSTEMTIME pSystemTime) { SYSTEMTIME st1970 = { 1970, 1, 0, 1, 0, 0, 0, 0 }; FILETIME ftLocal; @@ -210,6 +376,667 @@ EventTimeToSystemTime(DWORD EventTime, FileTimeToSystemTime(&ftLocal, pSystemTime); } +/* + * This function takes in entry a path to a single DLL, in which + * the message string of ID dwMessageId has to be searched. + * The other parameters are similar to those of the FormatMessageW API. + */ +LPWSTR +GetMessageStringFromDll( + IN LPCWSTR lpMessageDll, + IN DWORD dwFlags, // If we always use the same flags, just remove this param... + IN DWORD dwMessageId, + IN DWORD nSize, + IN va_list* Arguments OPTIONAL) +{ + HMODULE hLibrary; + DWORD dwLength; + LPWSTR lpMsgBuf = NULL; + + hLibrary = LoadLibraryExW(lpMessageDll, NULL, + /* LOAD_LIBRARY_AS_IMAGE_RESOURCE | */ LOAD_LIBRARY_AS_DATAFILE); + if (hLibrary == NULL) + return NULL; + + _SEH2_TRY + { + /* + * Retrieve the message string without appending extra newlines. + * Wrap in SEH to protect from invalid string parameters. + */ + _SEH2_TRY + { + dwLength = FormatMessageW(dwFlags, + /* FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | + FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, */ + hLibrary, + dwMessageId, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPWSTR)&lpMsgBuf, + nSize, + Arguments); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + dwLength = 0; + + /* + * An exception occurred while calling FormatMessage, this is usually + * the sign that a parameter was invalid, either 'lpMsgBuf' was NULL + * but we did not pass the flag FORMAT_MESSAGE_ALLOCATE_BUFFER, or the + * array pointer 'Arguments' was NULL or did not contain enough elements, + * and we did not pass the flag FORMAT_MESSAGE_IGNORE_INSERTS, and the + * message string expected too many inserts. + * In this last case only, we can call again FormatMessage but ignore + * explicitely the inserts. The string that we will return to the user + * will not be pre-formatted. + */ + if (((dwFlags & FORMAT_MESSAGE_ALLOCATE_BUFFER) || lpMsgBuf) && + !(dwFlags & FORMAT_MESSAGE_IGNORE_INSERTS)) + { + /* Remove any possible harmful flags and always ignore inserts */ + dwFlags &= ~FORMAT_MESSAGE_ARGUMENT_ARRAY; + dwFlags |= FORMAT_MESSAGE_IGNORE_INSERTS; + + /* If this call also throws an exception, we are really dead */ + dwLength = FormatMessageW(dwFlags, + hLibrary, + dwMessageId, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPWSTR)&lpMsgBuf, + nSize, + Arguments); + } + } + _SEH2_END; + } + _SEH2_FINALLY + { + FreeLibrary(hLibrary); + } + _SEH2_END; + + if (dwLength == 0) + { + ASSERT(lpMsgBuf == NULL); + lpMsgBuf = NULL; + } + else + { + ASSERT(lpMsgBuf); + } + + return lpMsgBuf; +} + +/* + * This function takes in entry a comma-separated list of DLLs, in which + * the message string of ID dwMessageId has to be searched. + * The other parameters are similar to those of the FormatMessageW API. + */ +LPWSTR +GetMessageStringFromDllList( + IN LPCWSTR lpMessageDllList, + IN DWORD dwFlags, // If we always use the same flags, just remove this param... + IN DWORD dwMessageId, + IN DWORD nSize, + IN va_list* Arguments OPTIONAL) +{ + BOOL Success = FALSE; + SIZE_T cbLength; + LPWSTR szMessageDllList; + LPWSTR szDll; + LPWSTR lpMsgBuf = NULL; + + /* Allocate a local buffer for the DLL list that can be tokenized */ + // TODO: Optimize that!! Maybe we can cleverly use lpMessageDllList in read/write mode + // and cleverly temporarily replace the ';' by UNICODE_NULL, do our job, then reverse the change. + cbLength = (wcslen(lpMessageDllList) + 1) * sizeof(WCHAR); + szMessageDllList = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cbLength); + if (!szMessageDllList) + return NULL; + RtlCopyMemory(szMessageDllList, lpMessageDllList, cbLength); + + /* Loop through the list of message DLLs */ + szDll = wcstok(szMessageDllList, EVENT_DLL_SEPARATOR); + while ((szDll != NULL) && !Success) + { + // Uses MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT) + lpMsgBuf = GetMessageStringFromDll(szDll, + dwFlags, + dwMessageId, + nSize, + Arguments); + if (lpMsgBuf) + { + /* The ID was found and the message was formatted */ + Success = TRUE; + break; + } + + /* + * The DLL could not be loaded, or the message could not be found, + * try the next DLL, if any. + */ + szDll = wcstok(NULL, EVENT_DLL_SEPARATOR); + } + + HeapFree(GetProcessHeap(), 0, szMessageDllList); + + return lpMsgBuf; +} + + +typedef struct +{ + LPWSTR pStartingAddress; // Pointer to the beginning of a parameter string in pMessage + LPWSTR pEndingAddress; // Pointer to the end of a parameter string in pMessage + DWORD pParameterID; // Parameter identifier found in pMessage + LPWSTR pParameter; // Actual parameter string +} param_strings_format_data; + +DWORD +ApplyParameterStringsToMessage( + IN LPCWSTR lpMessageDllList, + IN BOOL bMessagePreFormatted, + IN CONST LPCWSTR pMessage, + OUT LPWSTR* pFinalMessage) +{ + /* + * This code is heavily adapted from the MSDN example: + * https://msdn.microsoft.com/en-us/library/windows/desktop/bb427356.aspx + * with bugs removed. + */ + + DWORD Status = ERROR_SUCCESS; + DWORD dwParamCount = 0; // Number of insertion strings found in pMessage + size_t cchBuffer = 0; // Size of the buffer in characters + size_t cchParams = 0; // Number of characters in all the parameter strings + size_t cch = 0; + DWORD i = 0; + param_strings_format_data* pParamData = NULL; // Array of pointers holding information about each parameter string in pMessage + LPWSTR pTempMessage = (LPWSTR)pMessage; + LPWSTR pTempFinalMessage = NULL; + + *pFinalMessage = NULL; + + /* Determine the number of parameter insertion strings in pMessage */ + if (bMessagePreFormatted) + { + while ((pTempMessage = wcschr(pTempMessage, L'%'))) + { + pTempMessage++; + if (isdigit(*pTempMessage)) + { + dwParamCount++; + while (isdigit(*++pTempMessage)) ; + } + } + } + else + { + while ((pTempMessage = wcsstr(pTempMessage, L"%%"))) + { + pTempMessage += 2; + if (isdigit(*pTempMessage)) + { + dwParamCount++; + while (isdigit(*++pTempMessage)) ; + } + } + } + + /* If there are no parameter insertion strings in pMessage, just return */ + if (dwParamCount == 0) + { + // *pFinalMessage = NULL; + goto Cleanup; + } + + /* Allocate the array of parameter string format data */ + pParamData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwParamCount * sizeof(param_strings_format_data)); + if (!pParamData) + { + Status = ERROR_OUTOFMEMORY; + goto Cleanup; + } + + /* + * Retrieve each parameter in pMessage and the beginning and end of the + * insertion string, as well as the message identifier of the parameter. + */ + pTempMessage = (LPWSTR)pMessage; + if (bMessagePreFormatted) + { + while ((pTempMessage = wcschr(pTempMessage, L'%')) && (i < dwParamCount)) + { + pTempMessage++; + if (isdigit(*pTempMessage)) + { + pParamData[i].pStartingAddress = pTempMessage-1; + pParamData[i].pParameterID = (DWORD)_wtol(pTempMessage); + + while (isdigit(*++pTempMessage)) ; + + pParamData[i].pEndingAddress = pTempMessage; + i++; + } + } + } + else + { + while ((pTempMessage = wcsstr(pTempMessage, L"%%")) && (i < dwParamCount)) + { + pTempMessage += 2; + if (isdigit(*pTempMessage)) + { + pParamData[i].pStartingAddress = pTempMessage-2; + pParamData[i].pParameterID = (DWORD)_wtol(pTempMessage); + + while (isdigit(*++pTempMessage)) ; + + pParamData[i].pEndingAddress = pTempMessage; + i++; + } + } + } + + /* Retrieve each parameter string */ + for (i = 0; i < dwParamCount; i++) + { + // pParamData[i].pParameter = GetMessageString(pParamData[i].pParameterID, 0, NULL); + pParamData[i].pParameter = + GetMessageStringFromDllList(lpMessageDllList, + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | + FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, + pParamData[i].pParameterID, + 0, NULL); + if (!pParamData[i].pParameter) + { + /* Skip the insertion string */ + continue; + } + + cchParams += wcslen(pParamData[i].pParameter); + } + + /* + * Allocate the final message buffer, the size of which is based on the + * length of the original message and the length of each parameter string. + */ + cchBuffer = wcslen(pMessage) + cchParams + 1; + *pFinalMessage = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cchBuffer * sizeof(WCHAR)); + if (!*pFinalMessage) + { + Status = ERROR_OUTOFMEMORY; + goto Cleanup; + } + + pTempFinalMessage = *pFinalMessage; + + /* Build the final message string */ + pTempMessage = (LPWSTR)pMessage; + for (i = 0; i < dwParamCount; i++) + { + /* Append the segment from pMessage */ + cch = pParamData[i].pStartingAddress - pTempMessage; + StringCchCopyNW(pTempFinalMessage, cchBuffer, pTempMessage, cch); + pTempMessage = pParamData[i].pEndingAddress; + cchBuffer -= cch; + pTempFinalMessage += cch; + + /* Append the parameter string */ + if (pParamData[i].pParameter) + { + StringCchCopyW(pTempFinalMessage, cchBuffer, pParamData[i].pParameter); + cch = wcslen(pParamData[i].pParameter); // pTempFinalMessage + } + else + { + /* + * We failed to retrieve the parameter string before, so just + * place back the original string placeholder. + */ + cch = pParamData[i].pEndingAddress /* == pTempMessage */ - pParamData[i].pStartingAddress; + StringCchCopyNW(pTempFinalMessage, cchBuffer, pParamData[i].pStartingAddress, cch); + // cch = wcslen(pTempFinalMessage); + } + cchBuffer -= cch; + pTempFinalMessage += cch; + } + + /* Append the last segment from pMessage */ + StringCchCopyW(pTempFinalMessage, cchBuffer, pTempMessage); + +Cleanup: + + // if (Status != ERROR_SUCCESS) + // *pFinalMessage = NULL; + + if (pParamData) + { + for (i = 0; i < dwParamCount; i++) + { + if (pParamData[i].pParameter) + LocalFree(pParamData[i].pParameter); + } + + HeapFree(GetProcessHeap(), 0, pParamData); + } + + return Status; +} + + +/* + * The following functions were adapted from + * shell32!dialogs/filedefext.cpp:``SH_...'' functions. + */ + +UINT +FormatInteger(LONGLONG Num, LPWSTR pwszResult, UINT cchResultMax) +{ + WCHAR wszNumber[24]; + WCHAR wszDecimalSep[8], wszThousandSep[8]; + NUMBERFMTW nf; + WCHAR wszGrouping[12]; + INT cchGrouping; + INT cchResult; + INT i; + + // Print the number in uniform mode + swprintf(wszNumber, L"%I64u", Num); + + // Get system strings for decimal and thousand separators. + GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, wszDecimalSep, _countof(wszDecimalSep)); + GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, wszThousandSep, _countof(wszThousandSep)); + + // Initialize format for printing the number in bytes + ZeroMemory(&nf, sizeof(nf)); + nf.lpDecimalSep = wszDecimalSep; + nf.lpThousandSep = wszThousandSep; + + // Get system string for groups separator + cchGrouping = GetLocaleInfoW(LOCALE_USER_DEFAULT, + LOCALE_SGROUPING, + wszGrouping, + _countof(wszGrouping)); + + // Convert grouping specs from string to integer + for (i = 0; i < cchGrouping; i++) + { + WCHAR wch = wszGrouping[i]; + + if (wch >= L'0' && wch <= L'9') + nf.Grouping = nf.Grouping * 10 + (wch - L'0'); + else if (wch != L';') + break; + } + + if ((nf.Grouping % 10) == 0) + nf.Grouping /= 10; + else + nf.Grouping *= 10; + + // Format the number + cchResult = GetNumberFormatW(LOCALE_USER_DEFAULT, + 0, + wszNumber, + &nf, + pwszResult, + cchResultMax); + + if (!cchResult) + return 0; + + // GetNumberFormatW returns number of characters including UNICODE_NULL + return cchResult - 1; +} + +UINT +FormatByteSize(LONGLONG cbSize, LPWSTR pwszResult, UINT cchResultMax) +{ + INT cchWritten; + LPWSTR pwszEnd; + size_t cchRemaining; + + /* Write formated bytes count */ + cchWritten = FormatInteger(cbSize, pwszResult, cchResultMax); + if (!cchWritten) + return 0; + + /* Copy " bytes" to buffer */ + pwszEnd = pwszResult + cchWritten; + cchRemaining = cchResultMax - cchWritten; + StringCchCopyExW(pwszEnd, cchRemaining, L" ", &pwszEnd, &cchRemaining, 0); + cchWritten = LoadStringW(hInst, IDS_BYTES_FORMAT, pwszEnd, cchRemaining); + cchRemaining -= cchWritten; + + return cchResultMax - cchRemaining; +} + +LPWSTR +FormatFileSizeWithBytes(const PULARGE_INTEGER lpQwSize, LPWSTR pwszResult, UINT cchResultMax) +{ + UINT cchWritten; + LPWSTR pwszEnd; + size_t cchRemaining; + + /* Format bytes in KBs, MBs etc */ + if (StrFormatByteSizeW(lpQwSize->QuadPart, pwszResult, cchResultMax) == NULL) + return NULL; + + /* If there is less bytes than 1KB, we have nothing to do */ + if (lpQwSize->QuadPart < 1024) + return pwszResult; + + /* Concatenate " (" */ + cchWritten = wcslen(pwszResult); + pwszEnd = pwszResult + cchWritten; + cchRemaining = cchResultMax - cchWritten; + StringCchCopyExW(pwszEnd, cchRemaining, L" (", &pwszEnd, &cchRemaining, 0); + + /* Write formated bytes count */ + cchWritten = FormatByteSize(lpQwSize->QuadPart, pwszEnd, cchRemaining); + pwszEnd += cchWritten; + cchRemaining -= cchWritten; + + /* Copy ")" to the buffer */ + StringCchCopyW(pwszEnd, cchRemaining, L")"); + + return pwszResult; +} + +/* Adapted from shell32!dialogs/filedefext.cpp:``CFileDefExt::GetFileTimeString'' */ +BOOL +GetFileTimeString(LPFILETIME lpFileTime, LPWSTR pwszResult, UINT cchResult) +{ + FILETIME ft; + SYSTEMTIME st; + int cchWritten; + size_t cchRemaining = cchResult; + LPWSTR pwszEnd = pwszResult; + + if (!FileTimeToLocalFileTime(lpFileTime, &ft) || !FileTimeToSystemTime(&ft, &st)) + return FALSE; + + cchWritten = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL, pwszEnd, cchRemaining); + if (cchWritten) + --cchWritten; // GetDateFormatW returns count with terminating zero + // else + // ERR("GetDateFormatW failed\n"); + + cchRemaining -= cchWritten; + pwszEnd += cchWritten; + + StringCchCopyExW(pwszEnd, cchRemaining, L", ", &pwszEnd, &cchRemaining, 0); + + cchWritten = GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &st, NULL, pwszEnd, cchRemaining); + if (cchWritten) + --cchWritten; // GetTimeFormatW returns count with terminating zero + // else + // ERR("GetTimeFormatW failed\n"); + + return TRUE; +} + + +HTREEITEM +TreeViewAddItem(IN HWND hTreeView, + IN HTREEITEM hParent, + IN LPWSTR lpText, + IN INT Image, + IN INT SelectedImage, + IN LPARAM lParam) +{ + TV_INSERTSTRUCTW Insert; + + ZeroMemory(&Insert, sizeof(Insert)); + + Insert.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE; + Insert.hInsertAfter = TVI_LAST; + Insert.hParent = hParent; + Insert.item.pszText = lpText; + Insert.item.iImage = Image; + Insert.item.iSelectedImage = SelectedImage; + Insert.item.lParam = lParam; + + Insert.item.mask |= TVIF_STATE; + Insert.item.stateMask = TVIS_OVERLAYMASK; + Insert.item.state = INDEXTOOVERLAYMASK(1); + + return TreeView_InsertItem(hTreeView, &Insert); +} + + +/* LOG HELPER FUNCTIONS *******************************************************/ + +PEVENTLOG +AllocEventLog(IN PCWSTR ComputerName OPTIONAL, + IN PCWSTR LogName, + IN BOOL Permanent) +{ + PEVENTLOG EventLog; + UINT cchName; + + /* Allocate a new event log entry */ + EventLog = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*EventLog)); + if (!EventLog) + return NULL; + + /* Allocate the computer name string (optional) and copy it */ + if (ComputerName) + { + cchName = wcslen(ComputerName) + 1; + EventLog->ComputerName = HeapAlloc(GetProcessHeap(), 0, cchName * sizeof(WCHAR)); + if (EventLog->ComputerName) + StringCchCopyW(EventLog->ComputerName, cchName, ComputerName); + } + + /* Allocate the event log name string and copy it */ + cchName = wcslen(LogName) + 1; + EventLog->LogName = HeapAlloc(GetProcessHeap(), 0, cchName * sizeof(WCHAR)); + if (!EventLog->LogName) + { + HeapFree(GetProcessHeap(), 0, EventLog); + return NULL; + } + StringCchCopyW(EventLog->LogName, cchName, LogName); + + EventLog->Permanent = Permanent; + + return EventLog; +} + +VOID +FreeEventLog(IN PEVENTLOG EventLog) +{ + if (EventLog->LogName) + HeapFree(GetProcessHeap(), 0, EventLog->LogName); + + if (EventLog->FileName) + HeapFree(GetProcessHeap(), 0, EventLog->FileName); + + HeapFree(GetProcessHeap(), 0, EventLog); +} + + +PWSTR +AllocAndCopyMultiStr(IN PCWSTR MultiStr OPTIONAL) +{ + PWSTR pStr; + ULONG Length; + + if (!MultiStr) + return NULL; + + pStr = (PWSTR)MultiStr; + while (*pStr) pStr += (wcslen(pStr) + 1); + Length = MultiStr - pStr + 2; + + pStr = HeapAlloc(GetProcessHeap(), 0, Length * sizeof(WCHAR)); + // NOTE: If we failed allocating the string, then fall back into no filter! + if (pStr) + RtlCopyMemory(pStr, MultiStr, Length * sizeof(WCHAR)); + + return pStr; +} + +PEVENTLOGFILTER +AllocEventLogFilter(// IN PCWSTR FilterName, + IN BOOL Information, + IN BOOL Warning, + IN BOOL Error, + IN BOOL AuditSuccess, + IN BOOL AuditFailure, + IN PCWSTR Sources OPTIONAL, + IN PCWSTR Users OPTIONAL, + IN PCWSTR ComputerNames OPTIONAL, + IN ULONG NumOfEventLogs, + IN PEVENTLOG* EventLogs) +{ + PEVENTLOGFILTER EventLogFilter; + + /* Allocate a new event log filter entry, big enough to accommodate the list of logs */ + EventLogFilter = HeapAlloc(GetProcessHeap(), + HEAP_ZERO_MEMORY, + FIELD_OFFSET(EVENTLOGFILTER, EventLogs[NumOfEventLogs])); + if (!EventLogFilter) + return NULL; + + EventLogFilter->Information = Information; + EventLogFilter->Warning = Warning; + EventLogFilter->Error = Error; + EventLogFilter->AuditSuccess = AuditSuccess; + EventLogFilter->AuditFailure = AuditFailure; + + /* Allocate and copy the sources, users, and computers multi-strings */ + EventLogFilter->Sources = AllocAndCopyMultiStr(Sources); + EventLogFilter->Users = AllocAndCopyMultiStr(Users); + EventLogFilter->ComputerNames = AllocAndCopyMultiStr(ComputerNames); + + /* Copy the list of event logs */ + EventLogFilter->NumOfEventLogs = NumOfEventLogs; + RtlCopyMemory(EventLogFilter->EventLogs, EventLogs, NumOfEventLogs * sizeof(PEVENTLOG)); + + return EventLogFilter; +} + +VOID +FreeEventLogFilter(IN PEVENTLOGFILTER EventLogFilter) +{ + if (EventLogFilter->Sources) + HeapFree(GetProcessHeap(), 0, EventLogFilter->Sources); + + if (EventLogFilter->Users) + HeapFree(GetProcessHeap(), 0, EventLogFilter->Users); + + if (EventLogFilter->ComputerNames) + HeapFree(GetProcessHeap(), 0, EventLogFilter->ComputerNames); + + HeapFree(GetProcessHeap(), 0, EventLogFilter); +} + void TrimNulls(LPWSTR s) @@ -225,62 +1052,67 @@ TrimNulls(LPWSTR s) } } - BOOL GetEventMessageFileDLL(IN LPCWSTR lpLogName, IN LPCWSTR SourceName, IN LPCWSTR EntryName, - OUT PWCHAR ExpandedName) // TODO: Add IN DWORD BufLen + OUT PWCHAR lpModuleName) // TODO: Add IN DWORD BufLen { - DWORD dwSize; + BOOL Success = FALSE; + LONG Result; + DWORD Type, dwSize; WCHAR szModuleName[MAX_PATH]; WCHAR szKeyName[MAX_PATH]; - HKEY hAppKey = NULL; + HKEY hLogKey = NULL; HKEY hSourceKey = NULL; - BOOL bReturn = FALSE; StringCbCopyW(szKeyName, sizeof(szKeyName), EVENTLOG_BASE_KEY); StringCbCatW(szKeyName, sizeof(szKeyName), lpLogName); - if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, - szKeyName, - 0, - KEY_READ, - &hAppKey) != ERROR_SUCCESS) + Result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, + szKeyName, + 0, + KEY_READ, + &hLogKey); + if (Result != ERROR_SUCCESS) + return FALSE; + + Result = RegOpenKeyExW(hLogKey, + SourceName, + 0, + KEY_QUERY_VALUE, + &hSourceKey); + if (Result != ERROR_SUCCESS) { + RegCloseKey(hLogKey); return FALSE; } - if (RegOpenKeyExW(hAppKey, - SourceName, - 0, - KEY_READ, - &hSourceKey) == ERROR_SUCCESS) + dwSize = sizeof(szModuleName); + Result = RegQueryValueExW(hSourceKey, + EntryName, + NULL, + &Type, + (LPBYTE)szModuleName, + &dwSize); + if ((Result != ERROR_SUCCESS) || (Type != REG_EXPAND_SZ && Type != REG_SZ)) { - dwSize = sizeof(szModuleName); - if (RegQueryValueExW(hSourceKey, - EntryName, - NULL, - NULL, - (LPBYTE)szModuleName, - &dwSize) == ERROR_SUCCESS) - { - /* Returns a string containing the requested substituted environment variable */ - ExpandEnvironmentStringsW(szModuleName, ExpandedName, MAX_PATH); - - /* Successful */ - bReturn = TRUE; - } - - RegCloseKey(hSourceKey); + szModuleName[0] = UNICODE_NULL; + } + else + { + /* NULL-terminate the string and expand it */ + szModuleName[dwSize / sizeof(WCHAR) - 1] = UNICODE_NULL; + ExpandEnvironmentStringsW(szModuleName, lpModuleName, ARRAYSIZE(szModuleName)); + Success = TRUE; } - RegCloseKey(hAppKey); + RegCloseKey(hSourceKey); + RegCloseKey(hLogKey); - return bReturn; + return Success; } - BOOL GetEventCategory(IN LPCWSTR KeyName, IN LPCWSTR SourceName, @@ -288,27 +1120,21 @@ GetEventCategory(IN LPCWSTR KeyName, OUT PWCHAR CategoryName) // TODO: Add IN DWORD BufLen { BOOL Success = FALSE; - HMODULE hLibrary = NULL; WCHAR szMessageDLL[MAX_PATH]; LPWSTR lpMsgBuf = NULL; if (!GetEventMessageFileDLL(KeyName, SourceName, EVENT_CATEGORY_MESSAGE_FILE, szMessageDLL)) goto Quit; - hLibrary = LoadLibraryExW(szMessageDLL, NULL, - LOAD_LIBRARY_AS_IMAGE_RESOURCE | LOAD_LIBRARY_AS_DATAFILE); - if (hLibrary == NULL) - goto Quit; - /* Retrieve the message string without appending extra newlines */ - if (FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE | - FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_ARGUMENT_ARRAY | FORMAT_MESSAGE_MAX_WIDTH_MASK, - hLibrary, - pevlr->EventCategory, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPWSTR)&lpMsgBuf, - EVENT_MESSAGE_FILE_BUFFER, - NULL) != 0) + lpMsgBuf = + GetMessageStringFromDllList(szMessageDLL, + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | + FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, + pevlr->EventCategory, + EVENT_MESSAGE_FILE_BUFFER, + NULL); + if (lpMsgBuf) { /* Trim the string */ TrimNulls(lpMsgBuf); @@ -316,16 +1142,13 @@ GetEventCategory(IN LPCWSTR KeyName, /* Copy the category name */ StringCchCopyW(CategoryName, MAX_PATH, lpMsgBuf); + /* Free the buffer allocated by FormatMessage */ + LocalFree(lpMsgBuf); + /* The ID was found and the message was formatted */ Success = TRUE; } - /* Free the buffer allocated by FormatMessage */ - if (lpMsgBuf) - LocalFree(lpMsgBuf); - - FreeLibrary(hLibrary); - Quit: if (!Success) { @@ -347,12 +1170,11 @@ GetEventMessage(IN LPCWSTR KeyName, { BOOL Success = FALSE; DWORD i; - HMODULE hLibrary = NULL; - WCHAR SourceModuleName[1000]; - WCHAR ParameterModuleName[1000]; + size_t cch; + WCHAR SourceModuleName[1024]; + WCHAR ParameterModuleName[1024]; BOOL IsParamModNameCached = FALSE; LPWSTR lpMsgBuf = NULL; - LPWSTR szDll; LPWSTR szStringArray, szMessage; LPWSTR *szArguments; @@ -363,26 +1185,52 @@ GetEventMessage(IN LPCWSTR KeyName, if (!GetEventMessageFileDLL(KeyName, SourceName, EVENT_MESSAGE_FILE, SourceModuleName)) goto Quit; - /* Allocate space for parameters */ + /* Allocate space for insertion strings */ szArguments = HeapAlloc(GetProcessHeap(), 0, pevlr->NumStrings * sizeof(LPVOID)); if (!szArguments) goto Quit; + if (!IsParamModNameCached) + { + /* Now that the parameter file list is loaded, no need to reload it at the next run! */ + IsParamModNameCached = GetEventMessageFileDLL(KeyName, SourceName, EVENT_PARAMETER_MESSAGE_FILE, ParameterModuleName); + // FIXME: If the string loading failed the first time, no need to retry it just after??? + } + + if (IsParamModNameCached) + { + /* Not yet support for reading messages from parameter message DLL */ + } + + szMessage = szStringArray; + /* + * HACK: + * We do some hackish preformatting of the cached event strings... + * That's because after we pass the string to FormatMessage + * (via GetMessageStringFromDllList) with the FORMAT_MESSAGE_ARGUMENT_ARRAY + * flag, instead of ignoring the insertion parameters and do the formatting + * by ourselves. Therefore, the resulting string should have the parameter + * string placeholders starting with a single '%' instead of a mix of one + * and two '%'. + */ + /* HACK part 1: Compute the full length of the string array */ + cch = 0; + for (i = 0; i < pevlr->NumStrings; i++) + { + szMessage += wcslen(szMessage) + 1; + } + cch = szMessage - szStringArray; + + /* HACK part 2: Now do the HACK proper! */ szMessage = szStringArray; for (i = 0; i < pevlr->NumStrings; i++) { - if (wcsstr(szMessage, L"%%")) + lpMsgBuf = szMessage; + while ((lpMsgBuf = wcsstr(lpMsgBuf, L"%%"))) { - if (!IsParamModNameCached) + if (isdigit(lpMsgBuf[2])) { - /* Now that the parameter file list is loaded, no need to reload it at the next run! */ - IsParamModNameCached = GetEventMessageFileDLL(KeyName, SourceName, EVENT_PARAMETER_MESSAGE_FILE, ParameterModuleName); - // FIXME: If the string loading failed the first time, no need to retry it just after??? - } - - if (IsParamModNameCached) - { - /* Not yet support for reading messages from parameter message DLL */ + RtlMoveMemory(lpMsgBuf, lpMsgBuf+1, ((szStringArray + cch) - lpMsgBuf - 1) * sizeof(WCHAR)); } } @@ -390,49 +1238,36 @@ GetEventMessage(IN LPCWSTR KeyName, szMessage += wcslen(szMessage) + 1; } - /* Loop through the list of event message DLLs */ - szDll = wcstok(SourceModuleName, EVENT_DLL_SEPARATOR); - while ((szDll != NULL) && !Success) + /* Retrieve the message string without appending extra newlines */ + lpMsgBuf = + GetMessageStringFromDllList(SourceModuleName, + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | + FORMAT_MESSAGE_ARGUMENT_ARRAY | FORMAT_MESSAGE_MAX_WIDTH_MASK, + pevlr->EventID, + 0, + (va_list*)szArguments); + if (lpMsgBuf) { - hLibrary = LoadLibraryExW(szDll, NULL, - LOAD_LIBRARY_AS_IMAGE_RESOURCE | LOAD_LIBRARY_AS_DATAFILE); - if (hLibrary == NULL) + /* Trim the string */ + TrimNulls(lpMsgBuf); + + szMessage = NULL; + Success = (ApplyParameterStringsToMessage(ParameterModuleName, + TRUE, + lpMsgBuf, + &szMessage) == ERROR_SUCCESS); + if (Success && szMessage) { - /* The DLL could not be loaded, try the next one (if any) */ - szDll = wcstok(NULL, EVENT_DLL_SEPARATOR); - continue; + /* Free the buffer allocated by FormatMessage */ + LocalFree(lpMsgBuf); + lpMsgBuf = szMessage; } - /* Retrieve the message string without appending extra newlines */ - if (FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE | - FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_ARGUMENT_ARRAY | FORMAT_MESSAGE_MAX_WIDTH_MASK, - hLibrary, - pevlr->EventID, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPWSTR)&lpMsgBuf, - 0, - (va_list*)szArguments) == 0) - { - /* We haven't found the string, get next DLL (if any) */ - szDll = wcstok(NULL, EVENT_DLL_SEPARATOR); - } - else if (lpMsgBuf) - { - /* Trim the string */ - TrimNulls((LPWSTR)lpMsgBuf); - - /* Copy the event text */ - StringCchCopyW(EventText, EVENT_MESSAGE_EVENTTEXT_BUFFER, lpMsgBuf); - - /* The ID was found and the message was formatted */ - Success = TRUE; - } + /* Copy the event text */ + StringCchCopyW(EventText, EVENT_MESSAGE_EVENTTEXT_BUFFER, lpMsgBuf); /* Free the buffer allocated by FormatMessage */ - if (lpMsgBuf) - LocalFree(lpMsgBuf); - - FreeLibrary(hLibrary); + LocalFree(lpMsgBuf); } HeapFree(GetProcessHeap(), 0, szArguments); @@ -458,7 +1293,6 @@ Quit: return Success; } - VOID GetEventType(IN WORD dwEventType, OUT PWCHAR eventTypeText) // TODO: Add IN DWORD BufLen @@ -474,15 +1308,15 @@ GetEventType(IN WORD dwEventType, case EVENTLOG_INFORMATION_TYPE: LoadStringW(hInst, IDS_EVENTLOG_INFORMATION_TYPE, eventTypeText, MAX_LOADSTRING); break; + case EVENTLOG_SUCCESS: + LoadStringW(hInst, IDS_EVENTLOG_SUCCESS, eventTypeText, MAX_LOADSTRING); + break; case EVENTLOG_AUDIT_SUCCESS: LoadStringW(hInst, IDS_EVENTLOG_AUDIT_SUCCESS, eventTypeText, MAX_LOADSTRING); break; case EVENTLOG_AUDIT_FAILURE: LoadStringW(hInst, IDS_EVENTLOG_AUDIT_FAILURE, eventTypeText, MAX_LOADSTRING); break; - case EVENTLOG_SUCCESS: - LoadStringW(hInst, IDS_EVENTLOG_SUCCESS, eventTypeText, MAX_LOADSTRING); - break; default: LoadStringW(hInst, IDS_EVENTLOG_UNKNOWN_TYPE, eventTypeText, MAX_LOADSTRING); break; @@ -491,7 +1325,7 @@ GetEventType(IN WORD dwEventType, BOOL GetEventUserName(PEVENTLOGRECORD pelr, - OUT PWCHAR pszUser) + OUT PWCHAR pszUser) // TODO: Add IN DWORD BufLen { PSID lpSid; WCHAR szName[1024]; @@ -506,7 +1340,7 @@ GetEventUserName(PEVENTLOGRECORD pelr, /* User SID */ if (pelr->UserSidLength > 0) { - if (LookupAccountSidW(NULL, + if (LookupAccountSidW(NULL, // FIXME: Use computer name? From the particular event? lpSid, szName, &cchName, @@ -523,47 +1357,6 @@ GetEventUserName(PEVENTLOGRECORD pelr, } -static DWORD WINAPI -ShowStatusMessageThread(IN LPVOID lpParameter) -{ - HWND* phWnd = (HWND*)lpParameter; - HWND hWnd; - MSG Msg; - - hWnd = CreateDialogW(hInst, - MAKEINTRESOURCEW(IDD_PROGRESSBOX), - GetDesktopWindow(), // hwndMainWindow, - StatusMessageWindowProc); - if (!hWnd) - return 0; - - /* - * FIXME: With this technique, there is one problem, namely that if - * for some reason, the call to CreateDialogW takes longer than the - * whole event-loading code to execute, then it may happen that the - * event-loading code tries to close this dialog *BEFORE* we had the - * time to return the window handle, hence the progress dialog would - * be created *AFTER* the event-loading code has finished its job and - * as a result, we would have a orphan window floating around. - */ - - *phWnd = hWnd; - - ShowWindow(hWnd, SW_SHOW); - - /* Message loop for the Status window */ - while (GetMessageW(&Msg, NULL, 0, 0)) - { - TranslateMessage(&Msg); - DispatchMessageW(&Msg); - } - - DestroyWindow(hWnd); - - return 0; -} - - static VOID FreeRecords(VOID) { DWORD iIndex; @@ -572,19 +1365,34 @@ static VOID FreeRecords(VOID) return; for (iIndex = 0; iIndex < g_TotalRecords; iIndex++) - HeapFree(GetProcessHeap(), 0, g_RecordPtrs[iIndex]); + { + if (g_RecordPtrs[iIndex]) + HeapFree(GetProcessHeap(), 0, g_RecordPtrs[iIndex]); + } HeapFree(GetProcessHeap(), 0, g_RecordPtrs); g_RecordPtrs = NULL; + g_TotalRecords = 0; } -BOOL -QueryEventMessages(LPWSTR lpMachineName, - LPWSTR lpLogName) +/* + * The events enumerator thread. + */ +static DWORD WINAPI +EnumEventsThread(IN LPVOID lpParameter) { - HWND hwndDlg = NULL; + PEVENTLOGFILTER EventLogFilter = (PEVENTLOGFILTER)lpParameter; + LPWSTR lpMachineName = NULL; // EventLogFilter->ComputerName; + PEVENTLOG EventLog; + PWSTR pStr; + + BOOL ProgressDlg = FALSE; + + ULONG LogIndex; HANDLE hEventLog; - EVENTLOGRECORD *pevlr; - DWORD dwRead, dwNeeded, dwThisRecord, dwTotalRecords = 0, dwCurrentRecord = 0, dwRecordsToRead = 0, dwFlags, dwMaxLength; + PEVENTLOGRECORD pevlr, pevlrTmp = NULL; + DWORD dwRead, dwNeeded; // , dwThisRecord; + DWORD dwTotalRecords = 0, dwCurrentRecord = 0; + DWORD dwFlags, dwMaxLength; size_t cchRemaining; LPWSTR lpszSourceName; LPWSTR lpszComputerName; @@ -604,21 +1412,8 @@ QueryEventMessages(LPWSTR lpMachineName, SYSTEMTIME time; LVITEMW lviEventItem; - dwFlags = EVENTLOG_SEQUENTIAL_READ | - (NewestEventsFirst ? EVENTLOG_FORWARDS_READ - : EVENTLOG_BACKWARDS_READ); - - /* Open the event log */ - hEventLog = OpenEventLogW(lpMachineName, lpLogName); - if (hEventLog == NULL) - { - ShowLastWin32Error(); - return FALSE; - } - - /* Save the current computer name and log name globally */ - lpComputerName = lpMachineName; - lpSourceLogName = lpLogName; + /* Save the current event log filter globally */ + ActiveFilter = EventLogFilter; /* Disable list view redraw */ SendMessageW(hwndListView, WM_SETREDRAW, FALSE, 0); @@ -627,11 +1422,32 @@ QueryEventMessages(LPWSTR lpMachineName, (void)ListView_DeleteAllItems(hwndListView); FreeRecords(); - GetOldestEventLogRecord(hEventLog, &dwThisRecord); + SendMessage(hwndListView, PM_PROGRESS_DLG, 0, TRUE); + + /* Do a loop over the logs enumerated in the filter */ + // FIXME: For now we only support 1 event log per filter! + LogIndex = 0; + // for (LogIndex = 0; LogIndex < EventLogFilter->NumOfEventLogs; ++LogIndex) + { + + EventLog = EventLogFilter->EventLogs[LogIndex]; + + /* Open the event log */ + if (EventLog->Permanent) + hEventLog = OpenEventLogW(EventLog->ComputerName, EventLog->LogName); + else + hEventLog = OpenBackupEventLogW(EventLog->ComputerName, EventLog->LogName); // FileName + + if (hEventLog == NULL) + { + ShowLastWin32Error(); + goto Cleanup; + } + + // GetOldestEventLogRecord(hEventLog, &dwThisRecord); /* Get the total number of event log records */ GetNumberOfEventLogRecords(hEventLog, &dwTotalRecords); - g_TotalRecords = dwTotalRecords; if (dwTotalRecords > 0) { @@ -644,22 +1460,48 @@ QueryEventMessages(LPWSTR lpMachineName, EnableMenuItem(hMainMenu, IDM_SAVE_EVENTLOG, MF_BYCOMMAND | MF_GRAYED); } + /* Set up the event records cache */ g_RecordPtrs = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwTotalRecords * sizeof(*g_RecordPtrs)); + if (!g_RecordPtrs) + { + // ShowLastWin32Error(); + goto Cleanup; + } + g_TotalRecords = dwTotalRecords; /* If we have at least 1000 records show the waiting dialog */ if (dwTotalRecords > 1000) { - CloseHandle(CreateThread(NULL, - 0, - ShowStatusMessageThread, - (LPVOID)&hwndDlg, - 0, - NULL)); + ProgressDlg = SendMessage(hwndMainWindow, PM_PROGRESS_DLG, 0, TRUE); } + if (WaitForSingleObject(hStopEnumEvent, 0) == WAIT_OBJECT_0) + goto Quit; + + dwFlags = EVENTLOG_SEQUENTIAL_READ | + (NewestEventsFirst ? EVENTLOG_FORWARDS_READ + : EVENTLOG_BACKWARDS_READ); + while (dwCurrentRecord < dwTotalRecords) { + // + // NOTE: We always allocate the minimum size for 1 record, and if + // the ReadEventLog call fails (it always will anyway), we reallocate + // the record pointer to be able to hold just 1 record, and then we + // redo that for each event. + // This is obviously not at all efficient (in terms of numbers of + // ReadEventLog calls), since ReadEventLog can fill the buffer with + // as many records they can fit completely in the buffer. + // + pevlr = HeapAlloc(GetProcessHeap(), 0, sizeof(*pevlr)); + if (!pevlr) + { + /* Cannot allocate, just skip the event */ + g_RecordPtrs[dwCurrentRecord] = NULL; + // --dwTotalRecords; + continue; + } g_RecordPtrs[dwCurrentRecord] = pevlr; bResult = ReadEventLogW(hEventLog, // Event log handle @@ -669,10 +1511,18 @@ QueryEventMessages(LPWSTR lpMachineName, sizeof(*pevlr), // Size of buffer &dwRead, // Number of bytes read &dwNeeded); // Bytes in the next record - if ((!bResult) && (GetLastError () == ERROR_INSUFFICIENT_BUFFER)) + if (!bResult && (GetLastError () == ERROR_INSUFFICIENT_BUFFER)) { - HeapFree(GetProcessHeap(), 0, pevlr); - pevlr = HeapAlloc(GetProcessHeap(), 0, dwNeeded); + pevlrTmp = HeapReAlloc(GetProcessHeap(), 0, pevlr, dwNeeded); + if (!pevlrTmp) + { + /* Cannot reallocate, just skip the event */ + HeapFree(GetProcessHeap(), 0, pevlr); + g_RecordPtrs[dwCurrentRecord] = NULL; + // --dwTotalRecords; + continue; + } + pevlr = pevlrTmp; g_RecordPtrs[dwCurrentRecord] = pevlr; ReadEventLogW(hEventLog, // event log handle @@ -686,25 +1536,82 @@ QueryEventMessages(LPWSTR lpMachineName, while (dwRead > 0) { - LoadStringW(hInst, IDS_NOT_AVAILABLE, szUsername, ARRAYSIZE(szUsername)); - LoadStringW(hInst, IDS_NONE, szCategory, ARRAYSIZE(szCategory)); + if (WaitForSingleObject(hStopEnumEvent, 0) == WAIT_OBJECT_0) + goto Quit; + + /* Filter by event type */ + if ((pevlr->EventType == EVENTLOG_SUCCESS && !EventLogFilter->Information ) || + (pevlr->EventType == EVENTLOG_INFORMATION_TYPE && !EventLogFilter->Information ) || + (pevlr->EventType == EVENTLOG_WARNING_TYPE && !EventLogFilter->Warning ) || + (pevlr->EventType == EVENTLOG_ERROR_TYPE && !EventLogFilter->Error ) || + (pevlr->EventType == EVENTLOG_AUDIT_SUCCESS && !EventLogFilter->AuditSuccess) || + (pevlr->EventType == EVENTLOG_AUDIT_FAILURE && !EventLogFilter->AuditFailure)) + { + goto SkipEvent; + } /* Get the event source name */ lpszSourceName = (LPWSTR)((LPBYTE)pevlr + sizeof(EVENTLOGRECORD)); + if (EventLogFilter->Sources) + { + if (!*EventLogFilter->Sources && !*lpszSourceName) + { + // Sources filters for NO-source, and SourceName == NO-source + // so it's ok + } + else if ( (!*EventLogFilter->Sources && *lpszSourceName) || + (*EventLogFilter->Sources && !*lpszSourceName) ) + { + // Sources filters for NO-source, and SourceName == some-source, + // or, + // Sources filters for SOME-source, and SourceName == NO-source, + // so skip the event + goto SkipEvent; + } + else if (*EventLogFilter->Sources && *lpszSourceName) + { + // Sources filters for SOME-source, and SourceName == SOME-source + // so it's ok + + // if (*EventLogFilter->Sources || *lpszSourceName) + + pStr = EventLogFilter->Sources; + while (*pStr) + { + if (wcsicmp(pStr, lpszSourceName) == 0) + { + /* We have a match, break the loop */ + break; + } + + pStr += (wcslen(pStr) + 1); + } + if (!*pStr) // && *lpszSourceName + { + /* No match, skip the event */ + goto SkipEvent; + } + } + } /* Get the computer name */ lpszComputerName = (LPWSTR)((LPBYTE)pevlr + sizeof(EVENTLOGRECORD) + (wcslen(lpszSourceName) + 1) * sizeof(WCHAR)); + // if (EventLogFilter->ComputerNames) { ... } /* Compute the event time */ EventTimeToSystemTime(pevlr->TimeWritten, &time); GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, szLocalDate, ARRAYSIZE(szLocalDate)); GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &time, NULL, szLocalTime, ARRAYSIZE(szLocalTime)); + LoadStringW(hInst, IDS_NOT_AVAILABLE, szUsername, ARRAYSIZE(szUsername)); + LoadStringW(hInst, IDS_NONE, szCategory, ARRAYSIZE(szCategory)); + /* Get the username that generated the event */ GetEventUserName(pevlr, szUsername); + // if (EventLogFilter->Users) { ... } GetEventType(pevlr->EventType, szEventTypeText); - GetEventCategory(lpLogName, lpszSourceName, pevlr, szCategory); + GetEventCategory(EventLog->LogName, lpszSourceName, pevlr, szCategory); StringCbPrintfW(szEventID, sizeof(szEventID), L"%u", (pevlr->EventID & 0xFFFF)); StringCbPrintfW(szCategoryID, sizeof(szCategoryID), L"%u", pevlr->EventCategory); @@ -717,28 +1624,25 @@ QueryEventMessages(LPWSTR lpMachineName, switch (pevlr->EventType) { - case EVENTLOG_ERROR_TYPE: - lviEventItem.iImage = 2; - break; - - case EVENTLOG_AUDIT_FAILURE: - lviEventItem.iImage = 2; // FIXME! + case EVENTLOG_SUCCESS: + case EVENTLOG_INFORMATION_TYPE: + lviEventItem.iImage = 0; break; case EVENTLOG_WARNING_TYPE: lviEventItem.iImage = 1; break; - case EVENTLOG_INFORMATION_TYPE: - lviEventItem.iImage = 0; + case EVENTLOG_ERROR_TYPE: + lviEventItem.iImage = 2; break; case EVENTLOG_AUDIT_SUCCESS: - lviEventItem.iImage = 0; // FIXME! + lviEventItem.iImage = 3; break; - case EVENTLOG_SUCCESS: - lviEventItem.iImage = 0; + case EVENTLOG_AUDIT_FAILURE: + lviEventItem.iImage = 4; break; } @@ -752,31 +1656,64 @@ QueryEventMessages(LPWSTR lpMachineName, ListView_SetItemText(hwndListView, lviEventItem.iItem, 6, szUsername); ListView_SetItemText(hwndListView, lviEventItem.iItem, 7, lpszComputerName); +SkipEvent: dwRead -= pevlr->Length; pevlr = (PEVENTLOGRECORD)((LPBYTE) pevlr + pevlr->Length); } - dwRecordsToRead--; dwCurrentRecord++; } +Quit: + + /* Close the event log */ + CloseEventLog(hEventLog); + + } // end-for (LogIndex) + /* All events loaded */ - if (hwndDlg) - EndDialog(hwndDlg, 0); + if (ProgressDlg) + SendMessage(hwndMainWindow, PM_PROGRESS_DLG, 0, FALSE); - StringCchPrintfExW(szWindowTitle, - ARRAYSIZE(szWindowTitle), - &lpTitleTemplateEnd, - &cchRemaining, - 0, - szTitleTemplate, szTitle, lpLogName); /* i = number of characters written */ - dwMaxLength = (DWORD)cchRemaining; - if (!lpMachineName) - GetComputerNameW(lpTitleTemplateEnd, &dwMaxLength); +Cleanup: + + SendMessage(hwndListView, PM_PROGRESS_DLG, 0, FALSE); + + // FIXME: Use something else instead of EventLog->LogName !! + + /* + * Use a different formatting, whether the event log filter holds + * only one log, or many logs (the latter case is WIP TODO!) + */ + if (EventLogFilter->NumOfEventLogs <= 1) + { + StringCchPrintfExW(szWindowTitle, + ARRAYSIZE(szWindowTitle), + &lpTitleTemplateEnd, + &cchRemaining, + 0, + szTitleTemplate, szTitle, EventLog->LogName); /* i = number of characters written */ + dwMaxLength = (DWORD)cchRemaining; + if (!lpMachineName) + GetComputerNameW(lpTitleTemplateEnd, &dwMaxLength); + else + StringCchCopyW(lpTitleTemplateEnd, dwMaxLength, lpMachineName); + + StringCbPrintfW(szStatusText, + sizeof(szStatusText), + szStatusBarTemplate, + EventLog->LogName, + dwTotalRecords); + } else - StringCchCopyW(lpTitleTemplateEnd, dwMaxLength, lpMachineName); - - StringCbPrintfW(szStatusText, sizeof(szStatusText), szStatusBarTemplate, lpLogName, dwTotalRecords); + { + // TODO: Use a different title & implement filtering for multi-log filters !! + // (EventLogFilter->NumOfEventLogs > 1) + MessageBoxW(hwndMainWindow, + L"Many-logs filtering is not implemented yet!!", + L"Event Log", + MB_OK | MB_ICONINFORMATION); + } /* Update the status bar */ SendMessageW(hwndStatus, SB_SETTEXT, (WPARAM)0, (LPARAM)szStatusText); @@ -787,16 +1724,188 @@ QueryEventMessages(LPWSTR lpMachineName, /* Resume list view redraw */ SendMessageW(hwndListView, WM_SETREDRAW, TRUE, 0); - /* Close the event log */ - CloseEventLog(hEventLog); + CloseHandle(hStopEnumEvent); + InterlockedExchangePointer((PVOID*)&hStopEnumEvent, NULL); - return TRUE; + return 0; +} + +/* + * The purpose of this thread is to serialize the creation of the events + * enumeration thread, since the Event Log Viewer currently only supports + * one view, one event list, one enumeration. + */ +static DWORD WINAPI +StartStopEnumEventsThread(IN LPVOID lpParameter) +{ + HANDLE WaitHandles[2]; + DWORD WaitResult; + + WaitHandles[0] = hStartStopEnumEvent; // End-of-application event + WaitHandles[1] = hStartEnumEvent; // Command event + + while (TRUE) + { + WaitResult = WaitForMultipleObjects(ARRAYSIZE(WaitHandles), + WaitHandles, + FALSE, // WaitAny + INFINITE); + switch (WaitResult) + { + case WAIT_OBJECT_0 + 0: + { + /* End-of-application event signaled, quit this thread */ + + /* Stop the previous enumeration */ + if (hEnumEventsThread) + { + if (hStopEnumEvent) + { + SetEvent(hStopEnumEvent); + WaitForSingleObject(hEnumEventsThread, INFINITE); + // NOTE: The following is done by the enumeration thread just before terminating. + // hStopEnumEvent = NULL; + } + + CloseHandle(hEnumEventsThread); + hEnumEventsThread = NULL; + } + + FreeRecords(); + + return 0; + } + + case WAIT_OBJECT_0 + 1: + { + /* Restart a new enumeration if needed */ + PEVENTLOGFILTER EventLogFilter = EnumCommand.EventLogFilter; + + /* Stop the previous enumeration */ + if (hEnumEventsThread) + { + if (hStopEnumEvent) + { + SetEvent(hStopEnumEvent); + WaitForSingleObject(hEnumEventsThread, INFINITE); + // NOTE: The following is done by the enumeration thread just before terminating. + // hStopEnumEvent = NULL; + } + + CloseHandle(hEnumEventsThread); + hEnumEventsThread = NULL; + } + + // FreeRecords(); + + if (!EnumCommand.Start) + break; + + // Manual-reset event + hStopEnumEvent = CreateEventW(NULL, TRUE, FALSE, NULL); + if (!hStopEnumEvent) + break; + + hEnumEventsThread = CreateThread(NULL, + 0, + EnumEventsThread, + (LPVOID)EventLogFilter, + CREATE_SUSPENDED, + NULL); + if (!hEnumEventsThread) + { + CloseHandle(hStopEnumEvent); + hStopEnumEvent = NULL; + break; + } + // CloseHandle(hEnumEventsThread); + ResumeThread(hEnumEventsThread); + + break; + } + + default: + { + /* Unknown command, must never go there! */ + return GetLastError(); + } + } + } + + return 0; +} + +VOID +EnumEvents(IN PEVENTLOGFILTER EventLogFilter) +{ + /* Signal the enumerator thread we want to enumerate events */ + EnumCommand.Start = TRUE; + EnumCommand.EventLogFilter = EventLogFilter; + SetEvent(hStartEnumEvent); + return; } +VOID +OpenUserEventLog(VOID) +{ + PEVENTLOG EventLog; + PEVENTLOGFILTER EventLogFilter; + HTREEITEM hItem = NULL; + WCHAR szFileName[MAX_PATH]; + + ZeroMemory(szFileName, sizeof(szFileName)); + + sfn.lpstrFile = szFileName; + sfn.nMaxFile = ARRAYSIZE(szFileName); + + if (!GetOpenFileNameW(&sfn)) + return; + sfn.lpstrFile[sfn.nMaxFile-1] = UNICODE_NULL; + + /* Allocate a new event log entry */ + EventLog = AllocEventLog(NULL, sfn.lpstrFile, FALSE); + if (EventLog == NULL) + return; + + /* Allocate a new event log filter entry for this event log */ + EventLogFilter = AllocEventLogFilter(// LogName, + TRUE, TRUE, TRUE, TRUE, TRUE, + NULL, NULL, NULL, + 1, &EventLog); + if (EventLogFilter == NULL) + { + HeapFree(GetProcessHeap(), 0, EventLog); + return; + } + + /* Add the event log and the filter into their lists */ + InsertTailList(&EventLogList, &EventLog->ListEntry); + InsertTailList(&EventLogFilterList, &EventLogFilter->ListEntry); + + /* Retrieve and cache the event log file */ + EventLog->FileName = HeapAlloc(GetProcessHeap(), 0, sfn.nMaxFile * sizeof(WCHAR)); + if (EventLog->FileName) + StringCchCopyW(EventLog->FileName, sfn.nMaxFile, sfn.lpstrFile); + + hItem = TreeViewAddItem(hwndTreeView, htiUserLogs, + szFileName, + 2, 3, (LPARAM)EventLogFilter); + + /* Select the event log */ + if (hItem) + { + // TreeView_Expand(hwndTreeView, htiUserLogs, TVE_EXPAND); + TreeView_SelectItem(hwndTreeView, hItem); + TreeView_EnsureVisible(hwndTreeView, hItem); + } + SetFocus(hwndTreeView); +} + VOID SaveEventLog(VOID) { + PEVENTLOG EventLog; HANDLE hEventLog; WCHAR szFileName[MAX_PATH]; @@ -806,11 +1915,10 @@ SaveEventLog(VOID) sfn.nMaxFile = ARRAYSIZE(szFileName); if (!GetSaveFileNameW(&sfn)) - { return; - } - hEventLog = OpenEventLogW(lpComputerName, lpSourceLogName); + EventLog = ActiveFilter->EventLogs[0]; + hEventLog = OpenEventLogW(EventLog->ComputerName, EventLog->LogName); if (!hEventLog) { ShowLastWin32Error(); @@ -825,10 +1933,55 @@ SaveEventLog(VOID) CloseEventLog(hEventLog); } +VOID +CloseUserEventLog(VOID) +{ + PEVENTLOGFILTER EventLogFilter = NULL; + + TVITEMEXW tvItemEx; + HTREEITEM hti; + + /* Get index of selected item */ + hti = TreeView_GetSelection(hwndTreeView); + if (hti != NULL) + { + tvItemEx.mask = TVIF_PARAM; + tvItemEx.hItem = hti; + + TreeView_GetItem(hwndTreeView, &tvItemEx); + EventLogFilter = (PEVENTLOGFILTER)tvItemEx.lParam; + } + + /* Bail out if there is no available filter */ + if (!EventLogFilter) + return; + + /* + * The deletion of the item automatically triggers a TVN_SELCHANGED + * notification, that will reset the ActiveFilter (in case the item + * selected is a filter). Otherwise we reset it there. + */ + TreeView_DeleteItem(hwndTreeView, hti); + + if (ActiveFilter == EventLogFilter) + ActiveFilter = NULL; + + /* Remove the filter from the list */ + RemoveEntryList(&EventLogFilter->ListEntry); + FreeEventLogFilter(EventLogFilter); + + // /* Select the default event log */ + // // TreeView_Expand(hwndTreeView, htiUserLogs, TVE_EXPAND); + // TreeView_SelectItem(hwndTreeView, hItem); + // TreeView_EnsureVisible(hwndTreeView, hItem); + SetFocus(hwndTreeView); +} + BOOL ClearEvents(VOID) { + PEVENTLOG EventLog; HANDLE hEventLog; WCHAR szFileName[MAX_PATH]; WCHAR szMessage[MAX_LOADSTRING]; @@ -864,7 +2017,8 @@ ClearEvents(VOID) } } - hEventLog = OpenEventLogW(lpComputerName, lpSourceLogName); + EventLog = ActiveFilter->EventLogs[0]; + hEventLog = OpenEventLogW(EventLog->ComputerName, EventLog->LogName); if (!hEventLog) { ShowLastWin32Error(); @@ -887,7 +2041,8 @@ ClearEvents(VOID) VOID Refresh(VOID) { - QueryEventMessages(lpComputerName, lpSourceLogName); + /* Reenumerate the events through the active filter */ + EnumEvents(ActiveFilter); } @@ -920,105 +2075,112 @@ MyRegisterClass(HINSTANCE hInstance) BOOL GetDisplayNameFileAndID(IN LPCWSTR lpLogName, - OUT PWCHAR lpModuleName, + OUT PWCHAR lpModuleName, // TODO: Add IN DWORD BufLen OUT PDWORD pdwMessageID) { - HKEY hKey; + BOOL Success = FALSE; + LONG Result; + HKEY hLogKey; WCHAR *KeyPath; - DWORD cbData; SIZE_T cbKeyPath; + DWORD Type, cbData; DWORD dwMessageID = 0; WCHAR szModuleName[MAX_PATH]; + /* Use a default value for the message ID */ *pdwMessageID = 0; cbKeyPath = (wcslen(EVENTLOG_BASE_KEY) + wcslen(lpLogName) + 1) * sizeof(WCHAR); KeyPath = HeapAlloc(GetProcessHeap(), 0, cbKeyPath); if (!KeyPath) - { return FALSE; - } StringCbCopyW(KeyPath, cbKeyPath, EVENTLOG_BASE_KEY); StringCbCatW(KeyPath, cbKeyPath, lpLogName); - if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, KeyPath, 0, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS) - { - HeapFree(GetProcessHeap(), 0, KeyPath); + Result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, KeyPath, 0, KEY_QUERY_VALUE, &hLogKey); + HeapFree(GetProcessHeap(), 0, KeyPath); + if (Result != ERROR_SUCCESS) return FALSE; - } cbData = sizeof(szModuleName); - if (RegQueryValueExW(hKey, L"DisplayNameFile", NULL, NULL, (LPBYTE)szModuleName, &cbData) == ERROR_SUCCESS) + Result = RegQueryValueExW(hLogKey, + L"DisplayNameFile", + NULL, + &Type, + (LPBYTE)szModuleName, + &cbData); + if ((Result != ERROR_SUCCESS) || (Type != REG_EXPAND_SZ && Type != REG_SZ)) { - ExpandEnvironmentStringsW(szModuleName, lpModuleName, MAX_PATH); + szModuleName[0] = UNICODE_NULL; + } + else + { + /* NULL-terminate the string and expand it */ + szModuleName[cbData / sizeof(WCHAR) - 1] = UNICODE_NULL; + ExpandEnvironmentStringsW(szModuleName, lpModuleName, ARRAYSIZE(szModuleName)); + Success = TRUE; } - cbData = sizeof(dwMessageID); - RegQueryValueExW(hKey, L"DisplayNameID", NULL, NULL, (LPBYTE)&dwMessageID, &cbData); + /* + * If we have a 'DisplayNameFile', query for 'DisplayNameID'; + * otherwise it's not really useful. 'DisplayNameID' is optional. + */ + if (Success) + { + cbData = sizeof(dwMessageID); + Result = RegQueryValueExW(hLogKey, + L"DisplayNameID", + NULL, + &Type, + (LPBYTE)&dwMessageID, + &cbData); + if ((Result != ERROR_SUCCESS) || (Type != REG_DWORD)) + dwMessageID = 0; - RegCloseKey(hKey); - HeapFree(GetProcessHeap(), 0, KeyPath); + *pdwMessageID = dwMessageID; + } - *pdwMessageID = dwMessageID; + RegCloseKey(hLogKey); - return TRUE; + return Success; } - - -HTREEITEM -TreeViewAddItem(HWND hTreeView, HTREEITEM hParent, LPWSTR lpText, INT Image, INT SelectedImage, LPARAM lParam) -{ - TV_INSERTSTRUCTW Insert; - - ZeroMemory(&Insert, sizeof(Insert)); - - Insert.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE; - Insert.hInsertAfter = TVI_LAST; - Insert.hParent = hParent; - Insert.item.pszText = lpText; - Insert.item.iImage = Image; - Insert.item.iSelectedImage = SelectedImage; - Insert.item.lParam = lParam; - - return TreeView_InsertItem(hTreeView, &Insert); -} - - - VOID -BuildLogList(VOID) +BuildLogListAndFilterList(IN LPCWSTR lpComputerName) { - HKEY hKey; - DWORD dwIndex; - DWORD dwMaxKeyLength; + LONG Result; + HKEY hEventLogKey, hLogKey; + DWORD dwNumLogs = 0; + DWORD dwIndex, dwMaxKeyLength; + DWORD Type; + PEVENTLOG EventLog; + PEVENTLOGFILTER EventLogFilter; LPWSTR LogName = NULL; WCHAR szModuleName[MAX_PATH]; DWORD lpcName; DWORD dwMessageID; LPWSTR lpDisplayName; - HMODULE hLibrary = NULL; HTREEITEM hRootNode = NULL, hItem = NULL, hItemDefault = NULL; /* Open the EventLog key */ - if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, EVENTLOG_BASE_KEY, 0, KEY_READ, &hKey) != ERROR_SUCCESS) + // FIXME: Use local or remote computer + Result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, EVENTLOG_BASE_KEY, 0, KEY_READ, &hEventLogKey); + if (Result != ERROR_SUCCESS) { return; } /* Retrieve the number of event logs enumerated as registry keys */ - if (RegQueryInfoKeyW(hKey, NULL, NULL, NULL, &dwNumLogs, &dwMaxKeyLength, NULL, NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) + Result = RegQueryInfoKeyW(hEventLogKey, NULL, NULL, NULL, &dwNumLogs, &dwMaxKeyLength, + NULL, NULL, NULL, NULL, NULL, NULL); + if (Result != ERROR_SUCCESS) { - RegCloseKey(hKey); - return; + goto Quit; } if (!dwNumLogs) - { - RegCloseKey(hKey); - return; - } + goto Quit; /* Take the NULL terminator into account */ ++dwMaxKeyLength; @@ -1026,60 +2188,102 @@ BuildLogList(VOID) /* Allocate the temporary buffer */ LogName = HeapAlloc(GetProcessHeap(), 0, dwMaxKeyLength * sizeof(WCHAR)); if (!LogName) - { - RegCloseKey(hKey); - return; - } - - /* Allocate the list of event logs (add 1 to dwNumLogs in order to have one guard entry) */ - LogNames = HeapAlloc(GetProcessHeap(), 0, (dwNumLogs + 1) * sizeof(LPWSTR)); - if (!LogNames) - { - HeapFree(GetProcessHeap(), 0, LogName); - RegCloseKey(hKey); - return; - } + goto Quit; /* Enumerate and retrieve each event log name */ for (dwIndex = 0; dwIndex < dwNumLogs; dwIndex++) { lpcName = dwMaxKeyLength; - if (RegEnumKeyExW(hKey, dwIndex, LogName, &lpcName, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) - { - LogNames[dwIndex] = NULL; + Result = RegEnumKeyExW(hEventLogKey, dwIndex, LogName, &lpcName, NULL, NULL, NULL, NULL); + if (Result != ERROR_SUCCESS) continue; - } /* Take the NULL terminator into account */ ++lpcName; - /* Allocate the event log name string and copy it from the temporary buffer */ - LogNames[dwIndex] = HeapAlloc(GetProcessHeap(), 0, lpcName * sizeof(WCHAR)); - if (LogNames[dwIndex] == NULL) + /* Allocate a new event log entry */ + EventLog = AllocEventLog(lpComputerName, LogName, TRUE); + if (EventLog == NULL) continue; - StringCchCopyW(LogNames[dwIndex], lpcName, LogName); + /* Allocate a new event log filter entry for this event log */ + EventLogFilter = AllocEventLogFilter(// LogName, + TRUE, TRUE, TRUE, TRUE, TRUE, + NULL, NULL, NULL, + 1, &EventLog); + if (EventLogFilter == NULL) + { + HeapFree(GetProcessHeap(), 0, EventLog); + continue; + } + + /* Add the event log and the filter into their lists */ + InsertTailList(&EventLogList, &EventLog->ListEntry); + InsertTailList(&EventLogFilterList, &EventLogFilter->ListEntry); + + EventLog->FileName = NULL; + + /* Retrieve and cache the event log file */ + Result = RegOpenKeyExW(hEventLogKey, + LogName, + 0, + KEY_QUERY_VALUE, + &hLogKey); + if (Result == ERROR_SUCCESS) + { + lpcName = 0; + Result = RegQueryValueExW(hLogKey, + L"File", + NULL, + &Type, + NULL, + &lpcName); + if ((Result != ERROR_SUCCESS) || (Type != REG_EXPAND_SZ && Type != REG_SZ)) + { + // Windows' EventLog uses some kind of default value, we do not. + EventLog->FileName = NULL; + } + else + { + lpcName = ROUND_DOWN(lpcName, sizeof(WCHAR)); + EventLog->FileName = HeapAlloc(GetProcessHeap(), 0, lpcName); + if (EventLog->FileName) + { + Result = RegQueryValueExW(hLogKey, + L"File", + NULL, + &Type, + (LPBYTE)EventLog->FileName, + &lpcName); + if (Result != ERROR_SUCCESS) + { + HeapFree(GetProcessHeap(), 0, EventLog->FileName); + EventLog->FileName = NULL; + } + else + { + EventLog->FileName[lpcName / sizeof(WCHAR) - 1] = UNICODE_NULL; + } + } + } + + RegCloseKey(hLogKey); + } /* Get the display name for the event log */ lpDisplayName = NULL; ZeroMemory(szModuleName, sizeof(szModuleName)); - if (GetDisplayNameFileAndID(LogNames[dwIndex], szModuleName, &dwMessageID)) + if (GetDisplayNameFileAndID(LogName, szModuleName, &dwMessageID)) { - hLibrary = LoadLibraryExW(szModuleName, NULL, LOAD_LIBRARY_AS_IMAGE_RESOURCE | LOAD_LIBRARY_AS_DATAFILE); - if (hLibrary != NULL) - { - /* Retrieve the message string without appending extra newlines */ - FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | - FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, - hLibrary, - dwMessageID, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPWSTR)&lpDisplayName, - 0, - NULL); - FreeLibrary(hLibrary); - } + /* Retrieve the message string without appending extra newlines */ + lpDisplayName = + GetMessageStringFromDll(szModuleName, + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | + FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, + dwMessageID, + 0, + NULL); } /* @@ -1090,7 +2294,7 @@ BuildLogList(VOID) for (lpcName = 0; lpcName < ARRAYSIZE(SystemLogs); ++lpcName) { /* Check whether the log name is part of the system logs */ - if (wcsicmp(LogNames[dwIndex], SystemLogs[lpcName]) == 0) + if (wcsicmp(LogName, SystemLogs[lpcName]) == 0) { hRootNode = htiSystemLogs; break; @@ -1098,11 +2302,11 @@ BuildLogList(VOID) } hItem = TreeViewAddItem(hwndTreeView, hRootNode, - (lpDisplayName ? lpDisplayName : LogNames[dwIndex]), - 2, 3, dwIndex); + (lpDisplayName ? lpDisplayName : LogName), + 2, 3, (LPARAM)EventLogFilter); /* Try to get the default event log: "Application" */ - if ((hItemDefault == NULL) && (wcsicmp(LogNames[dwIndex], SystemLogs[0]) == 0)) + if ((hItemDefault == NULL) && (wcsicmp(LogName, SystemLogs[0]) == 0)) { hItemDefault = hItem; } @@ -1113,7 +2317,9 @@ BuildLogList(VOID) } HeapFree(GetProcessHeap(), 0, LogName); - RegCloseKey(hKey); + +Quit: + RegCloseKey(hEventLogKey); /* Select the default event log */ if (hItemDefault) @@ -1127,35 +2333,173 @@ BuildLogList(VOID) return; } - VOID FreeLogList(VOID) { - DWORD dwIndex; + PLIST_ENTRY Entry; + PEVENTLOG EventLog; - if (!LogNames) + while (!IsListEmpty(&EventLogList)) { - return; + Entry = RemoveHeadList(&EventLogList); + EventLog = (PEVENTLOG)CONTAINING_RECORD(Entry, EVENTLOG, ListEntry); + FreeEventLog(EventLog); } - for (dwIndex = 0; dwIndex < dwNumLogs; dwIndex++) - { - if (LogNames[dwIndex]) - { - HeapFree(GetProcessHeap(), 0, LogNames[dwIndex]); - } - } - - HeapFree(GetProcessHeap(), 0, LogNames); - LogNames = NULL; - dwNumLogs = 0; - - lpComputerName = NULL; - lpSourceLogName = NULL; - return; } +VOID +FreeLogFilterList(VOID) +{ + PLIST_ENTRY Entry; + PEVENTLOGFILTER EventLogFilter; + + while (!IsListEmpty(&EventLogFilterList)) + { + Entry = RemoveHeadList(&EventLogFilterList); + EventLogFilter = (PEVENTLOGFILTER)CONTAINING_RECORD(Entry, EVENTLOGFILTER, ListEntry); + FreeEventLogFilter(EventLogFilter); + } + + ActiveFilter = NULL; + + return; +} + + +/* + * ListView subclassing to handle WM_PAINT messages before and after they are + * handled by the ListView window itself. We cannot use at this level the + * custom-drawn notifications that are more suitable for drawing elements + * inside the ListView. + */ +static WNDPROC orgListViewWndProc = NULL; +static BOOL IsLoading = FALSE; + +LRESULT CALLBACK +ListViewWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch (uMsg) + { + case PM_PROGRESS_DLG: + { + /* TRUE: Create the dialog; FALSE: Destroy the dialog */ + IsLoading = !!(BOOL)lParam; + break; + } + + case WM_PAINT: + { + /* This code is adapted from: http://www.codeproject.com/Articles/216/Indicating-an-empty-ListView */ + + int nItemCount; + + PAINTSTRUCT ps; + HDC hDC; + HWND hwndHeader; + RECT rc, rcH; + COLORREF crTextOld, crTextBkOld; + NONCLIENTMETRICSW ncm; + HFONT hFont, hFontOld; + + nItemCount = ListView_GetItemCount(hWnd); + if (!IsLoading && nItemCount > 0) + break; + + /* + * NOTE: + * We could have used lpNMCustomDraw->nmcd.rc for the rectangle, + * but this one actually holds the rectangle of the list view + * that is being currently repainted, so that it can be smaller + * than the list view proper. This is especially true when using + * COMCTL32.DLL version <= 6.0 . + */ + + GetClientRect(hWnd, &rc); + hwndHeader = ListView_GetHeader(hWnd); + if (hwndHeader) + { + /* Note that we could also use Header_GetItemRect() */ + GetClientRect(hwndHeader, &rcH); + rc.top += rcH.bottom; + } + + /* Add some space between the top of the list view and the text */ + rc.top += 10; + + BeginPaint(hWnd, &ps); + /* + * NOTE: Using a secondary hDC (and not the ps.hdc) gives the strange + * property that the text is always recentered on the current view of + * the window, instead of being scrolled together with the contents of + * the list view... + */ + // hDC = ps.hdc; + hDC = GetDC(hWnd); + + /* + * NOTE: We could have kept lpNMCustomDraw->clrText and + * lpNMCustomDraw->clrTextBk, but they usually do not contain + * the correct default colors for the items / default text. + */ + crTextOld = + SetTextColor(hDC, GetSysColor(COLOR_WINDOWTEXT)); + crTextBkOld = + SetBkColor(hDC, GetSysColor(COLOR_WINDOW)); + + // FIXME: Cache the font? + ncm.cbSize = sizeof(ncm); + hFont = NULL; + if (SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, + sizeof(ncm), &ncm, 0)) + { + hFont = CreateFontIndirectW(&ncm.lfMessageFont); + } + if (!hFont) + hFont = GetStockFont(DEFAULT_GUI_FONT); + + hFontOld = (HFONT)SelectObject(hDC, hFont); + + FillRect(hDC, &rc, GetSysColorBrush(COLOR_WINDOW)); + + if (nItemCount <= 0) + { + DrawTextW(hDC, + szEmptyList, + -1, + &rc, + DT_CENTER | DT_WORDBREAK | DT_NOPREFIX | DT_NOCLIP); + } + else // if (IsLoading) + { + DrawTextW(hDC, + szLoadingWait, + -1, + &rc, + DT_CENTER | DT_WORDBREAK | DT_NOPREFIX | DT_NOCLIP); + } + + SelectObject(hDC, hFontOld); + if (hFont) + DeleteObject(hFont); + + SetBkColor(hDC, crTextBkOld); + SetTextColor(hDC, crTextOld); + + ReleaseDC(hWnd, hDC); + EndPaint(hWnd, &ps); + + break; + } + + // case WM_ERASEBKGND: + // break; + } + + /* Continue with default message processing */ + return CallWindowProcW(orgListViewWndProc, hWnd, uMsg, wParam, lParam); +} BOOL InitInstance(HINSTANCE hInstance, @@ -1179,9 +2523,7 @@ InitInstance(HINSTANCE hInstance, hInstance, NULL); if (!hwndMainWindow) - { return FALSE; - } /* Create the status bar */ hwndStatus = CreateWindowExW(0, // no extended styles @@ -1233,13 +2575,13 @@ InitInstance(HINSTANCE hInstance, /* Add the event logs nodes */ // "System Logs" LoadStringW(hInstance, IDS_EVENTLOG_SYSTEM, szTemp, ARRAYSIZE(szTemp)); - htiSystemLogs = TreeViewAddItem(hwndTreeView, NULL, szTemp, 0, 1, (LPARAM)-1); + htiSystemLogs = TreeViewAddItem(hwndTreeView, NULL, szTemp, 0, 1, (LPARAM)NULL); // "Application Logs" LoadStringW(hInstance, IDS_EVENTLOG_APP, szTemp, ARRAYSIZE(szTemp)); - htiAppLogs = TreeViewAddItem(hwndTreeView, NULL, szTemp, 0, 1, (LPARAM)-1); + htiAppLogs = TreeViewAddItem(hwndTreeView, NULL, szTemp, 0, 1, (LPARAM)NULL); // "User Logs" LoadStringW(hInstance, IDS_EVENTLOG_USER, szTemp, ARRAYSIZE(szTemp)); - htiUserLogs = TreeViewAddItem(hwndTreeView, NULL, szTemp, 0, 1, (LPARAM)-1); + htiUserLogs = TreeViewAddItem(hwndTreeView, NULL, szTemp, 0, 1, (LPARAM)NULL); /* Create the ListView */ hwndListView = CreateWindowExW(WS_EX_CLIENTEDGE, @@ -1256,7 +2598,7 @@ InitInstance(HINSTANCE hInstance, NULL); /* Add the extended ListView styles */ - (void)ListView_SetExtendedListViewStyle(hwndListView, LVS_EX_FULLROWSELECT); + (void)ListView_SetExtendedListViewStyle(hwndListView, LVS_EX_HEADERDRAGDROP | LVS_EX_FULLROWSELECT |LVS_EX_LABELTIP); /* Create the ImageList */ hSmall = ImageList_Create(GetSystemMetrics(SM_CXSMICON), @@ -1268,6 +2610,8 @@ InitInstance(HINSTANCE hInstance, ImageList_AddIcon(hSmall, LoadIconW(hInstance, MAKEINTRESOURCEW(IDI_INFORMATIONICON))); ImageList_AddIcon(hSmall, LoadIconW(hInstance, MAKEINTRESOURCEW(IDI_WARNINGICON))); ImageList_AddIcon(hSmall, LoadIconW(hInstance, MAKEINTRESOURCEW(IDI_ERRORICON))); + ImageList_AddIcon(hSmall, LoadIconW(hInstance, MAKEINTRESOURCEW(IDI_AUDITSUCCESSICON))); + ImageList_AddIcon(hSmall, LoadIconW(hInstance, MAKEINTRESOURCEW(IDI_AUDITFAILUREICON))); /* Assign the ImageList to the List View */ (void)ListView_SetImageList(hwndListView, hSmall, LVSIL_SMALL); @@ -1338,6 +2682,11 @@ InitInstance(HINSTANCE hInstance, lvc.pszText = szTemp; (void)ListView_InsertColumn(hwndListView, 7, &lvc); + /* Subclass the ListView */ + // orgListViewWndProc = SubclassWindow(hwndListView, ListViewWndProc); + orgListViewWndProc = (WNDPROC)(LONG_PTR)GetWindowLongPtrW(hwndListView, GWLP_WNDPROC); + SetWindowLongPtrW(hwndListView, GWLP_WNDPROC, (LONG_PTR)ListViewWndProc); + /* Initialize the save Dialog */ ZeroMemory(&sfn, sizeof(sfn)); ZeroMemory(szSaveFilter, sizeof(szSaveFilter)); @@ -1355,16 +2704,18 @@ InitInstance(HINSTANCE hInstance, ShowWindow(hwndMainWindow, nCmdShow); UpdateWindow(hwndMainWindow); - /* Retrieve the available event logs on this computer */ - // TODO: Implement connection to remote computer (lpComputerName) - // At the moment we only support the user local computer. - lpComputerName = NULL; - BuildLogList(); - // QueryEventMessages(lpComputerName, LogNames[0]); - return TRUE; } +VOID +CleanupInstance(HINSTANCE hInstance) +{ + /* Restore the original ListView WndProc */ + // SubclassWindow(hwndListView, orgListViewWndProc); + SetWindowLongPtrW(hwndListView, GWLP_WNDPROC, (LONG_PTR)orgListViewWndProc); + orgListViewWndProc = NULL; +} + VOID ResizeWnd(INT cx, INT cy) { HDWP hdwp; @@ -1372,7 +2723,7 @@ VOID ResizeWnd(INT cx, INT cy) LONG StatusHeight; /* Resize the status bar -- now done in WM_SIZE */ - // SendMessage(hwndStatus, WM_SIZE, 0, 0); + // SendMessageW(hwndStatus, WM_SIZE, 0, 0); GetWindowRect(hwndStatus, &rs); StatusHeight = rs.bottom - rs.top; @@ -1400,24 +2751,21 @@ VOID ResizeWnd(INT cx, INT cy) EndDeferWindowPos(hdwp); } + LRESULT CALLBACK -WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { RECT rect; - switch (message) + switch (uMsg) { case WM_CREATE: hMainMenu = GetMenu(hWnd); break; case WM_DESTROY: - { - FreeRecords(); - FreeLogList(); PostQuitMessage(0); break; - } case WM_NOTIFY: { @@ -1455,13 +2803,47 @@ WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) (hItem == htiUserLogs)); } + case TVN_ENDLABELEDIT: + { + TVITEMW item = ((LPNMTVDISPINFO)lParam)->item; + HTREEITEM hItem = item.hItem; + + /* Disable label editing for root nodes */ + if ((hItem == htiSystemLogs) || + (hItem == htiAppLogs) || + (hItem == htiUserLogs)) + { + return FALSE; + } + + if (item.pszText) + { + LPWSTR pszText = item.pszText; + + /* Trim all whitespace */ + while (*pszText && iswspace(*pszText)) + ++pszText; + + if (!*pszText) + return FALSE; + + return TRUE; + } + else + { + return FALSE; + } + } + case TVN_SELCHANGED: { - DWORD dwIndex = ((LPNMTREEVIEW)lParam)->itemNew.lParam; + PEVENTLOGFILTER EventLogFilter = + (PEVENTLOGFILTER)((LPNMTREEVIEW)lParam)->itemNew.lParam; - if ((dwIndex <= dwNumLogs) && LogNames[dwIndex]) + if (EventLogFilter) { - QueryEventMessages(lpComputerName, LogNames[dwIndex]); + ActiveFilter = EventLogFilter; + EnumEvents(EventLogFilter); } break; @@ -1476,17 +2858,35 @@ WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) /* Parse the menu selections */ switch (LOWORD(wParam)) { + case IDM_OPEN_EVENTLOG: + OpenUserEventLog(); + break; + case IDM_SAVE_EVENTLOG: SaveEventLog(); break; + case IDM_CLOSE_EVENTLOG: + CloseUserEventLog(); + break; + case IDM_CLEAR_EVENTS: if (ClearEvents()) - { Refresh(); - } break; + case IDM_RENAME_EVENTLOG: + if (GetFocus() == hwndTreeView) + TreeView_EditLabel(hwndTreeView, TreeView_GetSelection(hwndTreeView)); + break; + + case IDM_EVENTLOG_SETTINGS: + { + // TODO: Check the returned value? + EventLogProperties(hInst, hWnd); + break; + } + case IDM_LIST_NEWEST: if (!NewestEventsFirst) { @@ -1533,7 +2933,7 @@ WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) break; default: - return DefWindowProcW(hWnd, message, wParam, lParam); + return DefWindowProcW(hWnd, uMsg, wParam, lParam); } break; } @@ -1597,19 +2997,370 @@ WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) case WM_SIZE: { - SendMessage(hwndStatus, WM_SIZE, 0, 0); + SendMessageW(hwndStatus, WM_SIZE, 0, 0); ResizeWnd(LOWORD(lParam), HIWORD(lParam)); break; } + case PM_PROGRESS_DLG: + { + /* TRUE: Create the dialog; FALSE: Destroy the dialog */ + BOOL Create = !!(BOOL)lParam; + if (Create) + { + if (!IsWindow(hProgressDlg)) + { + hProgressDlg = CreateDialogW(hInst, + MAKEINTRESOURCEW(IDD_PROGRESSBOX), + hwndMainWindow, + StatusMessageWindowProc); + if (hProgressDlg) + ShowWindow(hProgressDlg, SW_SHOW); + } + return (!!hProgressDlg); + } + else + { + if (IsWindow(hProgressDlg)) + { + // EndDialog(hProgressDlg, 0); + DestroyWindow(hProgressDlg); + hProgressDlg = NULL; + } + return TRUE; + } + } + default: Default: - return DefWindowProcW(hWnd, message, wParam, lParam); + return DefWindowProcW(hWnd, uMsg, wParam, lParam); } return 0; } + +static +VOID +InitPropertiesDlg(HWND hDlg, PEVENTLOG EventLog) +{ + LPWSTR lpLogName = EventLog->LogName; + + DWORD Result, Type; + DWORD dwMaxSize = 0, dwRetention = 0; + BOOL Success; + WIN32_FIND_DATAW FileInfo; // WIN32_FILE_ATTRIBUTE_DATA + ULARGE_INTEGER FileSize; + WCHAR wszBuf[MAX_PATH]; + WCHAR szTemp[MAX_LOADSTRING]; + LPWSTR FileName; + + HKEY hLogKey; + WCHAR *KeyPath; + DWORD cbData; + SIZE_T cbKeyPath; + + if (EventLog->Permanent) + { + + cbKeyPath = (wcslen(EVENTLOG_BASE_KEY) + wcslen(lpLogName) + 1) * sizeof(WCHAR); + KeyPath = HeapAlloc(GetProcessHeap(), 0, cbKeyPath); + if (!KeyPath) + { + goto Quit; + } + + StringCbCopyW(KeyPath, cbKeyPath, EVENTLOG_BASE_KEY); + StringCbCatW(KeyPath, cbKeyPath, lpLogName); + + if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, KeyPath, 0, KEY_QUERY_VALUE, &hLogKey) != ERROR_SUCCESS) + { + HeapFree(GetProcessHeap(), 0, KeyPath); + goto Quit; + } + HeapFree(GetProcessHeap(), 0, KeyPath); + + + cbData = sizeof(dwMaxSize); + Result = RegQueryValueExW(hLogKey, + L"MaxSize", + NULL, + &Type, + (LPBYTE)&dwMaxSize, + &cbData); + if ((Result != ERROR_SUCCESS) || (Type != REG_DWORD)) + { + // dwMaxSize = 512 * 1024; /* 512 kBytes */ + dwMaxSize = 0; + } + /* Convert in KB */ + dwMaxSize /= 1024; + + cbData = sizeof(dwRetention); + Result = RegQueryValueExW(hLogKey, + L"Retention", + NULL, + &Type, + (LPBYTE)&dwRetention, + &cbData); + if ((Result != ERROR_SUCCESS) || (Type != REG_DWORD)) + { + /* On Windows 2003 it is 604800 (secs) == 7 days */ + dwRetention = 0; + } + /* Convert in days, rounded up */ // ROUND_UP + // dwRetention = ROUND_UP(dwRetention, 24*3600) / (24*3600); + dwRetention = (dwRetention + 24*3600 - 1) / (24*3600); + + + RegCloseKey(hLogKey); + + } + + +Quit: + + SetDlgItemTextW(hDlg, IDC_DISPLAYNAME, lpLogName); // FIXME! + SetDlgItemTextW(hDlg, IDC_LOGNAME, lpLogName); + + FileName = EventLog->FileName; + if (FileName && *FileName) + { + ExpandEnvironmentStringsW(FileName, wszBuf, MAX_PATH); + FileName = wszBuf; + } + SetDlgItemTextW(hDlg, IDC_LOGFILE, FileName); + + /* + * The general problem here (and in the shell as well) is that + * GetFileAttributesEx fails for files that are opened without + * shared access. To retrieve file information for those we need + * to use something else: FindFirstFile, on the full file name. + */ + + Success = GetFileAttributesExW(FileName, + GetFileExInfoStandard, + (LPWIN32_FILE_ATTRIBUTE_DATA)&FileInfo); + if (!Success) + { + HANDLE hFind = FindFirstFileW(FileName, &FileInfo); + Success = (hFind != INVALID_HANDLE_VALUE); + if (Success) + FindClose(hFind); + } + + // Starting there, FileName is invalid (because it uses wszBuf) + + if (Success) + { + FileSize.u.LowPart = FileInfo.nFileSizeLow; + FileSize.u.HighPart = FileInfo.nFileSizeHigh; + if (FormatFileSizeWithBytes(&FileSize, wszBuf, ARRAYSIZE(wszBuf))) + SetDlgItemTextW(hDlg, IDC_SIZE_LABEL, wszBuf); + + LoadStringW(hInst, IDS_NOT_AVAILABLE, szTemp, ARRAYSIZE(szTemp)); + + if (GetFileTimeString(&FileInfo.ftCreationTime, wszBuf, ARRAYSIZE(wszBuf))) + SetDlgItemTextW(hDlg, IDC_CREATED_LABEL, wszBuf); + else + SetDlgItemTextW(hDlg, IDC_CREATED_LABEL, szTemp); + + if (GetFileTimeString(&FileInfo.ftLastWriteTime, wszBuf, ARRAYSIZE(wszBuf))) + SetDlgItemTextW(hDlg, IDC_MODIFIED_LABEL, wszBuf); + else + SetDlgItemTextW(hDlg, IDC_MODIFIED_LABEL, szTemp); + + if (GetFileTimeString(&FileInfo.ftLastAccessTime, wszBuf, ARRAYSIZE(wszBuf))) + SetDlgItemTextW(hDlg, IDC_ACCESSED_LABEL, wszBuf); + else + SetDlgItemTextW(hDlg, IDC_MODIFIED_LABEL, szTemp); + } + else + { + LoadStringW(hInst, IDS_NOT_AVAILABLE, szTemp, ARRAYSIZE(szTemp)); + + SetDlgItemTextW(hDlg, IDC_SIZE_LABEL, szTemp); + SetDlgItemTextW(hDlg, IDC_CREATED_LABEL, szTemp); + SetDlgItemTextW(hDlg, IDC_MODIFIED_LABEL, szTemp); + SetDlgItemTextW(hDlg, IDC_ACCESSED_LABEL, szTemp); + } + + if (EventLog->Permanent) + { + SendDlgItemMessageW(hDlg, IDC_UPDOWN_MAXLOGSIZE, UDM_SETRANGE32, (WPARAM)1, (LPARAM)0x3FFFC0); + SendDlgItemMessageW(hDlg, IDC_UPDOWN_EVENTS_AGE, UDM_SETRANGE, 0, (LPARAM)MAKELONG(365, 1)); + + SetDlgItemInt(hDlg, IDC_EDIT_MAXLOGSIZE, dwMaxSize, FALSE); + SetDlgItemInt(hDlg, IDC_EDIT_EVENTS_AGE, dwRetention, FALSE); + + if (dwRetention == 0) + { + CheckRadioButton(hDlg, IDC_OVERWRITE_AS_NEEDED, IDC_NO_OVERWRITE, IDC_OVERWRITE_AS_NEEDED); + EnableDlgItem(hDlg, IDC_EDIT_EVENTS_AGE, FALSE); + EnableDlgItem(hDlg, IDC_UPDOWN_EVENTS_AGE, FALSE); + } + else if (dwRetention == INFINITE) + { + CheckRadioButton(hDlg, IDC_OVERWRITE_AS_NEEDED, IDC_NO_OVERWRITE, IDC_NO_OVERWRITE); + EnableDlgItem(hDlg, IDC_EDIT_EVENTS_AGE, FALSE); + EnableDlgItem(hDlg, IDC_UPDOWN_EVENTS_AGE, FALSE); + } + else + { + CheckRadioButton(hDlg, IDC_OVERWRITE_AS_NEEDED, IDC_NO_OVERWRITE, IDC_OVERWRITE_OLDER_THAN); + EnableDlgItem(hDlg, IDC_EDIT_EVENTS_AGE, TRUE); + EnableDlgItem(hDlg, IDC_UPDOWN_EVENTS_AGE, TRUE); + } + } + else + { + // TODO: Hide the unused controls! Or, just use another type of property sheet! + } +} + +/* Message handler for EventLog Properties dialog */ +INT_PTR CALLBACK +EventLogPropProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + PEVENTLOGFILTER EventLogFilter; + + UNREFERENCED_PARAMETER(lParam); + + EventLogFilter = (PEVENTLOGFILTER)GetWindowLongPtrW(hDlg, DWLP_USER); + + switch (uMsg) + { + case WM_INITDIALOG: + { + EventLogFilter = (PEVENTLOGFILTER)((LPPROPSHEETPAGE)lParam)->lParam; + SetWindowLongPtrW(hDlg, DWLP_USER, (LONG_PTR)EventLogFilter); + + PropSheet_UnChanged(GetParent(hDlg), hDlg); + + InitPropertiesDlg(hDlg, EventLogFilter->EventLogs[0]); + + return (INT_PTR)TRUE; + } + + case WM_DESTROY: + return (INT_PTR)TRUE; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDOK: + case IDCANCEL: + EndDialog(hDlg, LOWORD(wParam)); + return (INT_PTR)TRUE; + + case IDC_OVERWRITE_AS_NEEDED: + { + CheckRadioButton(hDlg, IDC_OVERWRITE_AS_NEEDED, IDC_NO_OVERWRITE, IDC_OVERWRITE_AS_NEEDED); + EnableDlgItem(hDlg, IDC_EDIT_EVENTS_AGE, FALSE); + EnableDlgItem(hDlg, IDC_UPDOWN_EVENTS_AGE, FALSE); + break; + } + + case IDC_OVERWRITE_OLDER_THAN: + { + CheckRadioButton(hDlg, IDC_OVERWRITE_AS_NEEDED, IDC_NO_OVERWRITE, IDC_OVERWRITE_OLDER_THAN); + EnableDlgItem(hDlg, IDC_EDIT_EVENTS_AGE, TRUE); + EnableDlgItem(hDlg, IDC_UPDOWN_EVENTS_AGE, TRUE); + break; + } + + case IDC_NO_OVERWRITE: + { + CheckRadioButton(hDlg, IDC_OVERWRITE_AS_NEEDED, IDC_NO_OVERWRITE, IDC_NO_OVERWRITE); + EnableDlgItem(hDlg, IDC_EDIT_EVENTS_AGE, FALSE); + EnableDlgItem(hDlg, IDC_UPDOWN_EVENTS_AGE, FALSE); + break; + } + + case IDHELP: + MessageBoxW(hDlg, + L"Help not implemented yet!", + L"Event Log", + MB_OK | MB_ICONINFORMATION); + return (INT_PTR)TRUE; + + default: + break; + } + break; + } + + return (INT_PTR)FALSE; +} + +INT_PTR +EventLogProperties(HINSTANCE hInstance, HWND hWndParent) +{ + PROPSHEETHEADERW psh; + PROPSHEETPAGEW psp[1]; // 2 + + PEVENTLOGFILTER EventLogFilter = NULL; + + TVITEMEXW tvItemEx; + HTREEITEM hti; + + /* Get index of selected item */ + hti = TreeView_GetSelection(hwndTreeView); + if (hti != NULL) + { + tvItemEx.mask = TVIF_PARAM; + tvItemEx.hItem = hti; + + TreeView_GetItem(hwndTreeView, &tvItemEx); + EventLogFilter = (PEVENTLOGFILTER)tvItemEx.lParam; + } + + /* + * Bail out if there is no available filter, or if the filter + * contains more than one log. + */ + if (!EventLogFilter || EventLogFilter->NumOfEventLogs > 1 || + EventLogFilter->EventLogs[0] == NULL) + { + return 0; + } + + /* Header */ + psh.dwSize = sizeof(psh); + psh.dwFlags = PSH_PROPSHEETPAGE /*| PSH_USEICONID */ | PSH_PROPTITLE | PSH_HASHELP /*| PSH_NOCONTEXTHELP */ /*| PSH_USECALLBACK */; + psh.hInstance = hInstance; + psh.hwndParent = hWndParent; + // psh.pszIcon = MAKEINTRESOURCEW(IDI_APPICON); // Disabled because it only sets the small icon; the big icon is a stretched version of the small one. + psh.pszCaption = EventLogFilter->EventLogs[0]->LogName; + psh.nStartPage = 0; + psh.ppsp = psp; + psh.nPages = ARRAYSIZE(psp); + // psh.pfnCallback = PropSheetCallback; + + /* Log properties page */ + psp[0].dwSize = sizeof(psp[0]); + psp[0].dwFlags = PSP_HASHELP; + psp[0].hInstance = hInstance; + psp[0].pszTemplate = MAKEINTRESOURCEW(IDD_LOGPROPERTIES_GENERAL); + psp[0].pfnDlgProc = EventLogPropProc; + psp[0].lParam = (LPARAM)EventLogFilter; + +#if 0 + /* TODO: Log sources page */ + psp[1].dwSize = sizeof(psp[1]); + psp[1].dwFlags = PSP_HASHELP; + psp[1].hInstance = hInstance; + psp[1].pszTemplate = MAKEINTRESOURCEW(IDD_GENERAL_PAGE); + psp[1].pfnDlgProc = GeneralPageWndProc; + psp[0].lParam = (LPARAM)EventLogFilter; +#endif + + /* Create the property sheet */ + return PropertySheetW(&psh); +} + + + VOID DisplayEvent(HWND hDlg) { @@ -1624,11 +3375,11 @@ DisplayEvent(HWND hDlg) WCHAR szEventText[EVENT_MESSAGE_EVENTTEXT_BUFFER]; BOOL bEventData = FALSE; LVITEMW li; - EVENTLOGRECORD* pevlr; + PEVENTLOGRECORD pevlr; int iIndex; /* Get index of selected item */ - iIndex = (int)SendMessageW(hwndListView, LVM_GETNEXTITEM, -1, LVNI_SELECTED | LVNI_FOCUSED); + iIndex = ListView_GetNextItem(hwndListView, -1, LVNI_SELECTED | LVNI_FOCUSED); if (iIndex == -1) { MessageBoxW(hDlg, @@ -1644,7 +3395,7 @@ DisplayEvent(HWND hDlg) (void)ListView_GetItem(hwndListView, &li); - pevlr = (EVENTLOGRECORD*)li.lParam; + pevlr = (PEVENTLOGRECORD)li.lParam; ListView_GetItemText(hwndListView, iIndex, 0, szEventType, ARRAYSIZE(szEventType)); ListView_GetItemText(hwndListView, iIndex, 1, szDate, ARRAYSIZE(szDate)); @@ -1665,15 +3416,15 @@ DisplayEvent(HWND hDlg) SetDlgItemTextW(hDlg, IDC_EVENTTYPESTATIC, szEventType); bEventData = (pevlr->DataLength > 0); - EnableWindow(GetDlgItem(hDlg, IDC_BYTESRADIO), bEventData); - EnableWindow(GetDlgItem(hDlg, IDC_WORDRADIO), bEventData); + EnableDlgItem(hDlg, IDC_BYTESRADIO, bEventData); + EnableDlgItem(hDlg, IDC_WORDRADIO, bEventData); - GetEventMessage(lpSourceLogName, szSource, pevlr, szEventText); + GetEventMessage(ActiveFilter->EventLogs[0]->LogName, szSource, pevlr, szEventText); SetDlgItemTextW(hDlg, IDC_EVENTTEXTEDIT, szEventText); } UINT -PrintByteDataLine(PWCHAR pBuffer, UINT uOffset, PBYTE pd, UINT uLength) +PrintByteDataLine(PWCHAR pBuffer, UINT uOffset, PBYTE pData, UINT uLength) { PWCHAR p = pBuffer; UINT n, i, r = 0; @@ -1681,32 +3432,33 @@ PrintByteDataLine(PWCHAR pBuffer, UINT uOffset, PBYTE pd, UINT uLength) if (uOffset != 0) { n = swprintf(p, L"\r\n"); - p = p + n; + p += n; r += n; } n = swprintf(p, L"%04lx:", uOffset); - p = p + n; + p += n; r += n; for (i = 0; i < uLength; i++) { - n = swprintf(p, L" %02x", pd[i]); - p = p + n; + n = swprintf(p, L" %02x", pData[i]); + p += n; r += n; } for (i = 0; i < 9 - uLength; i++) { n = swprintf(p, L" "); - p = p + n; + p += n; r += n; } for (i = 0; i < uLength; i++) { - n = swprintf(p, L"%c", iswprint(pd[i]) ? pd[i] : L'.'); - p = p + n; + // NOTE: Normally iswprint should return FALSE for tabs... + n = swprintf(p, L"%c", (iswprint(pData[i]) && (pData[i] != L'\t')) ? pData[i] : L'.'); + p += n; r += n; } @@ -1722,18 +3474,26 @@ PrintWordDataLine(PWCHAR pBuffer, UINT uOffset, PULONG pData, UINT uLength) if (uOffset != 0) { n = swprintf(p, L"\r\n"); - p = p + n; + p += n; r += n; } n = swprintf(p, L"%04lx:", uOffset); - p = p + n; + p += n; r += n; for (i = 0; i < uLength / sizeof(ULONG); i++) { n = swprintf(p, L" %08lx", pData[i]); - p = p + n; + p += n; + r += n; + } + + /* Display the remaining bytes if uLength was not a multiple of sizeof(ULONG) */ + for (i = (uLength / sizeof(ULONG)) * sizeof(ULONG); i < uLength; i++) + { + n = swprintf(p, L" %02x", ((PBYTE)pData)[i]); + p += n; r += n; } @@ -1745,7 +3505,7 @@ VOID DisplayEventData(HWND hDlg, BOOL bDisplayWords) { LVITEMW li; - EVENTLOGRECORD* pevlr; + PEVENTLOGRECORD pevlr; int iIndex; LPBYTE pData; @@ -1754,7 +3514,7 @@ DisplayEventData(HWND hDlg, BOOL bDisplayWords) PWCHAR pTextBuffer, pLine; /* Get index of selected item */ - iIndex = (int)SendMessageW(hwndListView, LVM_GETNEXTITEM, -1, LVNI_SELECTED | LVNI_FOCUSED); + iIndex = ListView_GetNextItem(hwndListView, -1, LVNI_SELECTED | LVNI_FOCUSED); if (iIndex == -1) { MessageBoxW(hDlg, @@ -1770,7 +3530,7 @@ DisplayEventData(HWND hDlg, BOOL bDisplayWords) (void)ListView_GetItem(hwndListView, &li); - pevlr = (EVENTLOGRECORD*)li.lParam; + pevlr = (PEVENTLOGRECORD)li.lParam; if (pevlr->DataLength == 0) { SetDlgItemTextW(hDlg, IDC_EVENTDATAEDIT, L""); @@ -1783,38 +3543,38 @@ DisplayEventData(HWND hDlg, BOOL bDisplayWords) uBufferSize = ((pevlr->DataLength / 8) + 1) * 43 * sizeof(WCHAR); pTextBuffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, uBufferSize); - if (pTextBuffer) + if (!pTextBuffer) + return; + + pLine = pTextBuffer; + uOffset = 0; + + for (i = 0; i < pevlr->DataLength / 8; i++) { - pLine = pTextBuffer; - uOffset = 0; + pData = (LPBYTE)((LPBYTE)pevlr + pevlr->DataOffset + uOffset); - for (i = 0; i < pevlr->DataLength / 8; i++) - { - pData = (LPBYTE)((LPBYTE)pevlr + pevlr->DataOffset + uOffset); + if (bDisplayWords) + uLineLength = PrintWordDataLine(pLine, uOffset, (PULONG)pData, 8); + else + uLineLength = PrintByteDataLine(pLine, uOffset, pData, 8); + pLine = pLine + uLineLength; - if (bDisplayWords) - uLineLength = PrintWordDataLine(pLine, uOffset, (PULONG)pData, 8); - else - uLineLength = PrintByteDataLine(pLine, uOffset, pData, 8); - pLine = pLine + uLineLength; - - uOffset += 8; - } - - if (pevlr->DataLength % 8 != 0) - { - pData = (LPBYTE)((LPBYTE)pevlr + pevlr->DataOffset + uOffset); - - if (bDisplayWords) - PrintWordDataLine(pLine, uOffset, (PULONG)pData, pevlr->DataLength % 8); - else - PrintByteDataLine(pLine, uOffset, pData, pevlr->DataLength % 8); - } - - SetDlgItemTextW(hDlg, IDC_EVENTDATAEDIT, pTextBuffer); - - HeapFree(GetProcessHeap(), 0, pTextBuffer); + uOffset += 8; } + + if (pevlr->DataLength % 8 != 0) + { + pData = (LPBYTE)((LPBYTE)pevlr + pevlr->DataOffset + uOffset); + + if (bDisplayWords) + PrintWordDataLine(pLine, uOffset, (PULONG)pData, pevlr->DataLength % 8); + else + PrintByteDataLine(pLine, uOffset, pData, pevlr->DataLength % 8); + } + + SetDlgItemTextW(hDlg, IDC_EVENTDATAEDIT, pTextBuffer); + + HeapFree(GetProcessHeap(), 0, pTextBuffer); } HFONT @@ -1943,21 +3703,21 @@ InitDetailsDlg(HWND hDlg, PDETAILDATA pData) /* Message handler for Event Details box */ INT_PTR CALLBACK -EventDetails(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +EventDetails(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { PDETAILDATA pData; UNREFERENCED_PARAMETER(lParam); - pData = (PDETAILDATA)GetWindowLongPtr(hDlg, DWLP_USER); + pData = (PDETAILDATA)GetWindowLongPtrW(hDlg, DWLP_USER); - switch (message) + switch (uMsg) { case WM_INITDIALOG: - pData = (PDETAILDATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DETAILDATA)); + pData = (PDETAILDATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*pData)); if (pData) { - SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)pData); + SetWindowLongPtrW(hDlg, DWLP_USER, (LONG_PTR)pData); pData->bDisplayWords = FALSE; pData->hMonospaceFont = CreateMonospaceFont(); diff --git a/reactos/base/applications/mscutils/eventvwr/eventvwr.rc b/reactos/base/applications/mscutils/eventvwr/eventvwr.rc index 7e89627a3dc..f80bb52fe1b 100644 --- a/reactos/base/applications/mscutils/eventvwr/eventvwr.rc +++ b/reactos/base/applications/mscutils/eventvwr/eventvwr.rc @@ -1,5 +1,6 @@ #include #include +#include #include #include "resource.h" @@ -19,9 +20,11 @@ IDI_EVENTLOG ICON "res/eventlog.ico" IDI_CLOSED_CATEGORY ICON "res/folder.ico" IDI_OPENED_CATEGORY ICON "res/folderopen.ico" -IDI_WARNINGICON ICON "res/warning.ico" IDI_INFORMATIONICON ICON "res/info.ico" +IDI_WARNINGICON ICON "res/warning.ico" IDI_ERRORICON ICON "res/error.ico" +IDI_AUDITSUCCESSICON ICON "res/key.ico" +IDI_AUDITFAILUREICON ICON "res/lock.ico" /* Event Navigation */ IDI_NEXT ICON "res/next_event.ico" diff --git a/reactos/base/applications/mscutils/eventvwr/lang/bg-BG.rc b/reactos/base/applications/mscutils/eventvwr/lang/bg-BG.rc index a97c4cdc7d8..1e2a9962717 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/bg-BG.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/bg-BG.rc @@ -5,10 +5,12 @@ BEGIN POPUP "&Дневник" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "Из&ход", IDM_EXIT END @@ -32,6 +34,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -66,20 +69,58 @@ BEGIN LTEXT "&Компютър:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "&Описание:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "&Данни:", IDC_STATIC, 8, 169, 25, 8 CONTROL "&Байтове", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 40, 8 CONTROL "&Думи", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 85, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "Помо&щ", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "&Затваряне", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "&Затваряне", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -88,10 +129,18 @@ BEGIN IDS_APP_TITLE "Преглед на събития" IDS_APP_TITLE_EX "%s - %s Log on \\\\" IDS_STATUS_MSG "%s has %lu event(s)" + IDS_LOADING_WAIT "Зареждане на събитията. Почакайте..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "Не е намерено описанието на събитие ( %lu ) в източник ( %s ). Възможно е местият компютър да няма нужните сведения в регистъра или DLL файловет, нужни за показване на съобщения от отдалечен компютър.\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" + IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Error" IDS_EVENTLOG_WARNING_TYPE "Warning" IDS_EVENTLOG_INFORMATION_TYPE "Information" @@ -99,8 +148,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Audit Failure" IDS_EVENTLOG_SUCCESS "Success" IDS_EVENTLOG_UNKNOWN_TYPE "Unknown Event" - IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" - IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/cs-CZ.rc b/reactos/base/applications/mscutils/eventvwr/lang/cs-CZ.rc index 4b8dba689f1..f99e8db31f5 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/cs-CZ.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/cs-CZ.rc @@ -5,10 +5,12 @@ BEGIN POPUP "&Protokol" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "&Odstranit události", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "&Odstranit události", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "&Konec", IDM_EXIT END @@ -32,6 +34,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -66,20 +69,58 @@ BEGIN LTEXT "P&očítač:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 52, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "&Popis:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "D&ata:", IDC_STATIC, 8, 169, 20, 8 CONTROL "&Byty", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "&Nápověda", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "&Zavřít", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "&Zavřít", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -88,10 +129,18 @@ BEGIN IDS_APP_TITLE "Prohlížeč událostí" IDS_APP_TITLE_EX "%s - Protkol %s na \\\\" IDS_STATUS_MSG "Počet událostí v protokolu %s: %lu" + IDS_LOADING_WAIT "Načítám protokol událostí. Prosím čekejte..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "Popis ID události ( %lu ) zdroj ( %s ) nebyl nalezen. Místní počítač neobsahuje potřebné informace v registru nebo chybí DLL soubory pro zobrazení zpráv ze vzdáleného počítače.\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "Chcete tento protokol před odstraněním uložit?" + IDS_SAVE_FILTER "Protokol událostí (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Chyba" IDS_EVENTLOG_WARNING_TYPE "Upozornění" IDS_EVENTLOG_INFORMATION_TYPE "Informace" @@ -99,8 +148,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Audit selhal" IDS_EVENTLOG_SUCCESS "Úspěch" IDS_EVENTLOG_UNKNOWN_TYPE "Neznámá událost" - IDS_CLEAREVENTS_MSG "Chcete tento protokol před odstraněním uložit?" - IDS_SAVE_FILTER "Protokol událostí (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/de-DE.rc b/reactos/base/applications/mscutils/eventvwr/lang/de-DE.rc index e8c7262c570..76aadc03ac0 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/de-DE.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/de-DE.rc @@ -7,10 +7,12 @@ BEGIN POPUP "&Protokoll" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "Alle E&reignisse löschen", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "Alle E&reignisse löschen", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "B&eenden", IDM_EXIT END @@ -34,6 +36,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -68,20 +71,58 @@ BEGIN LTEXT "&Computer:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "&Bezeichnung:", IDC_STATIC, 8, 65, 45, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "D&aten:", IDC_STATIC, 8, 169, 24, 8 CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "&Hilfe", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "&Schließen", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "&Schließen", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -90,10 +131,18 @@ BEGIN IDS_APP_TITLE "Ereignisanzeige" IDS_APP_TITLE_EX "%s - %s Log on \\\\" IDS_STATUS_MSG "%s has %lu event(s)" + IDS_LOADING_WAIT "Ereignis-Protokolle werden geladen. Bitte warten..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "Die Bezeichnung für die Ereignis-ID ( %lu ) in der Quelle ( %s ) kann nicht gefunden werden. Es könnte sein, dass der Lokale Computer die notwendigen Registry Einträge oder Nachrichten DLLs, um Nachrichten von Remoten Computern anzuzeigen, nicht besitzt.\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "Möchten Sie dieses Protokoll vor dem Löschen speichern?" + IDS_SAVE_FILTER "Ereignisprotokoll (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Fehler" IDS_EVENTLOG_WARNING_TYPE "Warnung" IDS_EVENTLOG_INFORMATION_TYPE "Informationen" @@ -101,8 +150,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Audit Fehlgeschlagen" IDS_EVENTLOG_SUCCESS "Erfolgreich" IDS_EVENTLOG_UNKNOWN_TYPE "Unbekanntes Ereignis" - IDS_CLEAREVENTS_MSG "Möchten Sie dieses Protokoll vor dem Löschen speichern?" - IDS_SAVE_FILTER "Ereignisprotokoll (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/el-GR.rc b/reactos/base/applications/mscutils/eventvwr/lang/el-GR.rc index c5fe111c252..cfbf4b7cace 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/el-GR.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/el-GR.rc @@ -7,10 +7,12 @@ BEGIN POPUP "&Log" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "Έ&ξοδος", IDM_EXIT END @@ -34,6 +36,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -68,20 +71,58 @@ BEGIN LTEXT "&Υπολογιστής:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "&Περιγραφή:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "Δ&εδομένα:", IDC_STATIC, 8, 169, 20, 8 CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "&Βοήθεια", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "&Κλείσιμο", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "&Κλείσιμο", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -90,10 +131,18 @@ BEGIN IDS_APP_TITLE "Event Viewer" IDS_APP_TITLE_EX "%s - %s Log on \\\\" IDS_STATUS_MSG "%s has %lu event(s)" + IDS_LOADING_WAIT "Γίνεται φόρτωση των Logs συμβάντων. Παρακαλώ περιμένετε..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "The description for Event ID ( %lu ) in Source ( %s ) cannot be found. The local computer may not have the necessary registry information or message DLL files to display messages from a remote computer.\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" + IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Αφάλμα" IDS_EVENTLOG_WARNING_TYPE "Προειδοποίηση" IDS_EVENTLOG_INFORMATION_TYPE "Πληροφορία" @@ -101,8 +150,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Audit Failure" IDS_EVENTLOG_SUCCESS "Επιτυχία" IDS_EVENTLOG_UNKNOWN_TYPE "Άγνωστο συμβάν" - IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" - IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/en-US.rc b/reactos/base/applications/mscutils/eventvwr/lang/en-US.rc index d0645af8917..49f649e4f5f 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/en-US.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/en-US.rc @@ -13,10 +13,12 @@ BEGIN POPUP "&Log" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "E&xit", IDM_EXIT END @@ -40,6 +42,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -74,20 +77,58 @@ BEGIN LTEXT "&Computer:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "&Description:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "D&ata:", IDC_STATIC, 8, 169, 20, 8 CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "&Help", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "&Close", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "&Close", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -96,10 +137,18 @@ BEGIN IDS_APP_TITLE "Event Viewer" IDS_APP_TITLE_EX "%s - %s Log on \\\\" IDS_STATUS_MSG "%s has %lu event(s)" + IDS_LOADING_WAIT "Loading Event Logs. Please wait..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "The description for Event ID ( %lu ) in Source ( %s ) cannot be found. The local computer may not have the necessary registry information or message DLL files to display messages from a remote computer.\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" + IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Error" IDS_EVENTLOG_WARNING_TYPE "Warning" IDS_EVENTLOG_INFORMATION_TYPE "Information" @@ -107,8 +156,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Audit Failure" IDS_EVENTLOG_SUCCESS "Success" IDS_EVENTLOG_UNKNOWN_TYPE "Unknown Event" - IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" - IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/es-ES.rc b/reactos/base/applications/mscutils/eventvwr/lang/es-ES.rc index 68645e1cf2e..18c015712c8 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/es-ES.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/es-ES.rc @@ -7,10 +7,12 @@ BEGIN POPUP "&Registro" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "&Borrar todos los eventos", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "&Borrar todos los eventos", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "S&alir", IDM_EXIT END @@ -34,6 +36,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -68,20 +71,58 @@ BEGIN LTEXT "&Equipo:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "&Descripción:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "D&atos:", IDC_STATIC, 8, 169, 25, 8 CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "&Ayuda", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "&Cerrar", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "&Cerrar", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -90,10 +131,18 @@ BEGIN IDS_APP_TITLE "Visor de eventos" IDS_APP_TITLE_EX "%s - Registro de %s en \\\\" IDS_STATUS_MSG "%s tiene %lu evento(s)" + IDS_LOADING_WAIT "Recuperando eventos. Espere un momento..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "No se pudo recuperar la descripción para el evento con ID (%lu) y origen (%s). El equipo local puede no tener la información necesaria en el registro o las DLLs necesarias para mostrar los mensajes de un equipo remoto.\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "¿Desea guardar este registro de eventos antes de borrarlo?" + IDS_SAVE_FILTER "Registro de eventos (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Error" IDS_EVENTLOG_WARNING_TYPE "Advertencia" IDS_EVENTLOG_INFORMATION_TYPE "Información" @@ -101,8 +150,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Auditoría fallida" IDS_EVENTLOG_SUCCESS "Completado" IDS_EVENTLOG_UNKNOWN_TYPE "Evento desconocido" - IDS_CLEAREVENTS_MSG "¿Desea guardar este registro de eventos antes de borrarlo?" - IDS_SAVE_FILTER "Registro de eventos (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/fr-FR.rc b/reactos/base/applications/mscutils/eventvwr/lang/fr-FR.rc index cded4988bd2..31cb403c6de 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/fr-FR.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/fr-FR.rc @@ -7,10 +7,12 @@ BEGIN POPUP "&Journal" BEGIN MENUITEM "Ouvrir...", IDM_OPEN_EVENTLOG - MENUITEM "Enregistrer le fichier journal &sous...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Enregistrer le fichier journal &sous...", IDM_SAVE_EVENTLOG + MENUITEM "Fermer", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "&Effacer tous les événements", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Propriétés du &Journal...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "&Effacer tous les événements", IDM_CLEAR_EVENTS + MENUITEM "&Renommer\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Propriétés du &Journal...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "Quitter", IDM_EXIT END @@ -34,6 +36,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -68,20 +71,58 @@ BEGIN LTEXT "Ordinateur :", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "&Description :", IDC_STATIC, 8, 65, 45, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "Données :", IDC_STATIC, 8, 169, 35, 8 CONTROL "&Octets", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 50, 169, 34, 8 CONTROL "&Mots", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 88, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "Aide", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "Fermer", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "Fermer", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Général" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Nom &affiché :", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Nom du &journal :", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Fichier journal :", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Taille :", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Créé le :", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modifié le :", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Dernier accès le :", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Taille de journal", IDC_STATIC, 7, 106, 238, 99 + LTEXT "Taille &maximale du journal :", IDC_STATIC, 17, 122, 88, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 110, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 150, 119, 10, 14 + LTEXT "Ko", IDC_STATIC, 160, 122, 20, 8 + LTEXT "Lorsque la taille maximale du journal est atteinte :", IDC_STATIC, 17, 140, 219, 8 + CONTROL "Remplacer les événements si &nécessaire", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "Remplacer les é&vénements datant de plus de", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 155, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 175, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 210, 165, 10, 14 + LTEXT "jours", IDC_STATIC, 215, 168, 20, 8 + CONTROL "Ne &pas remplacer les événements\n(nettoyage manuel du journal)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 133, 20 + PUSHBUTTON "Paramètres par &défaut", IDC_RESTOREDEFAULTS, 156, 183, 80, 14 + AUTOCHECKBOX "Utiliser une connection à &basse vitesse", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Effacer le journal", ID_CLEARLOG, 180, 213, 65, 14 END STRINGTABLE @@ -90,10 +131,18 @@ BEGIN IDS_APP_TITLE "Visionneuse d'événements" IDS_APP_TITLE_EX "%s - Journal %s sur \\\\" IDS_STATUS_MSG "%s contient %lu événement(s)" + IDS_LOADING_WAIT "Chargement des journaux d'événements. Veuillez patienter..." + IDS_NO_ITEMS "Aucun élément à afficher dans cet aperçu." // "No events in this log." IDS_EVENTLOG_SYSTEM "Journaux système" IDS_EVENTLOG_APP "Journaux d'application" IDS_EVENTLOG_USER "Journaux de l'utilisateur" IDS_EVENTSTRINGIDNOTFOUND "La description pour l'événement d'ID ( %lu ) dans la source ( %s ) ne peut être trouvée. L'ordinateur local pourrait ne pas avoir les informations registres nécessaires ou les fichiers DLL de message pour afficher les messages depuis un ordinateur distant.\n\nLes informations suivantes font partie de l'événement :\n\n" + IDS_CLEAREVENTS_MSG "Voulez-vous enregistrer ce journal d'événements avant de l'effacer ?" + IDS_SAVE_FILTER "Journal d'événements (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Erreur" IDS_EVENTLOG_WARNING_TYPE "Avertissement" IDS_EVENTLOG_INFORMATION_TYPE "Informations" @@ -101,8 +150,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Échec de l'audit" IDS_EVENTLOG_SUCCESS "Succès" IDS_EVENTLOG_UNKNOWN_TYPE "Événement Inconnu" - IDS_CLEAREVENTS_MSG "Voulez-vous enregistrer ce journal d'événements avant de l'effacer ?" - IDS_SAVE_FILTER "Journal d'événements (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "octets" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/he-IL.rc b/reactos/base/applications/mscutils/eventvwr/lang/he-IL.rc index d485c7164e6..3d211a785af 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/he-IL.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/he-IL.rc @@ -7,10 +7,12 @@ BEGIN POPUP "מציג האירועים (מקומי)" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "יציאה", IDM_EXIT END @@ -34,6 +36,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -68,20 +71,58 @@ BEGIN LTEXT "מחשב:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "תיאור:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "נתונים:", IDC_STATIC, 8, 169, 20, 8 CONTROL "בתים", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "מילים", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "עזרה", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "סגור", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "סגור", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -90,10 +131,18 @@ BEGIN IDS_APP_TITLE "יומן האירועים" IDS_APP_TITLE_EX "%s - %s Log on \\\\" IDS_STATUS_MSG "%s has %lu event(s)" + IDS_LOADING_WAIT "טוען יומני אירועים, נא להמתין..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "The description for Event ID ( %lu ) in Source ( %s ) cannot be found. The local computer may not have the necessary registry information or message DLL files to display messages from a remote computer.\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" + IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "שגיאה" IDS_EVENTLOG_WARNING_TYPE "אזהרה" IDS_EVENTLOG_INFORMATION_TYPE "מידע" @@ -101,8 +150,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Audit Failure" IDS_EVENTLOG_SUCCESS "הצלחה" IDS_EVENTLOG_UNKNOWN_TYPE "אירוע לא ידוע" - IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" - IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/it-IT.rc b/reactos/base/applications/mscutils/eventvwr/lang/it-IT.rc index 7d5465e8963..bf975b775a5 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/it-IT.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/it-IT.rc @@ -7,10 +7,12 @@ BEGIN POPUP "&Log" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "E&sci", IDM_EXIT END @@ -34,6 +36,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -68,20 +71,58 @@ BEGIN LTEXT "&Computer:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "&Descrizione:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "D&ati:", IDC_STATIC, 8, 169, 20, 8 CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "&Aiuto", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "&Chiudi", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "&Chiudi", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -90,10 +131,18 @@ BEGIN IDS_APP_TITLE "Visualizzatore eventi" IDS_APP_TITLE_EX "%s - %s Log on \\\\" IDS_STATUS_MSG "%s has %lu event(s)" + IDS_LOADING_WAIT "Caricamento eventi in corso. Attendere..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "La descrizione per l'ID evento ( %lu ) proveniente da ( %s ) non può essere trovata. Il computer locale potrebbe non avere le informazioni sul registry necessarie o i file DLL con i messaggi necessari per la visualizzazione da un computer remoto.\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" + IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Errore" IDS_EVENTLOG_WARNING_TYPE "Avviso" IDS_EVENTLOG_INFORMATION_TYPE "Informazione" @@ -101,8 +150,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Audit fallita" IDS_EVENTLOG_SUCCESS "Successo" IDS_EVENTLOG_UNKNOWN_TYPE "Evento sconosciuto" - IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" - IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/ja-JP.rc b/reactos/base/applications/mscutils/eventvwr/lang/ja-JP.rc index 07f62bbf49c..29a7a28ed12 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/ja-JP.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/ja-JP.rc @@ -7,10 +7,12 @@ BEGIN POPUP "ログ(&L)" BEGIN MENUITEM "Open...(&O)", IDM_OPEN_EVENTLOG - MENUITEM "Save Event Log as...(&E)", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save Event Log as...(&E)", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "Clear all Events (&L)", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Settings...(&T)", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "Clear all Events (&L)", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Settings...(&T)", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "終了(&X)", IDM_EXIT END @@ -34,6 +36,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -68,20 +71,58 @@ BEGIN LTEXT "コンピュータ(&C):", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "説明(&D):", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "データ(&A):", IDC_STATIC, 8, 169, 20, 8 CONTROL "バイト(&B)", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "ワード(&W)", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "ヘルプ(&H)", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "閉じる(&C)", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "閉じる(&C)", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -90,10 +131,18 @@ BEGIN IDS_APP_TITLE "イベント ビューア" IDS_APP_TITLE_EX "%s - %s Log on \\\\" IDS_STATUS_MSG "%s has %lu event(s)" + IDS_LOADING_WAIT "イベント ログを読み込んでいます。 お待ちください..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "イベント ID (%lu) (ソース %s 内) に関する説明が見つかりませんでした。 リモート コンピュータからメッセージを表示するために必要なレジストリ情報またはメッセージ DLL ファイルがローカル コンピュータにない可能性があります。\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" + IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "エラー" IDS_EVENTLOG_WARNING_TYPE "警告" IDS_EVENTLOG_INFORMATION_TYPE "情報" @@ -101,8 +150,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "失敗の監査" IDS_EVENTLOG_SUCCESS "成功" IDS_EVENTLOG_UNKNOWN_TYPE "不明なイベント" - IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" - IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/ko-KR.rc b/reactos/base/applications/mscutils/eventvwr/lang/ko-KR.rc index edd26b9182c..e19b9dd0c45 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/ko-KR.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/ko-KR.rc @@ -7,10 +7,12 @@ BEGIN POPUP "로그(&L)" BEGIN MENUITEM "Open...(&O)", IDM_OPEN_EVENTLOG - MENUITEM "Save Event Log as...(&E)", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save Event Log as...(&E)", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "종료(&X)", IDM_EXIT END @@ -34,6 +36,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -68,20 +71,58 @@ BEGIN LTEXT "컴퓨터(&C):", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "설명(&D):", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "데이터(&A):", IDC_STATIC, 8, 169, 20, 8 CONTROL "바이트(&B)", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "글자(&W)", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "도움말(&H)", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "닫기(&C)", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "닫기(&C)", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -90,10 +131,18 @@ BEGIN IDS_APP_TITLE "이벤트 뷰어" IDS_APP_TITLE_EX "%s - %s Log on \\\\" IDS_STATUS_MSG "%s has %lu event(s)" + IDS_LOADING_WAIT "이벤트 로그 로딩중. 기다려주세요..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "( %s ) 의 이벤트ID ( %lu ) 에 대한 설명을 찾을 수 없습니다. 로컬 컴퓨터가 원격 컴퓨터의 메세지를 표시하는데 필요한 레지스트리나 DLL 파일을 가지지 않고 있을수 있습니다.\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" + IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "에러" IDS_EVENTLOG_WARNING_TYPE "경고" IDS_EVENTLOG_INFORMATION_TYPE "정보" @@ -101,8 +150,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "감사 실패" IDS_EVENTLOG_SUCCESS "성공" IDS_EVENTLOG_UNKNOWN_TYPE "알려지지 않은 이벤트" - IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" - IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/no-NO.rc b/reactos/base/applications/mscutils/eventvwr/lang/no-NO.rc index 6394a532ece..e36d603e574 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/no-NO.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/no-NO.rc @@ -5,10 +5,12 @@ BEGIN POPUP "&Logg" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "A&vslutt", IDM_EXIT END @@ -32,6 +34,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -66,20 +69,58 @@ BEGIN LTEXT "&Datamaskin:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "&Beskrivelse:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "D&ata", IDC_STATIC, 8, 169, 20, 8 CONTROL "&Tegn", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "&Ord", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "&Hjelp", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "&Lukk", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "&Lukk", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -88,10 +129,18 @@ BEGIN IDS_APP_TITLE "Hendelseliste" IDS_APP_TITLE_EX "%s - %s Log on \\\\" IDS_STATUS_MSG "%s has %lu event(s)" + IDS_LOADING_WAIT "Laster Hendelseliste. Venligst vent..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "Beskrivelsen for Hendelse ID ( %lu ) i kilden ( %s ) kan ikke bli finnet. Lokale datamaskinen har ikke nødvendige register informasjon eller melding DLL filer for å vise melding fra en fjern datamaskin.\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" + IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Feil" IDS_EVENTLOG_WARNING_TYPE "Advarseler" IDS_EVENTLOG_INFORMATION_TYPE "Informasjon" @@ -99,8 +148,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Revisjon misslykkes" IDS_EVENTLOG_SUCCESS "Suksess" IDS_EVENTLOG_UNKNOWN_TYPE "Ukjent hendelse" - IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" - IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/pl-PL.rc b/reactos/base/applications/mscutils/eventvwr/lang/pl-PL.rc index 409a268ebc0..79d76835788 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/pl-PL.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/pl-PL.rc @@ -9,10 +9,12 @@ BEGIN POPUP "&Logi" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "W&yczyść wszystkie zdarzenia", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "W&yczyść wszystkie zdarzenia", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "&Wyjście", IDM_EXIT END @@ -36,6 +38,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -70,20 +73,58 @@ BEGIN LTEXT "&Komputer:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "&Opis:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "D&ane", IDC_STATIC, 8, 169, 20, 8 CONTROL "&Bajty", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "&Słowa", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "Po&moc", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "&Zamknij", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "&Zamknij", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -92,10 +133,18 @@ BEGIN IDS_APP_TITLE "Podgląd zdarzeń" IDS_APP_TITLE_EX "%s - %s Log na \\\\" IDS_STATUS_MSG "%s posiada %lu zdarzeń" + IDS_LOADING_WAIT "Ładowanie logów zdarzeń. Proszę czekać..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "Opis zdarzenia dla danego numeru ID ( %lu ) nie został odnaleziony w źródle ( %s ). Ten komputer może nie miec wystarczających informacji w rejestrze, albo bibliotek DLL, aby wyświetlić wiadomości z komputera zdalnego.\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "Czy chcesz zapisać dziennik zdarzeń przed czyszczeniem?" + IDS_SAVE_FILTER "Dziennik zdarzeń (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Błąd" IDS_EVENTLOG_WARNING_TYPE "Ostrzeżenie" IDS_EVENTLOG_INFORMATION_TYPE "Informacja" @@ -103,8 +152,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Nieudany Audyt" IDS_EVENTLOG_SUCCESS "Sukces" IDS_EVENTLOG_UNKNOWN_TYPE "Zdarzenie nieznane" - IDS_CLEAREVENTS_MSG "Czy chcesz zapisać dziennik zdarzeń przed czyszczeniem?" - IDS_SAVE_FILTER "Dziennik zdarzeń (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/pt-BR.rc b/reactos/base/applications/mscutils/eventvwr/lang/pt-BR.rc index 9a4227423c9..337a2640ad0 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/pt-BR.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/pt-BR.rc @@ -7,10 +7,12 @@ BEGIN POPUP "&Registro" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "&Sair", IDM_EXIT END @@ -34,6 +36,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -68,20 +71,58 @@ BEGIN LTEXT "&Computador:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "&Descrição:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "Dad&os:", IDC_STATIC, 8, 169, 20, 8 CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "A&juda", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "&Fechar", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "&Fechar", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -90,10 +131,18 @@ BEGIN IDS_APP_TITLE "Visualizador de Eventos" IDS_APP_TITLE_EX "%s - %s Log on \\\\" IDS_STATUS_MSG "%s has %lu event(s)" + IDS_LOADING_WAIT "Carregando Registros de Eventos. Por favor aguarde..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "A descrição para Event ID ( %lu ) em Fonte ( %s ) não foi encontrado. O computador local talvez não possua a informação de registro necessária ou mensagem de arquivos DLL para exibir mensagens de um computador remoto.\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" + IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Erro" IDS_EVENTLOG_WARNING_TYPE "Aviso" IDS_EVENTLOG_INFORMATION_TYPE "Informação" @@ -101,8 +150,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Falha na Auditoria" IDS_EVENTLOG_SUCCESS "Sucesso" IDS_EVENTLOG_UNKNOWN_TYPE "Evento Desconhecido" - IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" - IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/ro-RO.rc b/reactos/base/applications/mscutils/eventvwr/lang/ro-RO.rc index e449416324d..6c4fdaa1f32 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/ro-RO.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/ro-RO.rc @@ -10,10 +10,12 @@ BEGIN POPUP "&Jurnal" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "&Păstrare jurnal de evenimente ca…", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "&Păstrare jurnal de evenimente ca…", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "Înlăt&ură toate evenimentele", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "Înlăt&ură toate evenimentele", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "I&eșire", IDM_EXIT END @@ -37,6 +39,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -71,20 +74,58 @@ BEGIN LTEXT "&Calculator:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "&Descriere:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "D&ate:", IDC_STATIC, 8, 169, 20, 8 CONTROL "&8 biți", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "&16 biți", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "&Manual…", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "Î&nchide", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "Î&nchide", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -93,10 +134,18 @@ BEGIN IDS_APP_TITLE "Observator de evenimente" IDS_APP_TITLE_EX "%s - %s autentificat pe \\\\" IDS_STATUS_MSG "%s are %lu eveniment(e)" + IDS_LOADING_WAIT "Se încarcă jurnalul de evenimentele…" + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "Nu se poate găsi descrierea evenimentului cu ID-ul ( %lu ) în sursa ( %s ). Este posibil ca în calculatorul local să nu existe informațiile de registru necesare sau fișierele dll de mesaje să afișeze mesaje de la un calculator din rețea.\n\nInformații aferente evenimentului:\n\n" + IDS_CLEAREVENTS_MSG "Doriți păstrarea acestui jurnal de evenimente înainte de a-l închide?" + IDS_SAVE_FILTER "Jurnal de evenimente (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Eroare" IDS_EVENTLOG_WARNING_TYPE "Avertisment" IDS_EVENTLOG_INFORMATION_TYPE "Informație" @@ -104,8 +153,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Audit nereușit" IDS_EVENTLOG_SUCCESS "Succes" IDS_EVENTLOG_UNKNOWN_TYPE "Eveniment necunoscut" - IDS_CLEAREVENTS_MSG "Doriți păstrarea acestui jurnal de evenimente înainte de a-l închide?" - IDS_SAVE_FILTER "Jurnal de evenimente (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/ru-RU.rc b/reactos/base/applications/mscutils/eventvwr/lang/ru-RU.rc index ab79b7ac1ac..cd27c806dfd 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/ru-RU.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/ru-RU.rc @@ -6,18 +6,20 @@ IDM_EVENTVWR MENU BEGIN POPUP "С&обытия" BEGIN - MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "&Открыть...", IDM_OPEN_EVENTLOG + MENUITEM "Сохранить &журнал событий как...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "Очистить &все события", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "Очистить &все события", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Настройки ж&урнала...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "В&ыход", IDM_EXIT END POPUP "&Вид" BEGIN - MENUITEM "&Newest first", IDM_LIST_NEWEST - MENUITEM "&Oldest first", IDM_LIST_OLDEST + MENUITEM "Сначала &новые", IDM_LIST_NEWEST + MENUITEM "Сначала &старые", IDM_LIST_OLDEST MENUITEM SEPARATOR MENUITEM "&Обновить\tF5", IDM_REFRESH END @@ -34,6 +36,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -63,37 +66,83 @@ BEGIN EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL LTEXT "Код (ID):", IDC_STATIC, 103, 25, 36, 8 EDITTEXT IDC_EVENTIDSTATIC, 140, 25, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "Пользователь:", IDC_STATIC, 8, 35, 36, 8 + LTEXT "&Пользователь:", IDC_STATIC, 8, 35, 36, 8 EDITTEXT IDC_EVENTUSERSTATIC, 46, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "Компьютер:", IDC_STATIC, 8, 45, 36, 8 + LTEXT "&Компьютер:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON - LTEXT "Описание:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + LTEXT "&Описание:", IDC_STATIC, 8, 65, 39, 8 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 - LTEXT "Данные:", IDC_STATIC, 8, 169, 30, 8 + LTEXT "&Данные:", IDC_STATIC, 8, 169, 30, 8 CONTROL "&Байты", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 49, 169, 34, 8 CONTROL "&Слова", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 87, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "П&омощь", IDHELP, 8, 228, 55, 14 - DEFPUSHBUTTON "&Закрыть", IDOK, 199, 228, 55, 14 + DEFPUSHBUTTON "&Закрыть", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE BEGIN IDS_COPYRIGHT "Авторские права (С) 2007 Марк Пиулачс (marc.piulachs@codexchange.net)" IDS_APP_TITLE "Просмотр событий" - IDS_APP_TITLE_EX "%s - %s Log on \\\\" + IDS_APP_TITLE_EX "%s - %s журнал на \\\\" IDS_STATUS_MSG "%s has %lu event(s)" - IDS_EVENTLOG_SYSTEM "System Logs" - IDS_EVENTLOG_APP "Application Logs" - IDS_EVENTLOG_USER "User Logs" - IDS_EVENTSTRINGIDNOTFOUND "Не найдено описание для события с кодом ( %lu ) в источнике ( %s ). Возможно, на локальном компьютере нет нужных данных в реестре или файлов DLL сообщений для отображения сообщений удаленного компьютера.\n\nThe following information is part of the event:\n\n" + IDS_LOADING_WAIT "Идет загрузка. Подождите..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." + IDS_EVENTLOG_SYSTEM "Системный журнал" + IDS_EVENTLOG_APP "Журнал приложений" + IDS_EVENTLOG_USER "Пользовательский журнал" + IDS_EVENTSTRINGIDNOTFOUND "Не найдено описание для события с кодом ( %lu ) в источнике ( %s ). Возможно, на локальном компьютере нет нужных данных в реестре или файлов DLL сообщений для отображения сообщений удаленного компьютера.\n\nСледующая информация часть события:\n\n" + IDS_CLEAREVENTS_MSG "Вы хотите сохранить журнал событий перед очисткой?" + IDS_SAVE_FILTER "Журнал событий (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Ошибка" IDS_EVENTLOG_WARNING_TYPE "Предупреждение" IDS_EVENTLOG_INFORMATION_TYPE "Уведомление" @@ -101,8 +150,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Аудит отказов" IDS_EVENTLOG_SUCCESS "Успех" IDS_EVENTLOG_UNKNOWN_TYPE "Неизвестное событие" - IDS_CLEAREVENTS_MSG "Вы хотите сохранить журнал событий перед очисткой?" - IDS_SAVE_FILTER "Журнал событий (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/sk-SK.rc b/reactos/base/applications/mscutils/eventvwr/lang/sk-SK.rc index 722552faef3..85c56c31823 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/sk-SK.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/sk-SK.rc @@ -10,10 +10,12 @@ BEGIN POPUP "&Záznam" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "&Skončiť", IDM_EXIT END @@ -37,6 +39,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -71,20 +74,58 @@ BEGIN LTEXT "P&očítač:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "&Popis:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "Ú&daje:", IDC_STATIC, 8, 169, 20, 8 CONTROL "&Bajty", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "&Slová", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "&Pomocník", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "&Zavrieť", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "&Zavrieť", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -93,10 +134,18 @@ BEGIN IDS_APP_TITLE "Zobrazovač udalostí" IDS_APP_TITLE_EX "%s - %s Log on \\\\" IDS_STATUS_MSG "%s has %lu event(s)" + IDS_LOADING_WAIT "Nahrávam záznamy s udalosťami. Počkajte, prosím..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "Popis pre udalosť ID ( %lu ) zo zdroja ( %s ) nebol nájdený. The local computer may not have the necessary registry information or message DLL files to display messages from a remote computer.\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" + IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Chyba" IDS_EVENTLOG_WARNING_TYPE "Upozornenie" IDS_EVENTLOG_INFORMATION_TYPE "Informácia" @@ -104,8 +153,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Kontrola zlyhala" IDS_EVENTLOG_SUCCESS "Úspech" //Success IDS_EVENTLOG_UNKNOWN_TYPE "Neznáma udalosť" - IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" - IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/sq-AL.rc b/reactos/base/applications/mscutils/eventvwr/lang/sq-AL.rc index f42a20dcfba..545a37bbc60 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/sq-AL.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/sq-AL.rc @@ -13,10 +13,12 @@ BEGIN POPUP "&Log" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "Dil", IDM_EXIT END @@ -40,6 +42,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -74,20 +77,58 @@ BEGIN LTEXT "Kompjuteri:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "Përshkrimi:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "D&ata:", IDC_STATIC, 8, 169, 20, 8 CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "Ndihmë", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "Mbylle", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "Mbylle", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -96,10 +137,18 @@ BEGIN IDS_APP_TITLE "Shikues ngjarjesh" IDS_APP_TITLE_EX "%s - %s Log on \\\\" IDS_STATUS_MSG "%s has %lu event(s)" + IDS_LOADING_WAIT "Ngarkim loget e ngjarjeve. Ju lutem prisni..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "Përshkrimi për ngjarjet ID ( %lu ) në burim ( %s ) nuk gjindet. Kompjuter vendas mund të mos ketë informacionin e regjistrit te nevojshem ose mesazhin për dokumentat DLL për të shfaqur nga një kompjuter në distancë.\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" + IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Error" IDS_EVENTLOG_WARNING_TYPE "Paralajmërim" IDS_EVENTLOG_INFORMATION_TYPE "Informacion" @@ -107,8 +156,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Audit dështoj" IDS_EVENTLOG_SUCCESS "Sukses" IDS_EVENTLOG_UNKNOWN_TYPE "Ngjraje e panjohur" - IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" - IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/sv-SE.rc b/reactos/base/applications/mscutils/eventvwr/lang/sv-SE.rc index 639888ea924..b61969a9b4c 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/sv-SE.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/sv-SE.rc @@ -7,10 +7,12 @@ BEGIN POPUP "&Logg" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "A&vsluta", IDM_EXIT END @@ -34,6 +36,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -68,20 +71,58 @@ BEGIN LTEXT "&Dator:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "&Beskrivning:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "D&ata", IDC_STATIC, 8, 169, 20, 8 CONTROL "&Byte", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "&Ord", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "&Hjälp", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "&Stäng", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "&Stäng", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -90,10 +131,18 @@ BEGIN IDS_APP_TITLE "Händelselogg" IDS_APP_TITLE_EX "%s - %s Log on \\\\" IDS_STATUS_MSG "%s has %lu event(s)" + IDS_LOADING_WAIT "Laddar in Händelseloggen. Vänligen vänta..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "Beskrivning av Händelse ID ( %lu ) i källan ( %s ) kan inte hittas. Lokal dator har inte nödvendig registerinformation eller meddelander DLL filer for å vise meddelander från en fjärr dator.\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" + IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Fel" IDS_EVENTLOG_WARNING_TYPE "Varning" IDS_EVENTLOG_INFORMATION_TYPE "Information" @@ -101,8 +150,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Revision misslyckades" IDS_EVENTLOG_SUCCESS "Uppgift lyckades" IDS_EVENTLOG_UNKNOWN_TYPE "Okänd händelse" - IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" - IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/tr-TR.rc b/reactos/base/applications/mscutils/eventvwr/lang/tr-TR.rc index 276a35000e4..858cab04f64 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/tr-TR.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/tr-TR.rc @@ -13,10 +13,12 @@ BEGIN POPUP "&Kayıt" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "&Olay Kaydını Ayrı Sakla...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "&Olay Kaydını Ayrı Sakla...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "&Tüm Olayları Sil", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "&Tüm Olayları Sil", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "&Çıkış", IDM_EXIT END @@ -40,6 +42,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -74,20 +77,58 @@ BEGIN LTEXT "Bilgisayar:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "Açıklama:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "Veri:", IDC_STATIC, 8, 169, 20, 8 CONTROL "&Çoklu", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "Sö&zcük", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "&Yardım", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "&Kapat", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "&Kapat", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -96,10 +137,18 @@ BEGIN IDS_APP_TITLE "Olay Görüntüleyicisi" IDS_APP_TITLE_EX "%s - %s Oturum Aç \\\\" IDS_STATUS_MSG "%s -> %lu olay var." + IDS_LOADING_WAIT "Olay kayıtları yükleniyor. Lütfen bekleyiniz..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "( %s ) kaynağındaki ( %lu ) olay kimliği için açıklama bulunamıyor. Yerli bilgisayarda, uzak bilgisayardan iletileri görüntülemesi için gerekli Değer Defteri bilgisi veyâ ileti DLL kütükleri olmayabilir.\n\nAşağıdaki bilgi olayın parçasıdır:\n\n" + IDS_CLEAREVENTS_MSG "Silmeden önce bu olay kaydını saklamak ister misiniz?" + IDS_SAVE_FILTER "Olay Kaydı (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Yanlışlık" IDS_EVENTLOG_WARNING_TYPE "Uyarı" IDS_EVENTLOG_INFORMATION_TYPE "Bilgi" @@ -107,8 +156,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Başarısızlık Denetimi" IDS_EVENTLOG_SUCCESS "Başarı" IDS_EVENTLOG_UNKNOWN_TYPE "Bilinmeyen Olay" - IDS_CLEAREVENTS_MSG "Silmeden önce bu olay kaydını saklamak ister misiniz?" - IDS_SAVE_FILTER "Olay Kaydı (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/uk-UA.rc b/reactos/base/applications/mscutils/eventvwr/lang/uk-UA.rc index 68b909776b2..e2cef94a102 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/uk-UA.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/uk-UA.rc @@ -7,10 +7,12 @@ BEGIN POPUP "&Звіт" BEGIN MENUITEM "&Open...", IDM_OPEN_EVENTLOG - MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save &Event Log as...", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "C&lear all Events", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Se&ttings...", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "В&ихід", IDM_EXIT END @@ -34,6 +36,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -68,20 +71,58 @@ BEGIN LTEXT "Ко&мп'ютер:", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "&Опис:", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "Д&aта", IDC_STATIC, 8, 169, 20, 8 CONTROL "&Байт", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "&Слово", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "&Допомога", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "&Закрити", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "&Закрити", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -90,10 +131,18 @@ BEGIN IDS_APP_TITLE "Оглядач подій" IDS_APP_TITLE_EX "%s - %s Log on \\\\" IDS_STATUS_MSG "%s has %lu event(s)" + IDS_LOADING_WAIT "Завантаження Звіту подій. Будь ласка, зачекайте..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "Опис для Ідентифікатора події( %lu ) за джерелом ( %s ) не знайдено. Локальний комп'ютер може не мати необхідної інформації в реєстрі чи DLL файлів повідомлень для відображення повідомлень, що надходять від віддаленого комп'ютера.\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" + IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "Помилка" IDS_EVENTLOG_WARNING_TYPE "Попередження" IDS_EVENTLOG_INFORMATION_TYPE "Повідомлення" @@ -101,8 +150,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "Аудит відмов" IDS_EVENTLOG_SUCCESS "Успіх" IDS_EVENTLOG_UNKNOWN_TYPE "Невідома подія" - IDS_CLEAREVENTS_MSG "Do you want to save this event log before clearing it?" - IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/zh-CN.rc b/reactos/base/applications/mscutils/eventvwr/lang/zh-CN.rc index fa88d10fa35..f387f6aa22c 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/zh-CN.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/zh-CN.rc @@ -7,10 +7,12 @@ BEGIN POPUP "日志(&L)" BEGIN MENUITEM "Open...(&O)", IDM_OPEN_EVENTLOG - MENUITEM "Save Event Log as...(&E)", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save Event Log as...(&E)", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "清除所有事件(&L)", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Settings...(&T)", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "清除所有事件(&L)", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Settings...(&T)", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "退出(&X)", IDM_EXIT END @@ -34,6 +36,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -68,20 +71,58 @@ BEGIN LTEXT "计算机(&C):", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "描述(&D):", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "数据(&A)", IDC_STATIC, 8, 169, 20, 8 CONTROL "字节(&B)", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "字(&W)", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "帮助(&H)", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "关闭(&C)", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "关闭(&C)", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -90,10 +131,18 @@ BEGIN IDS_APP_TITLE "事件查看器" IDS_APP_TITLE_EX "%s - %s Log on \\\\" IDS_STATUS_MSG "%s has %lu event(s)" + IDS_LOADING_WAIT "正在载入日志。请稍候..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "来源 ( %s ) 中的事件 ID ( %lu ) 的描述无法找到。本地计算机可能没有显示来自远程计算机消息所必需的注册表信息或消息 DLL 文件。\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "你想要在清除之前保存此事件日志吗?" + IDS_SAVE_FILTER "事件日志 (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "错误" IDS_EVENTLOG_WARNING_TYPE "警告" IDS_EVENTLOG_INFORMATION_TYPE "信息" @@ -101,8 +150,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "审核失败" IDS_EVENTLOG_SUCCESS "成功" IDS_EVENTLOG_UNKNOWN_TYPE "未知事件" - IDS_CLEAREVENTS_MSG "你想要在清除之前保存此事件日志吗?" - IDS_SAVE_FILTER "事件日志 (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/lang/zh-TW.rc b/reactos/base/applications/mscutils/eventvwr/lang/zh-TW.rc index 4a0852c79f6..65f6d340e66 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/zh-TW.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/zh-TW.rc @@ -7,10 +7,12 @@ BEGIN POPUP "日誌(&L)" BEGIN MENUITEM "Open...(&O)", IDM_OPEN_EVENTLOG - MENUITEM "Save Event Log as...(&E)", IDM_SAVE_EVENTLOG, GRAYED + MENUITEM "Save Event Log as...(&E)", IDM_SAVE_EVENTLOG + MENUITEM "Close", IDM_CLOSE_EVENTLOG MENUITEM SEPARATOR - MENUITEM "清除所有事件(&L)", IDM_CLEAR_EVENTS, GRAYED - MENUITEM "Log Settings...(&T)", IDM_EVENTLOG_SETTINGS, GRAYED + MENUITEM "清除所有事件(&L)", IDM_CLEAR_EVENTS + MENUITEM "&Rename\tF2", IDM_RENAME_EVENTLOG + MENUITEM "Log Settings...(&T)", IDM_EVENTLOG_SETTINGS MENUITEM SEPARATOR MENUITEM "退出(&X)", IDM_EXIT END @@ -34,6 +36,7 @@ IDA_EVENTVWR ACCELERATORS BEGIN "?", IDM_ABOUT, ASCII, ALT "/", IDM_ABOUT, ASCII, ALT + VK_F2, IDM_RENAME_EVENTLOG, VIRTKEY VK_F5, IDM_REFRESH, VIRTKEY END @@ -68,20 +71,58 @@ BEGIN LTEXT "電腦(&C):", IDC_STATIC, 8, 45, 36, 8 EDITTEXT IDC_EVENTCOMPUTERSTATIC, 46, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - PUSHBUTTON "", IDC_PREVIOUS, 225, 5, 28, 14, BS_ICON - PUSHBUTTON "", IDC_NEXT, 225, 21, 28, 14, BS_ICON - PUSHBUTTON "", IDC_COPY, 225, 37, 28, 14, BS_ICON + PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDC_NEXT, 230, 21, 28, 14, BS_ICON + PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON LTEXT "描述(&D):", IDC_STATIC, 8, 65, 39, 8 - CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 247, 88 + CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88 LTEXT "資料(&A)", IDC_STATIC, 8, 169, 20, 8 CONTROL "位元組(&B)", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8 CONTROL "位元(&W)", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8 - EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER PUSHBUTTON "説明(&H)", IDHELP, 8, 228, 50, 14 - DEFPUSHBUTTON "關閉(&C)", IDOK, 206, 228, 50, 14 + DEFPUSHBUTTON "關閉(&C)", IDOK, 208, 228, 50, 14 +END + +IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Display name:", IDC_STATIC, 7, 9, 60, 8 + EDITTEXT IDC_DISPLAYNAME, 67, 7, 178, 12, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "&Log name:", IDC_STATIC, 7, 25, 60, 8 + EDITTEXT IDC_LOGNAME, 67, 23, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Log &file:", IDC_STATIC, 7, 41, 60, 8 + EDITTEXT IDC_LOGFILE, 67, 39, 178, 12, ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP + LTEXT "Size:", IDC_STATIC, 7, 57, 60, 8 + EDITTEXT IDC_SIZE_LABEL, 67, 57, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Created:", IDC_STATIC, 7, 69, 60, 8 + EDITTEXT IDC_CREATED_LABEL, 67, 69, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Modified:", IDC_STATIC, 7, 81, 60, 8 + EDITTEXT IDC_MODIFIED_LABEL, 67, 81, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Accessed:", IDC_STATIC, 7, 93, 60, 8 + EDITTEXT IDC_ACCESSED_LABEL, 67, 93, 178, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + GROUPBOX "Log size", IDC_STATIC, 7, 106, 238, 99 + LTEXT "&Maximum log size:", IDC_STATIC, 17, 122, 58, 8 + EDITTEXT IDC_EDIT_MAXLOGSIZE, 80, 119, 40, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_MAXLOGSIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 120, 119, 10, 14 + LTEXT "KB", IDC_STATIC, 130, 122, 20, 8 + LTEXT "When maximum log size is reached:", IDC_STATIC, 17, 140, 219, 8 + CONTROL "&Overwrite events as needed", IDC_OVERWRITE_AS_NEEDED, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 155, 219, 10 + CONTROL "O&verwrite events older than", IDC_OVERWRITE_OLDER_THAN, "Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 17, 168, 102, 10 + EDITTEXT IDC_EDIT_EVENTS_AGE, 122, 165, 35, 14, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "", IDC_UPDOWN_EVENTS_AGE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | + UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_GROUP, 157, 165, 10, 14 + LTEXT "days", IDC_STATIC, 162, 168, 20, 8 + CONTROL "Do ¬ overwrite events\n(clear log manually)", IDC_NO_OVERWRITE, "Button", BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP | WS_TABSTOP, 17, 180, 143, 20 + PUSHBUTTON "&Restore Defaults", IDC_RESTOREDEFAULTS, 166, 183, 70, 14 + AUTOCHECKBOX "Using a lo&w-speed connection", IDC_LOW_SPEED_CONNECTION, 7, 217, 167, 10 + PUSHBUTTON "&Clear Log", ID_CLEARLOG, 195, 213, 50, 14 END STRINGTABLE @@ -90,10 +131,18 @@ BEGIN IDS_APP_TITLE "事件檢視器" IDS_APP_TITLE_EX "%s - %s Log on \\\\" IDS_STATUS_MSG "%s has %lu event(s)" + IDS_LOADING_WAIT "正在載入日誌。 請稍候..." + IDS_NO_ITEMS "There are no items to show in this view." // "No events in this log." IDS_EVENTLOG_SYSTEM "System Logs" IDS_EVENTLOG_APP "Application Logs" IDS_EVENTLOG_USER "User Logs" IDS_EVENTSTRINGIDNOTFOUND "來源 ( %s ) 中的事件 ID ( %lu ) 的描述無法找到。 本地電腦可能沒有顯示來自遠端電腦消息所必需的註冊表資訊或消息 DLL 檔。\n\nThe following information is part of the event:\n\n" + IDS_CLEAREVENTS_MSG "你想要在清除之前保存此事件日誌嗎?" + IDS_SAVE_FILTER "事件日誌 (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN IDS_EVENTLOG_ERROR_TYPE "錯誤" IDS_EVENTLOG_WARNING_TYPE "警告" IDS_EVENTLOG_INFORMATION_TYPE "資訊" @@ -101,8 +150,12 @@ BEGIN IDS_EVENTLOG_AUDIT_FAILURE "審核失敗" IDS_EVENTLOG_SUCCESS "成功" IDS_EVENTLOG_UNKNOWN_TYPE "未知事件" - IDS_CLEAREVENTS_MSG "你想要在清除之前保存此事件日誌嗎?" - IDS_SAVE_FILTER "事件日誌 (*.evt)\0*.evt\0" +END + +STRINGTABLE +BEGIN + IDS_BYTES_FORMAT "bytes" // "%s bytes" + // "%1!ls! (%2!ls! bytes)" END STRINGTABLE diff --git a/reactos/base/applications/mscutils/eventvwr/res/COPYING b/reactos/base/applications/mscutils/eventvwr/res/COPYING new file mode 100644 index 00000000000..52cc7f2dd0b --- /dev/null +++ b/reactos/base/applications/mscutils/eventvwr/res/COPYING @@ -0,0 +1,15 @@ +COPYING file for key.ico and lock.ico +------------------------------------- + +Farm-Fresh Icon Set +FatCow Web Hosting - http://www.fatcow.com/ + +Terms of Use +============ +These icon sets are licensed under a Creative Commons Attribution 3.0 License. +This means you can freely use these icons for any purpose, private and commercial, +including online services, templates, themes and software. However, you should +include a link to this page (http://www.fatcow.com/free-icons) in your credits +(software or website). The icons may not be resold, sub-licensed, rented, transferred +or otherwise made available for use. Please link to this page on fatcow.com if you +would like to spread the word. diff --git a/reactos/base/applications/mscutils/eventvwr/res/key.ico b/reactos/base/applications/mscutils/eventvwr/res/key.ico new file mode 100644 index 0000000000000000000000000000000000000000..cd67c9052d2c51a4f228d44cb9b134f5c1cf9611 GIT binary patch literal 2550 zcmeH}T}+!*7{~v!64Y=(&}GrZrI}7Qi4>?zWRw!I4UDgtUHB25iHUAAIvm}gzy_t8 z(?m0q#fZqZ8{?HXy3z767|hAC3@E{c$fqI~>V+4WAeOD|-+xQnu?o&xlbz(rInVPx z=Q-y+@0)<(LYMfQ$f!XOrPMrsq#t!5(bRoB)6FZu^k>A*b0#`TkTs#_FY>-)ipof84aOojMzV+ zeui-Ta07?NZlHQBi0X+TYGid20UVhOqIQ;WeQ^=)FE633cM7Narg6G|8qG5yy!SI# z9O#|lofG(fodEgI|JPtJBuPHv&G2M;`UA;v7pWVbcszY&LfVFm3`5d=H#5>UW@l$7 zt(cOwF>ia`Bgx74mPC{8Hx`+;Y}xwg`m|^u$+E4;Znv4%M>CSQSJ*2mDk`_7EGMK` z?DpJE##~#>x7qBQq;179-(s_c{i3K}YP4C+Mq|$A^5_B&8qHR#W%EN(7bs0p3qK7X zL9)ycHJAGSCSX=CFmC|-(#W`FX&g4i0(urw&aFCYj4V(n4PK?06-%^L(pC?dYP^(2 z)8sfu=`%BHz1nG{-s%$)qSAIsHz^IJG?db5O5ejZ{!`1U@%|<~r*xRoAve@;B$uFHN(ziF!en&w&$#g(}N$Uv342nY( zvnXa!yrLLJF_3vjJilwg+WV+!r&z=ndlxDGux>oS`iTH*$3qm?D26io?bB`XMH2=& zP7lR6HcyAxG!>+4nr!}&bpJ$(O?F3*(S_fcExgvgFHMLjF?zSahYYG4N=VG zfeA9dv2)FTMEvK$DQdp~IwwOE*O_~`^Wi*Md8?0NCoNiI)x{OmeS+dK9eQVn_MrPf z{2P|HjZj>s)qQ@=`T0%V?ozFDKzpbf4^sSRY3ne{KOdp)0IWPS%EDtk?zPqr$5rDO z-9e~(1NVpP%#gY#Q1=lQ9_{({-{!`i6&yY9)_sW9ur8=+pa1{> literal 0 HcmV?d00001 diff --git a/reactos/base/applications/mscutils/eventvwr/res/lock.ico b/reactos/base/applications/mscutils/eventvwr/res/lock.ico new file mode 100644 index 0000000000000000000000000000000000000000..99023ef9b7e2c04cbc0183518bc1b6a564d9f435 GIT binary patch literal 2550 zcmeH}eN5DK9LL{0bs(E?4?J}dc=IYN+m%tQkRcsPi%mvr{@FkM;bs$ZVJn5DwRkvB z9zsGq5US1QLMqa+k6kZd&f>HYZu?evG`pZ(!?d*AQ#@csP0 zcfW)8>wpMEA~6xX#$tO6a2K$YXJUIaaFDfov_@r8y3beA4ARpW40e}ROmDZn2@OkI%iG_2KANU8n`X*CmY)K0_FG>N!|AXYa` zz;<{Fw$^Xp2z(3ckr_DJzQ@M?1r&6i$F}1au&MtKY#LZV(eOM9hOeUFte|N0Dz=Tz zXm6ttasRegY!0!W*>5S}d_#e6?#k{(g_g&E@et7;oecxLj-9?zJx01|v^+ zXuZcB73KD#&xSPCI(=J=J=}ZEFcW)ukI+MfzA0Ni6S1{U z3%%Bm##-}^h|p7oesB5%q4x{DSK=E(LcbRJwIsF87}8j4aSb7%7YkWonkO@aUM=~9 zf63-yo^j+mA$JUEthKy>1)+Zn8DpAHt{4(}yu{T9jk6qWH0i<}hBVgmEp01!`zNA!sYM$ReCS-$M=AxDKAmD_73ge;Ym zny+2bw$E1H#`EhBVgN3R`c=W7LPj JJto{|{sxA#Yd8P^ literal 0 HcmV?d00001 diff --git a/reactos/base/applications/mscutils/eventvwr/resource.h b/reactos/base/applications/mscutils/eventvwr/resource.h index abef9185276..56645a1672b 100644 --- a/reactos/base/applications/mscutils/eventvwr/resource.h +++ b/reactos/base/applications/mscutils/eventvwr/resource.h @@ -5,12 +5,14 @@ #define IDI_EVENTLOG 11 #define IDI_CLOSED_CATEGORY 12 #define IDI_OPENED_CATEGORY 13 -#define IDI_WARNINGICON 14 -#define IDI_INFORMATIONICON 15 +#define IDI_INFORMATIONICON 14 +#define IDI_WARNINGICON 15 #define IDI_ERRORICON 16 -#define IDI_NEXT 17 -#define IDI_PREV 18 -#define IDI_COPY 19 +#define IDI_AUDITSUCCESSICON 17 +#define IDI_AUDITFAILUREICON 18 +#define IDI_NEXT 19 +#define IDI_PREV 20 +#define IDI_COPY 21 /* Accelerator IDs */ @@ -20,6 +22,7 @@ /* Dialog IDs */ #define IDD_PROGRESSBOX 101 #define IDD_EVENTPROPERTIES 102 +#define IDD_LOGPROPERTIES_GENERAL 103 /* Control IDs */ @@ -39,32 +42,55 @@ #define IDC_BYTESRADIO 1012 #define IDC_WORDRADIO 1013 #define IDC_EVENTDATAEDIT 1014 - +#define IDC_DISPLAYNAME 1015 +#define IDC_LOGNAME 1016 +#define IDC_LOGFILE 1017 +#define IDC_SIZE_LABEL 1018 +#define IDC_CREATED_LABEL 1019 +#define IDC_MODIFIED_LABEL 1020 +#define IDC_ACCESSED_LABEL 1021 +#define IDC_EDIT_MAXLOGSIZE 1022 +#define IDC_UPDOWN_MAXLOGSIZE 1023 +#define IDC_OVERWRITE_AS_NEEDED 1024 +#define IDC_OVERWRITE_OLDER_THAN 1025 +#define IDC_EDIT_EVENTS_AGE 1026 +#define IDC_UPDOWN_EVENTS_AGE 1027 +#define IDC_NO_OVERWRITE 1028 +#define IDC_RESTOREDEFAULTS 1029 +#define IDC_LOW_SPEED_CONNECTION 1030 +#define ID_CLEARLOG 1031 /* Menu IDs */ #define IDM_EVENTVWR 32770 #define IDM_OPEN_EVENTLOG 32771 #define IDM_SAVE_EVENTLOG 32772 -#define IDM_CLEAR_EVENTS 32773 -#define IDM_EVENTLOG_SETTINGS 32774 -#define IDM_EXIT 32775 -#define IDM_LIST_NEWEST 32776 -#define IDM_LIST_OLDEST 32777 -#define IDM_REFRESH 32778 -#define IDM_OPTIONS 32779 -#define IDM_HELP 32780 -#define IDM_ABOUT 32781 +#define IDM_CLOSE_EVENTLOG 32773 +#define IDM_CLEAR_EVENTS 32774 +#define IDM_RENAME_EVENTLOG 32775 +#define IDM_EVENTLOG_SETTINGS 32776 +#define IDM_EXIT 32777 +#define IDM_LIST_NEWEST 32778 +#define IDM_LIST_OLDEST 32779 +#define IDM_REFRESH 32780 +#define IDM_OPTIONS 32781 +#define IDM_HELP 32782 +#define IDM_ABOUT 32783 /* String IDs */ #define IDS_COPYRIGHT 102 #define IDS_APP_TITLE 103 #define IDS_APP_TITLE_EX 104 -#define IDS_STATUS_MSG 106 -#define IDS_EVENTLOG_SYSTEM 107 -#define IDS_EVENTLOG_APP 108 -#define IDS_EVENTLOG_USER 109 +#define IDS_STATUS_MSG 105 +#define IDS_LOADING_WAIT 106 +#define IDS_NO_ITEMS 107 +#define IDS_EVENTLOG_SYSTEM 108 +#define IDS_EVENTLOG_APP 109 +#define IDS_EVENTLOG_USER 110 #define IDS_EVENTSTRINGIDNOTFOUND 209 +#define IDS_CLEAREVENTS_MSG 210 +#define IDS_SAVE_FILTER 211 + #define IDS_EVENTLOG_ERROR_TYPE 251 #define IDS_EVENTLOG_WARNING_TYPE 252 #define IDS_EVENTLOG_INFORMATION_TYPE 253 @@ -72,8 +98,8 @@ #define IDS_EVENTLOG_AUDIT_FAILURE 255 #define IDS_EVENTLOG_SUCCESS 256 #define IDS_EVENTLOG_UNKNOWN_TYPE 257 -#define IDS_CLEAREVENTS_MSG 258 -#define IDS_SAVE_FILTER 259 + +#define IDS_BYTES_FORMAT 260 #define IDS_COLUMNTYPE 300 #define IDS_COLUMNDATE 301