https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1afc87ee572d4306564ea5fb1e8a325f0fee89a9

commit 1afc87ee572d4306564ea5fb1e8a325f0fee89a9
Author:     Hermès Bélusca-Maïto <hermes.belusca-ma...@reactos.org>
AuthorDate: Thu Apr 12 02:45:37 2018 +0200
Commit:     Hermès Bélusca-Maïto <hermes.belusca-ma...@reactos.org>
CommitDate: Thu Apr 12 02:45:37 2018 +0200

    [EVENTVWR] Add support for a command-line for the Event Log Viewer.
    CORE-12269
    
    - Add support for '/?' and '/l:' switches. The former displays usage
      information. The latter allows to specify an event log file to load.
      Also one can specify the computer name from which one wants to
      retrieve events for display (work in progress).
    - In EnumEventsThread(), move around the code that updates the
      application title and status bar, so that the selected event log name
      and loading status is always displayed first, while loading itself is
      in progress.
---
 base/applications/mscutils/eventvwr/eventvwr.c    | 294 ++++++++++++++++++++--
 base/applications/mscutils/eventvwr/lang/bg-BG.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/cs-CZ.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/de-DE.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/el-GR.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/en-US.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/es-ES.rc |  20 +-
 base/applications/mscutils/eventvwr/lang/fr-FR.rc |  36 ++-
 base/applications/mscutils/eventvwr/lang/he-IL.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/it-IT.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/ja-JP.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/ko-KR.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/no-NO.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/pl-PL.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/pt-BR.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/ro-RO.rc |  20 +-
 base/applications/mscutils/eventvwr/lang/ru-RU.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/sk-SK.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/sq-AL.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/sv-SE.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/tr-TR.rc |  18 ++
 base/applications/mscutils/eventvwr/lang/uk-UA.rc |  20 +-
 base/applications/mscutils/eventvwr/lang/zh-CN.rc |  36 ++-
 base/applications/mscutils/eventvwr/lang/zh-TW.rc |  36 ++-
 base/applications/mscutils/eventvwr/resource.h    |   2 +
 25 files changed, 715 insertions(+), 55 deletions(-)

diff --git a/base/applications/mscutils/eventvwr/eventvwr.c 
b/base/applications/mscutils/eventvwr/eventvwr.c
index c184bb2a6a..6801b275e4 100644
--- a/base/applications/mscutils/eventvwr/eventvwr.c
+++ b/base/applications/mscutils/eventvwr/eventvwr.c
@@ -87,6 +87,10 @@ HMENU hMainMenu;                            /* The 
application's main menu */
 
 HTREEITEM htiSystemLogs = NULL, htiAppLogs = NULL, htiUserLogs = NULL;
 
+LPWSTR lpComputerName = NULL;       /* NULL: local user computer (default) */
+LPWSTR lpszzUserLogsToLoad = NULL;  /* The list of user logs to load at 
startup (multi-string) */
+SIZE_T cbUserLogsSize = 0;
+
 
 /* Global event records cache for the current active event log filter */
 DWORD g_TotalRecords = 0;
@@ -118,6 +122,8 @@ OPENFILENAMEW sfn;
 static DWORD WINAPI
 StartStopEnumEventsThread(IN LPVOID lpParameter);
 
+VOID OpenUserEventLogFile(IN LPCWSTR lpszFileName);
+
 VOID BuildLogListAndFilterList(IN LPCWSTR lpComputerName);
 VOID FreeLogList(VOID);
 VOID FreeLogFilterList(VOID);
@@ -155,6 +161,184 @@ ShowWin32Error(IN DWORD dwError)
     LocalFree(lpMessageBuffer);
 }
 
