Index: base/applications/mscutils/eventvwr/eventvwr.c =================================================================== --- base/applications/mscutils/eventvwr/eventvwr.c (revision 65623) +++ base/applications/mscutils/eventvwr/eventvwr.c (working copy) @@ -1438,7 +1438,57 @@ } } +VOID +CopyEventEntry(HWND hWnd) +{ + const SIZE_T entrySize = 2056; + WCHAR output[4130], tmpHeader[512]; + WCHAR szEventType[MAX_PATH]; + WCHAR szSource[MAX_PATH]; + WCHAR szCategory[MAX_PATH]; + WCHAR szEventID[MAX_PATH]; + WCHAR szDate[MAX_PATH]; + WCHAR szTime[MAX_PATH]; + WCHAR szUser[MAX_PATH]; + WCHAR szComputer[MAX_PATH]; + WCHAR evtDesc[entrySize]; + HGLOBAL hMem; + if( !OpenClipboard(hWnd)) + return; + + /* First, empty the clipboard before we begin to use it */ + EmptyClipboard(); + + /* Get the formatted text needed to place the content into */ + LoadStringW(hInst, IDS_COPY, tmpHeader, sizeof(tmpHeader) / sizeof(WCHAR)); + + /* Grabs all the information and get it ready for the clipboard */ + GetDlgItemText(hWnd, IDC_EVENTTYPESTATIC, szEventType, MAX_PATH); + GetDlgItemText(hWnd, IDC_EVENTSOURCESTATIC, szSource, MAX_PATH); + GetDlgItemText(hWnd, IDC_EVENTCATEGORYSTATIC, szCategory, MAX_PATH); + GetDlgItemText(hWnd, IDC_EVENTIDSTATIC, szEventID, MAX_PATH); + GetDlgItemText(hWnd, IDC_EVENTDATESTATIC, szDate, MAX_PATH); + GetDlgItemText(hWnd, IDC_EVENTTIMESTATIC, szTime, MAX_PATH); + GetDlgItemText(hWnd, IDC_EVENTUSERSTATIC, szUser, MAX_PATH); + GetDlgItemText(hWnd, IDC_EVENTCOMPUTERSTATIC, szComputer, MAX_PATH); + GetDlgItemText(hWnd, IDC_EVENTTEXTEDIT, evtDesc, entrySize); + + /* Consolidate the information into on big piece */ + wsprintfW(output, tmpHeader, szEventType, szSource, szCategory, szEventID, szDate, szTime, szUser, szComputer, evtDesc); + + /* Sort out the memory needed to write to the clipboard */ + hMem = GlobalAlloc(GMEM_MOVEABLE, entrySize); + memcpy(GlobalLock(hMem), output, entrySize); + GlobalUnlock(hMem); + + /* Write the final content to the clipboard */ + SetClipboardData(CF_UNICODETEXT, hMem); + + /* Close the clipboard once we're done with it */ + CloseClipboard(); +} + static INT_PTR CALLBACK StatusMessageWindowProc(IN HWND hwndDlg, @@ -1468,10 +1518,20 @@ switch (message) { case WM_INITDIALOG: + { + HANDLE nextIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_NEXT), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); + HANDLE prevIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_PREV), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); + HANDLE copyIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_COPY), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); + + SendMessage(GetDlgItem(hDlg, IDNEXT), BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)nextIcon); + SendMessage(GetDlgItem(hDlg, IDPREVIOUS), BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)prevIcon); + SendMessage(GetDlgItem(hDlg, IDCOPY), BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)copyIcon); + // Show event info on dialog box DisplayEvent(hDlg); + return (INT_PTR)TRUE; - + } case WM_COMMAND: switch (LOWORD(wParam)) { @@ -1493,6 +1553,9 @@ // Show event info on dialog box DisplayEvent(hDlg); return (INT_PTR)TRUE; + case IDCOPY: + CopyEventEntry(hDlg); + return (INT_PTR)TRUE; case IDC_BYTESRADIO: return (INT_PTR)TRUE; Index: base/applications/mscutils/eventvwr/eventvwr.rc =================================================================== --- base/applications/mscutils/eventvwr/eventvwr.rc (revision 65623) +++ base/applications/mscutils/eventvwr/eventvwr.rc (working copy) @@ -18,6 +18,11 @@ IDI_INFORMATIONICON ICON "res/info.ico" IDI_ERRORICON ICON "res/error.ico" +/* Event Navigation */ +IDI_NEXT ICON "res/next_event.ico" +IDI_PREV ICON "res/prev_event.ico" +IDI_COPY ICON "res/copy.ico" + /* UTF-8 */ #pragma code_page(65001) Index: base/applications/mscutils/eventvwr/lang/en-US.rc =================================================================== --- base/applications/mscutils/eventvwr/lang/en-US.rc (revision 65623) +++ base/applications/mscutils/eventvwr/lang/en-US.rc (working copy) @@ -56,38 +56,39 @@ CTEXT "Loading Event Logs. Please wait ...", IDC_STATIC, 0, 15, 230, 8, SS_NOPREFIX END -IDD_EVENTDETAILDIALOG DIALOGEX 0, 0, 276, 282 +IDD_EVENTDETAILDIALOG DIALOGEX 0, 0, 266, 251 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTEXTHELP -CAPTION "Event Detail" +CAPTION "Event Properties" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - DEFPUSHBUTTON "&Close", IDOK, 12, 258, 50, 14 - PUSHBUTTON "&Previous", IDPREVIOUS, 78, 258, 50, 14 - PUSHBUTTON "&Next", IDNEXT, 144, 258, 50, 14 - PUSHBUTTON "&Help", IDHELP, 210, 258, 50, 14 - EDITTEXT IDC_EVENTTEXTEDIT, 14, 81, 247, 108, ES_MULTILINE | ES_READONLY - LTEXT "&Description:", IDC_STATIC, 15, 70, 39, 8 - LTEXT "Date:", IDC_STATIC, 14, 14, 36, 8 - EDITTEXT IDC_EVENTDATESTATIC, 56, 14, 72, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "Time:", IDC_STATIC, 14, 27, 36, 8 - EDITTEXT IDC_EVENTTIMESTATIC, 56, 27, 72, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "&User:", IDC_STATIC, 14, 41, 36, 8 - EDITTEXT IDC_EVENTUSERSTATIC, 56, 41, 72, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "&Computer:", IDC_STATIC, 14, 54, 36, 8 - EDITTEXT IDC_EVENTCOMPUTERSTATIC, 56, 54, 72, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "EventID:", IDC_STATIC, 133, 15, 36, 8 - EDITTEXT IDC_EVENTIDSTATIC, 175, 15, 87, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "Source:", IDC_STATIC, 133, 28, 36, 8 - EDITTEXT IDC_EVENTSOURCESTATIC, 175, 28, 87, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "Type:", IDC_STATIC, 133, 42, 36, 8 - EDITTEXT IDC_EVENTTYPESTATIC, 175, 42, 87, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "Category:", IDC_STATIC, 133, 55, 36, 8 - EDITTEXT IDC_EVENTCATEGORYSTATIC, 175, 55, 87, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL - EDITTEXT IDC_EVENTDATAEDIT, 14, 204, 247, 44, ES_MULTILINE | ES_READONLY - LTEXT "D&ata", IDC_STATIC, 14, 194, 20, 8 - CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 194, 34, 8 - CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 194, 33, 8 + DEFPUSHBUTTON "&Close", IDOK, 206, 228, 50, 14 + PUSHBUTTON "", IDPREVIOUS, 225, 5, 28, 14, BS_ICON + PUSHBUTTON "", IDNEXT, 225, 21, 28, 14, BS_ICON + PUSHBUTTON "&Help", IDHELP, 8, 228, 50, 14 + EDITTEXT IDC_EVENTTEXTEDIT, 8, 76, 247, 88, ES_MULTILINE | ES_READONLY | WS_VSCROLL | WS_BORDER + LTEXT "&Description:", IDC_STATIC, 9, 65, 39, 8 + LTEXT "Date:", IDC_STATIC, 8, 5, 31, 8 + EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Time:", IDC_STATIC, 8, 15, 31, 8 + EDITTEXT IDC_EVENTTIMESTATIC, 46, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "&User:", 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 "&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 + LTEXT "Event 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 "Source:", IDC_STATIC, 103, 5, 36, 8 + EDITTEXT IDC_EVENTSOURCESTATIC, 140, 5, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Type:", IDC_STATIC, 8, 25, 31, 8 + EDITTEXT IDC_EVENTTYPESTATIC, 46, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "Category:", IDC_STATIC, 103, 15, 36, 8 + EDITTEXT IDC_EVENTCATEGORYSTATIC, 140, 15, 82, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 247, 44, ES_MULTILINE | ES_READONLY | WS_VSCROLL | WS_BORDER + 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 + PUSHBUTTON "", IDCOPY, 225, 37, 28, 14, BS_ICON END STRINGTABLE @@ -122,6 +123,19 @@ STRINGTABLE BEGIN + IDS_COPY "Event Type: %s\n\ +Event Source: %s\n\ +Event Category: %s\n\ +Event ID: %s\n\ +Date: %s\n\ +Time: %s\n\ +User: %s\n\ +Computer: %s\n\ +Description:\n%s" +END + +STRINGTABLE +BEGIN IDS_NONE "None" IDS_NOT_AVAILABLE "N/A" END Index: base/applications/mscutils/eventvwr/resource.h =================================================================== --- base/applications/mscutils/eventvwr/resource.h (revision 65623) +++ base/applications/mscutils/eventvwr/resource.h (working copy) @@ -4,7 +4,12 @@ #define IDC_MYICON 2 #define IDNEXT 3 +#define IDCOPY 4 +#define IDI_NEXT 11 +#define IDI_PREV 12 +#define IDI_COPY 13 + #define IDD_EVENTVWR_DIALOG 102 #define IDD_PROGRESSBOX 150 #define IDD_ABOUTBOX 103 @@ -73,5 +78,7 @@ #define IDS_COLUMNCOMPUTER 307 #define IDS_COLUMNEVENTDATA 308 +#define IDS_COPY 400 + #define IDS_NONE 320 #define IDS_NOT_AVAILABLE 321