+VOID
+DisplayUsage(VOID)
+{
+    LPWSTR lpBuffer;
+    LPCWSTR lpUsage;
+    INT iUsageLen = LoadStringW(hInst, IDS_USAGE, (LPWSTR)&lpUsage, 0);
+
+    if (iUsageLen == 0)
+        return;
+
+    lpBuffer = HeapAlloc(GetProcessHeap(), 0, (iUsageLen + 1) * sizeof(WCHAR));
+    if (!lpBuffer)
+        return;
+
+    StringCchCopyNW(lpBuffer, iUsageLen + 1, lpUsage, iUsageLen);
+    MessageBoxW(NULL, lpBuffer, szTitle, MB_OK | MB_ICONINFORMATION);
+
+    HeapFree(GetProcessHeap(), 0, lpBuffer);
+}
+
+BOOL
+ProcessCmdLine(IN LPWSTR lpCmdLine)
+{
+    BOOL Success = FALSE;
+    INT i, argc;
+    LPWSTR* argv;
+
+    /* Skip any leading whitespace */
+    if (lpCmdLine)
+    {
+        while (iswspace(*lpCmdLine))
+            ++lpCmdLine;
+    }
+
+    /* No command line means no processing needed */
+    if (!lpCmdLine || !*lpCmdLine)
+        return TRUE;
+
+    /* Build the arguments vector */
+    argv = CommandLineToArgvW(lpCmdLine, &argc);
+    if (!argv)
+        return FALSE;
+
+    /* Parse the command line for options (skip the program name) */
+    for (i = 1; i < argc; ++i)
+    {
+        /* Check for new options */
+        if (argv[i][0] == L'-' || argv[i][0] == L'/')
+        {
+            if (argv[i][1] == L'?' && argv[i][2] == 0)
+            {
+                /* Display help */
+                DisplayUsage();
+                goto Quit;
+            }
+            else
+            if (argv[i][2] == L':')
+            {
+                switch (towupper(argv[i][1]))
+                {
+                    case L'L':
+                    {
+                        LPWSTR lpNewBuffer;
+                        LPWSTR lpFileName = argv[i] + 3;
+                        SIZE_T cbFileName;
+
+                        /* Check for a quoted file name */
+                        if (*lpFileName == L'\"')
+                        {
+                            /* Skip this quote, and the last one too if any */
+                            ++lpFileName;
+                            cbFileName = wcslen(lpFileName);
+                            if (cbFileName > 0 && lpFileName[cbFileName - 1] 
== L'\"')
+                                lpFileName[cbFileName - 1] = UNICODE_NULL;
+                        }
+
+                        /* Skip this one if we do not actually have a file 
name */
+                        if (!*lpFileName)
+                            continue;
+
+                        cbFileName = (wcslen(lpFileName) + 1) * sizeof(WCHAR);
+
+                        /* Reallocate the list of user logs to load */
+                        if (lpszzUserLogsToLoad)
+                        {
+                            lpNewBuffer = HeapReAlloc(GetProcessHeap(),
+                                                      HEAP_ZERO_MEMORY,
+                                                      lpszzUserLogsToLoad,
+                                                      /* Count the 
multi-string NULL-terminator */
+                                                      cbUserLogsSize + 
cbFileName + sizeof(WCHAR));
+                        }
+                        else
+                        {
+                            cbUserLogsSize = 0;
+                            lpNewBuffer = HeapAlloc(GetProcessHeap(),
+                                                    HEAP_ZERO_MEMORY,
+                                                    /* Count the multi-string 
NULL-terminator */
+                                                    cbUserLogsSize + 
cbFileName + sizeof(WCHAR));
+                        }
+
+                        if (!lpNewBuffer)
+                        {
+                            ShowWin32Error(ERROR_NOT_ENOUGH_MEMORY);
+                            goto Quit;
+                        }
+
+                        lpszzUserLogsToLoad = lpNewBuffer;
+                        lpNewBuffer = (LPWSTR)((ULONG_PTR)lpNewBuffer + 
cbUserLogsSize);
+                        cbUserLogsSize += cbFileName;
+
+                        /* Save the file name */
+                        StringCbCopyW(lpNewBuffer, cbFileName, lpFileName);
+
+                        continue;
+                    }
+
+                    default:
+                        break;
+                }
+            }
+
+            /* Unknown argument: display help and bail out */
+            DisplayUsage();
+            goto Quit;
+        }
+        else
+        {
+            /*
+             * An argument that does not start with the switch character.
+             * If this is the first argument then this corresponds to the
+             * optional computer name. Otherwise this is a wrong argument.
+             */
+            if (i == 1)
+            {
+                /* Store the computer name */
+                SIZE_T cbLength;
+
+                cbLength = (wcslen(argv[i]) + 1) * sizeof(WCHAR);
+                lpComputerName = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 
cbLength);
+                if (lpComputerName)
+                {
+                    StringCbCopyW(lpComputerName, cbLength, argv[i]);
+                }
+                /* else, fall back to local computer */
+            }
+            else
+            {
+                /* Invalid syntax: display help and bail out */
+                DisplayUsage();
+                goto Quit;
+            }
+        }
+    }
+
+    Success = TRUE;
+
+Quit:
+    /* In case of failure, free anything we have allocated */
+    if (!Success)
+    {
+        if (lpszzUserLogsToLoad)
+        {
+            cbUserLogsSize = 0;
+            HeapFree(GetProcessHeap(), 0, lpszzUserLogsToLoad);
+            lpszzUserLogsToLoad = NULL;
+        }
+        if (lpComputerName)
+        {
+            HeapFree(GetProcessHeap(), 0, lpComputerName);
+            lpComputerName = NULL;
+        }
+    }
+
+    /* Free the arguments vector and exit */
+    LocalFree(argv);
+    return Success;
+}
+
 int APIENTRY
 wWinMain(HINSTANCE hInstance,
          HINSTANCE hPrevInstance,
@@ -194,6 +378,14 @@ wWinMain(HINSTANCE hInstance,
     LoadStringW(hInstance, IDS_LOADING_WAIT, szLoadingWait, 
ARRAYSIZE(szLoadingWait));
     LoadStringW(hInstance, IDS_NO_ITEMS, szEmptyList, ARRAYSIZE(szEmptyList));
 
+    /*
+     * Process the command-line arguments. Note that we need the full
+     * command-line, with the program file included, and not just what
+     * WinMain() provides in its lpCmdLine parameter.
+     */
+    if (!ProcessCmdLine(GetCommandLineW()))
+        goto Quit;
+
     if (!MyRegisterClass(hInstance))
         goto Quit;
 
@@ -223,12 +415,22 @@ wWinMain(HINSTANCE hInstance,
     /* 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);
+    BuildLogListAndFilterList(lpComputerName);
 
-    // 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.
+    /* Open the user-specified logs if any are present on the command-line */
+    if (lpszzUserLogsToLoad)
+    {
+        LPWSTR lpUserLog;
+        for (lpUserLog = lpszzUserLogsToLoad; *lpUserLog; lpUserLog += 
wcslen(lpUserLog) + 1)
+        {
+            OpenUserEventLogFile(lpUserLog);
+        }
+
+        /* Now cleanup the list of user logs */
+        cbUserLogsSize = 0;
+        HeapFree(GetProcessHeap(), 0, lpszzUserLogsToLoad);
+        lpszzUserLogsToLoad = NULL;
+    }
 
     /* Main message loop */
     while (GetMessageW(&msg, NULL, 0, 0))
@@ -256,6 +458,18 @@ Cleanup:
         CloseHandle(hStartStopEnumEvent);
 
 Quit:
+    /* Final cleanup */
+    if (lpszzUserLogsToLoad)
+    {
+        cbUserLogsSize = 0;
+        HeapFree(GetProcessHeap(), 0, lpszzUserLogsToLoad);
+        lpszzUserLogsToLoad = NULL;
+    }
+    if (lpComputerName)
+    {
+        HeapFree(GetProcessHeap(), 0, lpComputerName);
+        lpComputerName = NULL;
+    }
     FreeLibrary(hRichEdit);
 
     return (int)msg.wParam;
@@ -1433,7 +1647,6 @@ static DWORD WINAPI
 EnumEventsThread(IN LPVOID lpParameter)
 {
     PEVENTLOGFILTER EventLogFilter = (PEVENTLOGFILTER)lpParameter;
-    LPWSTR lpMachineName = NULL; // EventLogFilter->ComputerName;
     PEVENTLOG EventLog;
 
     ULONG LogIndex;
@@ -1473,6 +1686,54 @@ EnumEventsThread(IN LPVOID lpParameter)
     EventLogFilter_AddRef(EventLogFilter);
     ActiveFilter = EventLogFilter;
 
+
+    /** HACK!! **/
+    EventLog = EventLogFilter->EventLogs[0];
+
+    // 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 (!EventLog->ComputerName)
+            GetComputerNameW(lpTitleTemplateEnd, &dwMaxLength);
+        else
+            StringCchCopyW(lpTitleTemplateEnd, dwMaxLength, 
EventLog->ComputerName);
+
+        StringCbPrintfW(szStatusText,
+                        sizeof(szStatusText),
+                        szStatusBarTemplate,
+                        EventLog->LogName,
+                        0,
+                        0);
+    }
+    else
+    {
+        // 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);
+    }
+
+    /* Set the window title */
+    SetWindowTextW(hwndMainWindow, szWindowTitle);
+
+    /* Update the status bar */
+    StatusBar_SetText(hwndStatus, 0, szStatusText);
+
+
     /* Disable list view redraw */
     SendMessageW(hwndListView, WM_SETREDRAW, FALSE, 0);
 
@@ -1699,18 +1960,6 @@ Cleanup:
      */
     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,
@@ -1722,18 +1971,11 @@ Cleanup:
     {
         // 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 */
     StatusBar_SetText(hwndStatus, 0, szStatusText);
 
-    /* Set the window title */
-    SetWindowTextW(hwndMainWindow, szWindowTitle);
-
     /* Resume list view redraw */
     SendMessageW(hwndListView, WM_SETREDRAW, TRUE, 0);
 
@@ -2240,6 +2482,8 @@ BuildLogListAndFilterList(IN LPCWSTR lpComputerName)
     HTREEITEM hRootNode = NULL, hItem = NULL, hItemDefault = NULL;
 
     /* Open the EventLog key */
+    // TODO: Implement connection to remote computer...
+    // At the moment we only support the user local computer.
     // FIXME: Use local or remote computer
     Result = RegOpenKeyExW(HKEY_LOCAL_MACHINE, EVENTLOG_BASE_KEY, 0, KEY_READ, 
&hEventLogKey);
     if (Result != ERROR_SUCCESS)
diff --git a/base/applications/mscutils/eventvwr/lang/bg-BG.rc 
b/base/applications/mscutils/eventvwr/lang/bg-BG.rc
index 53eda36d8b..5f65551548 100644
--- a/base/applications/mscutils/eventvwr/lang/bg-BG.rc
+++ b/base/applications/mscutils/eventvwr/lang/bg-BG.rc
@@ -142,6 +142,24 @@ BEGIN
     IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Error"
diff --git a/base/applications/mscutils/eventvwr/lang/cs-CZ.rc 
b/base/applications/mscutils/eventvwr/lang/cs-CZ.rc
index 7fcc447c0b..cb2abd9fde 100644
--- a/base/applications/mscutils/eventvwr/lang/cs-CZ.rc
+++ b/base/applications/mscutils/eventvwr/lang/cs-CZ.rc
@@ -142,6 +142,24 @@ BEGIN
     IDS_SAVE_FILTER "Protokol událostí (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Chyba"
diff --git a/base/applications/mscutils/eventvwr/lang/de-DE.rc 
b/base/applications/mscutils/eventvwr/lang/de-DE.rc
index cbfd581e60..b87bddf4fa 100644
--- a/base/applications/mscutils/eventvwr/lang/de-DE.rc
+++ b/base/applications/mscutils/eventvwr/lang/de-DE.rc
@@ -144,6 +144,24 @@ BEGIN
     IDS_SAVE_FILTER "Ereignisprotokoll (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Fehler"
diff --git a/base/applications/mscutils/eventvwr/lang/el-GR.rc 
b/base/applications/mscutils/eventvwr/lang/el-GR.rc
index d013895697..0eafda6725 100644
--- a/base/applications/mscutils/eventvwr/lang/el-GR.rc
+++ b/base/applications/mscutils/eventvwr/lang/el-GR.rc
@@ -144,6 +144,24 @@ BEGIN
     IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Αφάλμα"
diff --git a/base/applications/mscutils/eventvwr/lang/en-US.rc 
b/base/applications/mscutils/eventvwr/lang/en-US.rc
index c1c776e90f..0d4ab4af97 100644
--- a/base/applications/mscutils/eventvwr/lang/en-US.rc
+++ b/base/applications/mscutils/eventvwr/lang/en-US.rc
@@ -150,6 +150,24 @@ BEGIN
     IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Error"
diff --git a/base/applications/mscutils/eventvwr/lang/es-ES.rc 
b/base/applications/mscutils/eventvwr/lang/es-ES.rc
index 992f70768e..5c3da85040 100644
--- a/base/applications/mscutils/eventvwr/lang/es-ES.rc
+++ b/base/applications/mscutils/eventvwr/lang/es-ES.rc
@@ -139,11 +139,29 @@ BEGIN
     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_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
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Error"
diff --git a/base/applications/mscutils/eventvwr/lang/fr-FR.rc 
b/base/applications/mscutils/eventvwr/lang/fr-FR.rc
index ba64ada0e9..cc71f90514 100644
--- a/base/applications/mscutils/eventvwr/lang/fr-FR.rc
+++ b/base/applications/mscutils/eventvwr/lang/fr-FR.rc
@@ -144,6 +144,24 @@ BEGIN
     IDS_SAVE_FILTER "Journal d'événements (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "Visionneuse d'événements ReactOS\n\
+\n\
+EventVwr [nom ordinateur] [/l:<fichier journal>] [/?]\n\
+\n\
+""nom ordinateur"" : Spécifie l'ordinateur distant auquel se connecter\n\
+\tpour récupérer les événements à afficher. Si aucun nom n'est spécifié,\n\
+\tl'ordinateur local est utilisé.\n\
+\n\
+/l:<fichier journal> : Spécifie quel fichier journal ouvrir.\n\
+\tSeuls les fichiers au format .evt (NT ≤ 5.2) sont supportés.\n\
+\n\
+/? : Affiche ce message d'aide.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Erreur"
@@ -175,15 +193,15 @@ END
 
 STRINGTABLE
 BEGIN
-    IDS_COPY "Event Type:     %s\r\n\
-Event Source:   %s\r\n\
-Event Category: %s\r\n\
-Event ID:       %s\r\n\
-Date:           %s\r\n\
-Time:           %s\r\n\
-User:           %s\r\n\
-Computer:       %s\r\n\
-Description:\r\n%s"
+    IDS_COPY "Type d'événement :          %s\r\n\
+Source de l'événement :     %s\r\n\
+Catégorie de l'événement :  %s\r\n\
+ID de l'événement :         %s\r\n\
+Date :                      %s\r\n\
+Heure :                     %s\r\n\
+Utilisateur :               %s\r\n\
+Ordinateur :                %s\r\n\
+Description :\r\n%s"
 END
 
 STRINGTABLE
diff --git a/base/applications/mscutils/eventvwr/lang/he-IL.rc 
b/base/applications/mscutils/eventvwr/lang/he-IL.rc
index f42f474c9d..85e2667ff2 100644
--- a/base/applications/mscutils/eventvwr/lang/he-IL.rc
+++ b/base/applications/mscutils/eventvwr/lang/he-IL.rc
@@ -144,6 +144,24 @@ BEGIN
     IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "שגיאה"
diff --git a/base/applications/mscutils/eventvwr/lang/it-IT.rc 
b/base/applications/mscutils/eventvwr/lang/it-IT.rc
index 24cc8adaed..b86672b388 100644
--- a/base/applications/mscutils/eventvwr/lang/it-IT.rc
+++ b/base/applications/mscutils/eventvwr/lang/it-IT.rc
@@ -144,6 +144,24 @@ BEGIN
     IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Errore"
diff --git a/base/applications/mscutils/eventvwr/lang/ja-JP.rc 
b/base/applications/mscutils/eventvwr/lang/ja-JP.rc
index 29bea7d8c2..817c30e4dd 100644
--- a/base/applications/mscutils/eventvwr/lang/ja-JP.rc
+++ b/base/applications/mscutils/eventvwr/lang/ja-JP.rc
@@ -144,6 +144,24 @@ BEGIN
     IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "エラー"
diff --git a/base/applications/mscutils/eventvwr/lang/ko-KR.rc 
b/base/applications/mscutils/eventvwr/lang/ko-KR.rc
index de0f02fe26..3749b92732 100644
--- a/base/applications/mscutils/eventvwr/lang/ko-KR.rc
+++ b/base/applications/mscutils/eventvwr/lang/ko-KR.rc
@@ -144,6 +144,24 @@ BEGIN
     IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "에러"
diff --git a/base/applications/mscutils/eventvwr/lang/no-NO.rc 
b/base/applications/mscutils/eventvwr/lang/no-NO.rc
index a979794d0d..21944f9d5c 100644
--- a/base/applications/mscutils/eventvwr/lang/no-NO.rc
+++ b/base/applications/mscutils/eventvwr/lang/no-NO.rc
@@ -142,6 +142,24 @@ BEGIN
     IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Feil"
diff --git a/base/applications/mscutils/eventvwr/lang/pl-PL.rc 
b/base/applications/mscutils/eventvwr/lang/pl-PL.rc
index 04a028dd48..5e6cd7de61 100644
--- a/base/applications/mscutils/eventvwr/lang/pl-PL.rc
+++ b/base/applications/mscutils/eventvwr/lang/pl-PL.rc
@@ -146,6 +146,24 @@ BEGIN
     IDS_SAVE_FILTER "Dziennik zdarzeń (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Błąd"
diff --git a/base/applications/mscutils/eventvwr/lang/pt-BR.rc 
b/base/applications/mscutils/eventvwr/lang/pt-BR.rc
index 3e0e30c4ac..e56007504b 100644
--- a/base/applications/mscutils/eventvwr/lang/pt-BR.rc
+++ b/base/applications/mscutils/eventvwr/lang/pt-BR.rc
@@ -144,6 +144,24 @@ BEGIN
     IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Erro"
diff --git a/base/applications/mscutils/eventvwr/lang/ro-RO.rc 
b/base/applications/mscutils/eventvwr/lang/ro-RO.rc
index f479f2ed02..b63ba71def 100644
--- a/base/applications/mscutils/eventvwr/lang/ro-RO.rc
+++ b/base/applications/mscutils/eventvwr/lang/ro-RO.rc
@@ -147,6 +147,24 @@ BEGIN
     IDS_SAVE_FILTER "Jurnal de evenimente (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Eroare"
@@ -186,7 +204,7 @@ Dată:                %s\r\n\
 Oră:                 %s\r\n\
 Utilizator:          %s\r\n\
 Calculator:          %s\r\n\
-Descriere :\r\n%s"
+Descriere:\r\n%s"
 END
 
 STRINGTABLE
diff --git a/base/applications/mscutils/eventvwr/lang/ru-RU.rc 
b/base/applications/mscutils/eventvwr/lang/ru-RU.rc
index b50945b793..e9969417b6 100644
--- a/base/applications/mscutils/eventvwr/lang/ru-RU.rc
+++ b/base/applications/mscutils/eventvwr/lang/ru-RU.rc
@@ -144,6 +144,24 @@ BEGIN
     IDS_SAVE_FILTER "Журнал событий (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Ошибка"
diff --git a/base/applications/mscutils/eventvwr/lang/sk-SK.rc 
b/base/applications/mscutils/eventvwr/lang/sk-SK.rc
index a89594bbe0..aed4e951d8 100644
--- a/base/applications/mscutils/eventvwr/lang/sk-SK.rc
+++ b/base/applications/mscutils/eventvwr/lang/sk-SK.rc
@@ -147,6 +147,24 @@ BEGIN
     IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Chyba"
diff --git a/base/applications/mscutils/eventvwr/lang/sq-AL.rc 
b/base/applications/mscutils/eventvwr/lang/sq-AL.rc
index 897daa8f59..08c7bd0fe3 100644
--- a/base/applications/mscutils/eventvwr/lang/sq-AL.rc
+++ b/base/applications/mscutils/eventvwr/lang/sq-AL.rc
@@ -150,6 +150,24 @@ BEGIN
     IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Error"
diff --git a/base/applications/mscutils/eventvwr/lang/sv-SE.rc 
b/base/applications/mscutils/eventvwr/lang/sv-SE.rc
index b06daf20fb..77e4a321d0 100644
--- a/base/applications/mscutils/eventvwr/lang/sv-SE.rc
+++ b/base/applications/mscutils/eventvwr/lang/sv-SE.rc
@@ -144,6 +144,24 @@ BEGIN
     IDS_SAVE_FILTER "Event Log (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Fel"
diff --git a/base/applications/mscutils/eventvwr/lang/tr-TR.rc 
b/base/applications/mscutils/eventvwr/lang/tr-TR.rc
index 1d1e6925e8..221660b379 100644
--- a/base/applications/mscutils/eventvwr/lang/tr-TR.rc
+++ b/base/applications/mscutils/eventvwr/lang/tr-TR.rc
@@ -150,6 +150,24 @@ BEGIN
     IDS_SAVE_FILTER "Olay Kaydı (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Yanlışlık"
diff --git a/base/applications/mscutils/eventvwr/lang/uk-UA.rc 
b/base/applications/mscutils/eventvwr/lang/uk-UA.rc
index b7d863e252..8a5dc3cbbb 100644
--- a/base/applications/mscutils/eventvwr/lang/uk-UA.rc
+++ b/base/applications/mscutils/eventvwr/lang/uk-UA.rc
@@ -139,11 +139,29 @@ BEGIN
     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_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
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "Помилка"
diff --git a/base/applications/mscutils/eventvwr/lang/zh-CN.rc 
b/base/applications/mscutils/eventvwr/lang/zh-CN.rc
index 510987035c..bcac2394b9 100644
--- a/base/applications/mscutils/eventvwr/lang/zh-CN.rc
+++ b/base/applications/mscutils/eventvwr/lang/zh-CN.rc
@@ -144,6 +144,24 @@ BEGIN
     IDS_SAVE_FILTER "事件日志 (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "错误"
@@ -175,15 +193,15 @@ END
 
 STRINGTABLE
 BEGIN
-    IDS_COPY "事件类型:     %s\r\n\
-事件源:   %s\r\n\
-事件类别: %s\r\n\
-事件 ID:       %s\r\n\
-日期:           %s\r\n\
-时间:           %s\r\n\
-用户:           %s\r\n\
-电脑:       %s\r\n\
-描述:\n%s"
+    IDS_COPY "事件类型:       %s\r\n\
+事件源:        %s\r\n\
+事件类别:       %s\r\n\
+事件 ID:      %s\r\n\
+日期:         %s\r\n\
+时间:         %s\r\n\
+用户:         %s\r\n\
+电脑:         %s\r\n\
+描述:\r\n%s"
 END
 
 STRINGTABLE
diff --git a/base/applications/mscutils/eventvwr/lang/zh-TW.rc 
b/base/applications/mscutils/eventvwr/lang/zh-TW.rc
index 3bed36acd4..b43acc5f84 100644
--- a/base/applications/mscutils/eventvwr/lang/zh-TW.rc
+++ b/base/applications/mscutils/eventvwr/lang/zh-TW.rc
@@ -144,6 +144,24 @@ BEGIN
     IDS_SAVE_FILTER "事件日誌 (*.evt)\0*.evt\0"
 END
 
+STRINGTABLE
+BEGIN
+/* Please note that explicit TAB characters '\t' are used to fix the alignment 
of the message in the MessageBox */
+    IDS_USAGE "ReactOS Event Viewer\n\
+\n\
+EventVwr [computer name] [/l:<event log file>] [/?]\n\
+\n\
+""computer name"" : Specifies the remote computer where to connect\n\
+\tto retrieve the events to display. If no name is specified, the\n\
+\tlocal computer is used.\n\
+\n\
+/l:<event log file> : Specifies which event log file to open.\n\
+\tOnly files in the .evt format (NT ≤ 5.2) are supported.\n\
+\n\
+/? : Displays this help message.\n\
+"
+END
+
 STRINGTABLE
 BEGIN
     IDS_EVENTLOG_ERROR_TYPE "錯誤"
@@ -175,15 +193,15 @@ END
 
 STRINGTABLE
 BEGIN
-    IDS_COPY "事件種類:     %s\r\n\
-事件源:   %s\r\n\
-事件種類: %s\r\n\
-事件 ID:       %s\r\n\
-日期:           %s\r\n\
-時間:           %s\r\n\
-使用者:           %s\r\n\
-電腦:       %s\r\n\
-描述:\n%s"
+    IDS_COPY "事件種類:       %s\r\n\
+事件源:        %s\r\n\
+事件種類:       %s\r\n\
+事件 ID:      %s\r\n\
+日期:         %s\r\n\
+時間:         %s\r\n\
+使用者:        %s\r\n\
+電腦:         %s\r\n\
+描述:\r\n%s"
 END
 
 STRINGTABLE
diff --git a/base/applications/mscutils/eventvwr/resource.h 
b/base/applications/mscutils/eventvwr/resource.h
index 525cce9c55..a5c88a4a05 100644
--- a/base/applications/mscutils/eventvwr/resource.h
+++ b/base/applications/mscutils/eventvwr/resource.h
@@ -93,6 +93,8 @@
 #define IDS_CLEAREVENTS_MSG             110
 #define IDS_SAVE_FILTER                 111
 
+#define IDS_USAGE                       120
+
 #define IDS_EVENTLOG_ERROR_TYPE         200
 #define IDS_EVENTLOG_WARNING_TYPE       201
 #define IDS_EVENTLOG_INFORMATION_TYPE   202

Reply via email to