mirror of
https://github.com/reactos/reactos
synced 2025-10-06 16:32:42 +02:00
Compare commits
75 Commits
ntos/KiWri
...
hbelusca/o
Author | SHA1 | Date | |
---|---|---|---|
|
7cd78a81fb | ||
|
32cacdd7c4 | ||
|
7dbc0e683b | ||
|
dbc0c37750 | ||
|
bfa63932ce | ||
|
5456e195db | ||
|
87eac43fb9 | ||
|
fe6de816d6 | ||
|
f19c62c80e | ||
|
378a335468 | ||
|
9b70d4380c | ||
|
c27a2fc7cb | ||
|
f8efb5d474 | ||
|
d1aa59982d | ||
|
a6558c0562 | ||
|
bd2d3b8603 | ||
|
0a6bcfc9ff | ||
|
8b6907f2a6 | ||
|
85afe48c3e | ||
|
efbdd483b3 | ||
|
7eb8535edf | ||
|
78e04c07b8 | ||
|
e452980e0e | ||
|
35fd771c84 | ||
|
faaac75546 | ||
|
f1f01771b6 | ||
|
884f73fb04 | ||
|
0f6e982ad7 | ||
|
2c057d9bc1 | ||
|
94fc56c038 | ||
|
860262952d | ||
|
fcc2247774 | ||
|
6faee56f86 | ||
|
d3456f5060 | ||
|
4cbd5d1b44 | ||
|
73b019a390 | ||
|
fb6191b71a | ||
|
4514e748f0 | ||
|
f135cab83e | ||
|
2c2cdfddd3 | ||
|
d489f1a170 | ||
|
0e21c6f3fd | ||
|
005f75bd61 | ||
|
a7d86fe3a7 | ||
|
b42b015cc6 | ||
|
2fe3073697 | ||
|
3fe4b41f20 | ||
|
fa7890f39d | ||
|
aa60e56199 | ||
|
aa6c33b21c | ||
|
5a10ec60be | ||
|
2e85425c53 | ||
|
0e58b59794 | ||
|
1f27911997 | ||
|
f60128b69d | ||
|
edecbf4799 | ||
|
a8f4a76c7b | ||
|
8851d86847 | ||
|
7611e49b9d | ||
|
7ec2e1cd2f | ||
|
2696f1a29f | ||
|
ec45b8fde8 | ||
|
fca88bb94d | ||
|
d0a7e496aa | ||
|
42c7e4f66a | ||
|
d27f5971c5 | ||
|
48027a8058 | ||
|
7b23673851 | ||
|
31a693a035 | ||
|
67e5343daf | ||
|
016c5fd083 | ||
|
3d9b919814 | ||
|
26e0a5472f | ||
|
7026466324 | ||
|
be56c5c328 |
@@ -801,11 +801,13 @@ MapWndProc(HWND hwnd,
|
||||
infoPtr->CurrentFont.lfFaceName,
|
||||
SIZEOF(lfFaceName));
|
||||
SetFont(infoPtr, lfFaceName);
|
||||
SetCaretXY(infoPtr, infoPtr->CaretX, infoPtr->CaretY, FALSE, TRUE);
|
||||
break;
|
||||
|
||||
case FM_SETFONT:
|
||||
infoPtr->CaretX = infoPtr->CaretY = infoPtr->iYStart = 0;
|
||||
SetFont(infoPtr, (LPWSTR)lParam);
|
||||
SetCaretXY(infoPtr, infoPtr->CaretX, infoPtr->CaretY, FALSE, TRUE);
|
||||
break;
|
||||
|
||||
case FM_GETCHAR:
|
||||
|
@@ -1978,7 +1978,6 @@ EnumEventsThread(IN LPVOID lpParameter)
|
||||
BOOL bResult = TRUE; /* Read succeeded */
|
||||
HANDLE hProcessHeap = GetProcessHeap();
|
||||
PSID pLastSid = NULL;
|
||||
INT nItems;
|
||||
|
||||
UINT uStep = 0, uStepAt = 0, uPos = 0;
|
||||
|
||||
@@ -1998,7 +1997,8 @@ EnumEventsThread(IN LPVOID lpParameter)
|
||||
SYSTEMTIME time;
|
||||
LVITEMW lviEventItem;
|
||||
|
||||
EnableEventDetailsButtons(hwndEventDetails, FALSE);
|
||||
/* Disable the Previous/Next buttons */
|
||||
SendMessageW(hwndEventDetails, EVT_DISPLAY, FALSE, (LPARAM)-1);
|
||||
|
||||
/* Save the current event log filter globally */
|
||||
EventLogFilter_AddRef(EventLogFilter);
|
||||
@@ -2265,9 +2265,6 @@ Quit:
|
||||
/* All events loaded */
|
||||
|
||||
Cleanup:
|
||||
nItems = ListView_GetItemCount(hwndListView);
|
||||
EnableEventDetailsButtons(hwndEventDetails, (nItems > 0));
|
||||
|
||||
ShowWindow(hwndStatusProgress, SW_HIDE);
|
||||
SendMessageW(hwndListView, LVM_PROGRESS, 0, FALSE);
|
||||
|
||||
@@ -2298,6 +2295,11 @@ Cleanup:
|
||||
/* Resume list view redraw */
|
||||
SendMessageW(hwndListView, WM_SETREDRAW, TRUE, 0);
|
||||
|
||||
/* Re-enable the Previous/Next buttons, keeping the current event details
|
||||
* displayed, if any. Don't auto-select the first list item but wait for
|
||||
* the user to do it. */
|
||||
SendMessageW(hwndEventDetails, EVT_DISPLAY, FALSE, 0);
|
||||
|
||||
EventLogFilter_Release(EventLogFilter);
|
||||
|
||||
CloseHandle(hStopEnumEvent);
|
||||
@@ -3342,7 +3344,7 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
MB_OK | MB_ICONERROR);
|
||||
break;
|
||||
}
|
||||
SendMessageW(hwndEventDetails, EVT_DISPLAY, 0, (LPARAM)pnmv->iItem);
|
||||
SendMessageW(hwndEventDetails, EVT_DISPLAY, TRUE, (LPARAM)pnmv->iItem);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -4347,9 +4349,9 @@ EventDetails(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
cxOld = rcWnd.right - rcWnd.left;
|
||||
cyOld = rcWnd.bottom - rcWnd.top;
|
||||
|
||||
/* Show event info in dialog control */
|
||||
iEventItem = (lParam != 0 ? ((PEVENTDETAIL_INFO)lParam)->iEventItem : 0);
|
||||
SendMessageW(hWndDetailsCtrl, EVT_DISPLAY, 0, (LPARAM)iEventItem);
|
||||
/* Display the event info in the dialog */
|
||||
iEventItem = (lParam != 0 ? ((PEVENTDETAIL_INFO)lParam)->iEventItem : -1);
|
||||
SendMessageW(hWndDetailsCtrl, EVT_DISPLAY, TRUE, (LPARAM)iEventItem);
|
||||
|
||||
// SetWindowPos(hWndDetailsCtrl, NULL,
|
||||
// 0, 0,
|
||||
|
@@ -4,7 +4,7 @@
|
||||
* PURPOSE: Event Details Control.
|
||||
* COPYRIGHT: Copyright 2007 Marc Piulachs <marc.piulachs@codexchange.net>
|
||||
* Copyright 2008-2016 Eric Kohl <eric.kohl@reactos.org>
|
||||
* Copyright 2016-2022 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
|
||||
* Copyright 2016-2025 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
|
||||
*/
|
||||
|
||||
#include "eventvwr.h"
|
||||
@@ -16,6 +16,7 @@
|
||||
#define EVENT_MESSAGE_EVENTTEXT_BUFFER (1024*10)
|
||||
extern WCHAR szTitle[];
|
||||
extern HWND hwndListView;
|
||||
|
||||
extern BOOL
|
||||
GetEventMessage(IN LPCWSTR KeyName,
|
||||
IN LPCWSTR SourceName,
|
||||
@@ -25,6 +26,9 @@ GetEventMessage(IN LPCWSTR KeyName,
|
||||
|
||||
typedef struct _DETAILDATA
|
||||
{
|
||||
/* The event record being displayed */
|
||||
PEVENTLOGRECORD pevlr;
|
||||
|
||||
/* Data initialized from EVENTDETAIL_INFO */
|
||||
PEVENTLOGFILTER EventLogFilter;
|
||||
INT iEventItem;
|
||||
@@ -38,16 +42,21 @@ typedef struct _DETAILDATA
|
||||
} DETAILDATA, *PDETAILDATA;
|
||||
|
||||
|
||||
static
|
||||
VOID
|
||||
DisplayEventData(
|
||||
_In_ HWND hDlg,
|
||||
_In_ PDETAILDATA pDetailData);
|
||||
|
||||
static
|
||||
VOID
|
||||
DisplayEvent(
|
||||
_In_ HWND hDlg,
|
||||
_In_ PDETAILDATA pDetailData)
|
||||
{
|
||||
PEVENTLOGRECORD pevlr;
|
||||
PEVENTLOGFILTER EventLogFilter = pDetailData->EventLogFilter;
|
||||
INT iItem = pDetailData->iEventItem;
|
||||
LVITEMW li;
|
||||
PEVENTLOGRECORD pevlr;
|
||||
BOOL bEventData;
|
||||
|
||||
WCHAR szEventType[MAX_PATH];
|
||||
@@ -60,12 +69,13 @@ DisplayEvent(
|
||||
WCHAR szEventID[MAX_PATH];
|
||||
WCHAR szEventText[EVENT_MESSAGE_EVENTTEXT_BUFFER];
|
||||
|
||||
/* Retrieve and cache the pointer to the selected event item */
|
||||
LVITEMW li;
|
||||
li.mask = LVIF_PARAM;
|
||||
li.iItem = iItem;
|
||||
li.iSubItem = 0;
|
||||
ListView_GetItem(hwndListView, &li);
|
||||
|
||||
pevlr = (PEVENTLOGRECORD)li.lParam;
|
||||
pevlr = pDetailData->pevlr = (PEVENTLOGRECORD)li.lParam;
|
||||
|
||||
ListView_GetItemText(hwndListView, iItem, 0, szEventType, ARRAYSIZE(szEventType));
|
||||
ListView_GetItemText(hwndListView, iItem, 1, szDate, ARRAYSIZE(szDate));
|
||||
@@ -87,11 +97,13 @@ DisplayEvent(
|
||||
|
||||
bEventData = (pevlr->DataLength > 0);
|
||||
EnableDlgItem(hDlg, IDC_BYTESRADIO, bEventData);
|
||||
EnableDlgItem(hDlg, IDC_WORDRADIO, bEventData);
|
||||
EnableDlgItem(hDlg, IDC_WORDSRADIO, bEventData);
|
||||
|
||||
// FIXME: At the moment we support only one event log in the filter
|
||||
GetEventMessage(EventLogFilter->EventLogs[0]->LogName, szSource, pevlr, szEventText);
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTTEXTEDIT, szEventText);
|
||||
|
||||
DisplayEventData(hDlg, pDetailData);
|
||||
}
|
||||
|
||||
static
|
||||
@@ -179,22 +191,17 @@ DisplayEventData(
|
||||
_In_ HWND hDlg,
|
||||
_In_ PDETAILDATA pDetailData)
|
||||
{
|
||||
PEVENTLOGRECORD pevlr = pDetailData->pevlr;
|
||||
BOOL bDisplayWords = pDetailData->bDisplayWords;
|
||||
INT iItem = pDetailData->iEventItem;
|
||||
LVITEMW li;
|
||||
PEVENTLOGRECORD pevlr;
|
||||
|
||||
LPBYTE pData;
|
||||
UINT i, uOffset;
|
||||
UINT uBufferSize, uLineLength;
|
||||
PWCHAR pTextBuffer, pLine;
|
||||
|
||||
li.mask = LVIF_PARAM;
|
||||
li.iItem = iItem;
|
||||
li.iSubItem = 0;
|
||||
ListView_GetItem(hwndListView, &li);
|
||||
if (!pevlr)
|
||||
return;
|
||||
|
||||
pevlr = (PEVENTLOGRECORD)li.lParam;
|
||||
if (pevlr->DataLength == 0)
|
||||
{
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTDATAEDIT, L"");
|
||||
@@ -651,7 +658,7 @@ OnSize(HWND hDlg, PDETAILDATA pData, INT cx, INT cy)
|
||||
0, 0,
|
||||
SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
|
||||
|
||||
hItemWnd = GetDlgItem(hDlg, IDC_WORDRADIO);
|
||||
hItemWnd = GetDlgItem(hDlg, IDC_WORDSRADIO);
|
||||
GetWindowRect(hItemWnd, &rect);
|
||||
MapWindowPoints(HWND_DESKTOP /*NULL*/, hDlg, (LPPOINT)&rect, sizeof(RECT)/sizeof(POINT));
|
||||
// OffsetRect(&rect, 0, y);
|
||||
@@ -728,6 +735,46 @@ OnSize(HWND hDlg, PDETAILDATA pData, INT cx, INT cy)
|
||||
}
|
||||
}
|
||||
|
||||
static
|
||||
VOID
|
||||
EnableNavigationArrows(
|
||||
_In_ HWND hDlg,
|
||||
_In_ BOOL bEnable)
|
||||
{
|
||||
/* Enable Previous/Next only if there is more than one item in the list */
|
||||
if (bEnable)
|
||||
bEnable &= (ListView_GetItemCount(hwndListView) > 1);
|
||||
EnableDlgItem(hDlg, IDC_PREVIOUS, bEnable);
|
||||
EnableDlgItem(hDlg, IDC_NEXT, bEnable);
|
||||
}
|
||||
|
||||
static
|
||||
VOID
|
||||
ClearContents(
|
||||
_In_ HWND hDlg)
|
||||
{
|
||||
/* Disable the Previous/Next and Copy buttons */
|
||||
EnableNavigationArrows(hDlg, FALSE);
|
||||
EnableDlgItem(hDlg, IDC_COPY, FALSE);
|
||||
|
||||
/* Disable the Bytes/Words mode buttons */
|
||||
EnableDlgItem(hDlg, IDC_BYTESRADIO, FALSE);
|
||||
EnableDlgItem(hDlg, IDC_WORDSRADIO, FALSE);
|
||||
|
||||
/* Clear the data fields */
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTDATESTATIC, L"");
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTTIMESTATIC, L"");
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTUSERSTATIC, L"");
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTSOURCESTATIC, L"");
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTCOMPUTERSTATIC, L"");
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTCATEGORYSTATIC, L"");
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTIDSTATIC, L"");
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTTYPESTATIC, L"");
|
||||
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTTEXTEDIT, L"");
|
||||
SetDlgItemTextW(hDlg, IDC_EVENTDATAEDIT, L"");
|
||||
}
|
||||
|
||||
static
|
||||
VOID
|
||||
InitDetailsDlgCtrl(HWND hDlg, PDETAILDATA pData)
|
||||
@@ -759,8 +806,22 @@ InitDetailsDlgCtrl(HWND hDlg, PDETAILDATA pData)
|
||||
|
||||
/* Note that the RichEdit control never gets themed under WinXP+; one would have to write code to simulate Edit-control theming */
|
||||
|
||||
SendDlgItemMessageW(hDlg, pData->bDisplayWords ? IDC_WORDRADIO : IDC_BYTESRADIO, BM_SETCHECK, BST_CHECKED, 0);
|
||||
SendDlgItemMessageW(hDlg, pData->bDisplayWords ? IDC_WORDSRADIO : IDC_BYTESRADIO, BM_SETCHECK, BST_CHECKED, 0);
|
||||
SendDlgItemMessageW(hDlg, IDC_EVENTDATAEDIT, WM_SETFONT, (WPARAM)pData->hMonospaceFont, (LPARAM)TRUE);
|
||||
|
||||
//ClearContents(hDlg);
|
||||
if (pData->iEventItem != -1)
|
||||
{
|
||||
EnableNavigationArrows(hDlg, TRUE);
|
||||
EnableDlgItem(hDlg, IDC_COPY, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
EnableNavigationArrows(hDlg, FALSE);
|
||||
EnableDlgItem(hDlg, IDC_COPY, FALSE);
|
||||
}
|
||||
EnableDlgItem(hDlg, IDC_BYTESRADIO, FALSE);
|
||||
EnableDlgItem(hDlg, IDC_WORDSRADIO, FALSE);
|
||||
}
|
||||
|
||||
/* Message handler for Event Details control */
|
||||
@@ -806,6 +867,8 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
pData->scPos.x = pData->scPos.y = 0;
|
||||
|
||||
InitDetailsDlgCtrl(hDlg, pData);
|
||||
/* NOTE: Showing the event (if any) is currently delayed to later */
|
||||
// SendMessageW(hDlg, EVT_DISPLAY, TRUE, (LPARAM)pData->iEventItem);
|
||||
|
||||
// OnSize(hDlg, pData, pData->cxOld, pData->cyOld);
|
||||
return (INT_PTR)TRUE;
|
||||
@@ -821,17 +884,58 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
return (INT_PTR)TRUE;
|
||||
|
||||
case EVT_SETFILTER:
|
||||
{
|
||||
/* Disable the display first, before changing the current filter */
|
||||
pData->pevlr = NULL;
|
||||
pData->iEventItem = -1;
|
||||
ClearContents(hDlg);
|
||||
pData->EventLogFilter = (PEVENTLOGFILTER)lParam;
|
||||
return (INT_PTR)TRUE;
|
||||
}
|
||||
|
||||
case EVT_DISPLAY:
|
||||
{
|
||||
pData->iEventItem = (INT)lParam;
|
||||
if (pData->EventLogFilter)
|
||||
if (wParam)
|
||||
{
|
||||
/* Show event info in control */
|
||||
DisplayEvent(hDlg, pData);
|
||||
DisplayEventData(hDlg, pData);
|
||||
INT iEventItem = (INT)lParam;
|
||||
|
||||
/* If no filter is set, don't change anything */
|
||||
if (!pData->EventLogFilter)
|
||||
return (INT_PTR)TRUE;
|
||||
|
||||
/* If we re-enable display from previously disabled state, re-enable the buttons */
|
||||
if ((pData->iEventItem == -1) && (iEventItem != -1))
|
||||
{
|
||||
EnableNavigationArrows(hDlg, TRUE);
|
||||
EnableDlgItem(hDlg, IDC_COPY, TRUE);
|
||||
}
|
||||
else
|
||||
/* If we disable display from previously enabled state, clear and disable it */
|
||||
if ((pData->iEventItem != -1) && (iEventItem == -1))
|
||||
{
|
||||
ClearContents(hDlg);
|
||||
}
|
||||
|
||||
/* Set the new item */
|
||||
pData->pevlr = NULL;
|
||||
pData->iEventItem = iEventItem;
|
||||
|
||||
/* Display the event info, if there is one */
|
||||
if (pData->iEventItem != -1)
|
||||
DisplayEvent(hDlg, pData);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Enable or disable the Previous/Next buttons,
|
||||
* but keep the existing contents, if any */
|
||||
EnableNavigationArrows(hDlg, (lParam != -1));
|
||||
|
||||
// HACK: Disable the Bytes/Words mode buttons
|
||||
// because we won't have access anymore to the
|
||||
// event data. (This will be fixed in the future.)
|
||||
pData->pevlr = NULL; // Invalidate also the cache.
|
||||
EnableDlgItem(hDlg, IDC_BYTESRADIO, FALSE);
|
||||
EnableDlgItem(hDlg, IDC_WORDSRADIO, FALSE);
|
||||
}
|
||||
return (INT_PTR)TRUE;
|
||||
}
|
||||
@@ -843,25 +947,33 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
case IDC_NEXT:
|
||||
{
|
||||
BOOL bPrev = (LOWORD(wParam) == IDC_PREVIOUS);
|
||||
INT iItem, iSel, nItems = ListView_GetItemCount(hwndListView);
|
||||
WCHAR szText[200];
|
||||
INT nItems = ListView_GetItemCount(hwndListView);
|
||||
INT iItem, iSel;
|
||||
|
||||
if (nItems <= 0) /* No items? */
|
||||
break;
|
||||
|
||||
/* Get the index of the first selected item */
|
||||
iSel = ListView_GetNextItem(hwndListView, -1, LVNI_SELECTED);
|
||||
|
||||
/* Select the previous/next item from our current one */
|
||||
iItem = ListView_GetNextItem(hwndListView, -1, LVNI_ALL | LVNI_SELECTED);
|
||||
iItem = ListView_GetNextItem(hwndListView, iItem,
|
||||
iItem = ListView_GetNextItem(hwndListView, iSel,
|
||||
(bPrev ? LVNI_ABOVE : LVNI_BELOW));
|
||||
if (iItem < 0 || iItem >= nItems)
|
||||
{
|
||||
LoadStringW(hInst,
|
||||
(bPrev ? IDS_CONTFROMEND : IDS_CONTFROMBEGINNING),
|
||||
szText, _countof(szText));
|
||||
if (MessageBoxW(hDlg, szText, szTitle, MB_YESNO | MB_ICONQUESTION) == IDNO)
|
||||
break;
|
||||
/* Confirm selection restart only if an item was previously
|
||||
* selected. If not, just proceed with default selection. */
|
||||
if (iSel != -1)
|
||||
{
|
||||
WCHAR szText[200];
|
||||
LoadStringW(hInst,
|
||||
(bPrev ? IDS_CONTFROMEND : IDS_CONTFROMBEGINNING),
|
||||
szText, _countof(szText));
|
||||
if (MessageBoxW(hDlg, szText, szTitle, MB_YESNO | MB_ICONQUESTION) != IDYES)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Determine from where to restart */
|
||||
/* Determine where to restart from */
|
||||
iItem = (bPrev ? (nItems - 1) : 0);
|
||||
}
|
||||
|
||||
@@ -883,14 +995,12 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
LVIS_FOCUSED | LVIS_SELECTED);
|
||||
ListView_EnsureVisible(hwndListView, iItem, FALSE);
|
||||
|
||||
pData->pevlr = NULL;
|
||||
pData->iEventItem = iItem;
|
||||
|
||||
/* Show event info in control */
|
||||
/* Display the event info */
|
||||
if (pData->EventLogFilter)
|
||||
{
|
||||
DisplayEvent(hDlg, pData);
|
||||
DisplayEventData(hDlg, pData);
|
||||
}
|
||||
return (INT_PTR)TRUE;
|
||||
}
|
||||
|
||||
@@ -900,15 +1010,11 @@ EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
return (INT_PTR)TRUE;
|
||||
|
||||
case IDC_BYTESRADIO:
|
||||
case IDC_WORDRADIO:
|
||||
{
|
||||
case IDC_WORDSRADIO:
|
||||
pData->bDisplayWords = (LOWORD(wParam) == IDC_WORDSRADIO);
|
||||
if (pData->EventLogFilter)
|
||||
{
|
||||
pData->bDisplayWords = (LOWORD(wParam) == IDC_WORDRADIO);
|
||||
DisplayEventData(hDlg, pData);
|
||||
}
|
||||
return (INT_PTR)TRUE;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
@@ -959,11 +1065,3 @@ CreateEventDetailsCtrl(HINSTANCE hInstance,
|
||||
MAKEINTRESOURCEW(IDD_EVENTDETAILS_CTRL),
|
||||
hParentWnd, EventDetailsCtrl, lParam);
|
||||
}
|
||||
|
||||
VOID
|
||||
EnableEventDetailsButtons(HWND hWnd, BOOL bEnable)
|
||||
{
|
||||
EnableDlgItem(hWnd, IDC_PREVIOUS, bEnable);
|
||||
EnableDlgItem(hWnd, IDC_NEXT, bEnable);
|
||||
EnableDlgItem(hWnd, IDC_COPY, bEnable);
|
||||
}
|
||||
|
@@ -4,7 +4,7 @@
|
||||
* PURPOSE: Event Details Control.
|
||||
* COPYRIGHT: Copyright 2007 Marc Piulachs <marc.piulachs@codexchange.net>
|
||||
* Copyright 2008-2016 Eric Kohl <eric.kohl@reactos.org>
|
||||
* Copyright 2016-2022 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
|
||||
* Copyright 2016-2025 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
@@ -24,5 +24,3 @@ HWND
|
||||
CreateEventDetailsCtrl(HINSTANCE hInstance,
|
||||
HWND hParentWnd,
|
||||
LPARAM lParam);
|
||||
|
||||
VOID EnableEventDetailsButtons(HWND hWnd, BOOL bEnable);
|
||||
|
@@ -105,9 +105,9 @@ BEGIN
|
||||
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, 60
|
||||
|
||||
LTEXT "&Данни:", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
AUTORADIOBUTTON "&Байтове", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Думи", IDC_WORDRADIO, 85, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Думи", IDC_WORDSRADIO, 85, 140, 34, 8
|
||||
LTEXT "&Данни:", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -81,17 +81,17 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Datum:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "&Datum:", 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 "Zdroj:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "&Zdroj:", 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 "Čas:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "Č&as:", 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 "Kategorie:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Kategorie:", 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
|
||||
LTEXT "Typ:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "T&yp:", 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 "ID události:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "&ID události:", 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 "&Uživatel:", 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
|
||||
@@ -105,9 +105,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Byty", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Bajty", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Slova", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Da&ta:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -203,7 +203,7 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_BYTES_FORMAT "byty" // "%s bytes"
|
||||
IDS_BYTES_FORMAT "bajtů" // "%s bytes"
|
||||
// "%1!ls! (%2!ls! bytes)"
|
||||
END
|
||||
|
||||
|
@@ -82,21 +82,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Datum:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "&Datum:", 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 "Quelle:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "&Quelle:", 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 "Zeit:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "&Zeit:", 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 "Kategorie:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Kategorie:", 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
|
||||
LTEXT "Typ:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "&Typ:", 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 "Ereignis-ID:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "E&reignis-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 "&Benutzer:", IDC_STATIC, 8, 35, 36, 8
|
||||
LTEXT "B&enutzer:", 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
|
||||
LTEXT "C&omputer:", 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, 230, 5, 28, 14, BS_ICON
|
||||
@@ -106,9 +106,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "D&aten:", IDC_DETAILS_STATIC, 8, 140, 24, 8
|
||||
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Wörter", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "D&aten:", IDC_DETAILS_STATIC, 8, 140, 24, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -81,17 +81,17 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Ημερομηνία:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "&Ημερομηνία:", 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 "Πηγή:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "Πη&γή:", 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 "Ώρα:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "&Ώρα:", 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 "Κατηγορία:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Κατηγορία:", 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
|
||||
LTEXT "Τύπος:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "&Τύπος:", 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 "EventID:", IDC_STATIC, 103, 25, 36, 8
|
||||
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 "&Χρήστης:", 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
|
||||
@@ -105,9 +105,9 @@ BEGIN
|
||||
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, 60
|
||||
|
||||
LTEXT "Δ&εδομένα:", IDC_DETAILS_STATIC, 8, 140, 40, 8
|
||||
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 49, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 87, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 87, 140, 34, 8
|
||||
LTEXT "Δ&εδομένα:", IDC_DETAILS_STATIC, 8, 140, 40, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -83,21 +83,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Date:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "D&ate:", 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 "Source:", IDC_STATIC, 103, 5, 36, 8
|
||||
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 "Time:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "Ti&me:", 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 "Category:", IDC_STATIC, 103, 15, 36, 8
|
||||
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
|
||||
LTEXT "Type:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "Typ&e:", 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 "Event ID:", IDC_STATIC, 103, 25, 36, 8
|
||||
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 "&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
|
||||
LTEXT "C&omputer:", 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, 230, 5, 28, 14, BS_ICON
|
||||
@@ -107,9 +107,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Da&ta:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -84,17 +84,17 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Fecha:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "&Fecha:", 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 "Origen:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "&Origen:", 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 "Hora:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "&Hora:", 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 "Categoría:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Categoría:", 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
|
||||
LTEXT "Tipo:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "&Tipo:", 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 "ID de evento:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "&ID de evento:", 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 "&Usuario:", 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
|
||||
@@ -108,9 +108,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "D&atos:", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "D&atos:", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -82,21 +82,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Date :", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "D&ate :", 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 "Source :", IDC_STATIC, 103, 5, 36, 8
|
||||
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 "Heure :", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "&Heure :", 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 "Catégorie :", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Catégorie :", 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
|
||||
LTEXT "Type :", IDC_STATIC, 8, 25, 31, 8
|
||||
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 "Événement :", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "É&vénement :", 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 "&Utilisateur :", 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 "Ordinateur :", IDC_STATIC, 8, 45, 36, 8
|
||||
LTEXT "O&rdinateur :", 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, 230, 5, 28, 14, BS_ICON
|
||||
@@ -106,9 +106,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "Données :", IDC_DETAILS_STATIC, 8, 140, 35, 8//FIXME: add accel
|
||||
AUTORADIOBUTTON "&Octets", IDC_BYTESRADIO, 50, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Mots", IDC_WORDRADIO, 88, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Mots", IDC_WORDSRADIO, 88, 140, 34, 8
|
||||
LTEXT "Do&nnées :", IDC_DETAILS_STATIC, 8, 140, 35, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -168,8 +168,8 @@ BEGIN
|
||||
IDS_CLEAREVENTS_MSG "Voulez-vous enregistrer ce journal d'événements avant de l'effacer ?"
|
||||
IDS_RESTOREDEFAULTS "Voulez-vous vraiment réinitialiser tous les paramètres pour ce journal aux valeurs par défaut ?"
|
||||
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_CONTFROMBEGINNING "You have reached the end of the event log. Do you want to continue from the beginning?"
|
||||
IDS_CONTFROMEND "You have reached the beginning of the event log. Do you want to continue from the end?"
|
||||
IDS_CONTFROMBEGINNING "Vous avez atteint la fin du journal d'événements. Voulez-vous continuer depuis le début ?"
|
||||
IDS_CONTFROMEND "Vous avez atteint le début du journal d'événements. Voulez-vous continuer depuis la fin ?"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
|
@@ -105,9 +105,9 @@ BEGIN
|
||||
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, 60
|
||||
|
||||
LTEXT "נתונים:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "בתים", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "מילים", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "מילים", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "נתונים:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -82,21 +82,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Data:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "D&ata:", 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 "Sorgente:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "&Sorgente:", 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 "Ore:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "&Ore:", 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 "Categoria:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Categoria:", 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
|
||||
LTEXT "Tipo:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "T&ipo:", 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 "IDEvento:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "ID &Evento:", 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 "&UTente:", IDC_STATIC, 8, 35, 36, 8
|
||||
LTEXT "&Utente:", 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
|
||||
LTEXT "Co&mputer:", 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, 230, 5, 28, 14, BS_ICON
|
||||
@@ -106,9 +106,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "D&ati:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Da&ti:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -106,9 +106,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "データ(&A):", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "バイト(&B)", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "ワード(&W)", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "ワード(&W)", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "データ(&A):", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -105,9 +105,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "데이터(&A):", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "바이트(&B)", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "글자(&W)", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "글자(&W)", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "데이터(&A):", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -81,21 +81,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Dato:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "D&ato:", 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 "Kilde:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "&Kilde:", 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 "Tid:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "Ti&d:", 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 "Kategori:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "Katego&ri:", 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
|
||||
LTEXT "Type:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "Typ&e:", 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 "Hendelse ID:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "&Hendelse 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 "&Bruker:", IDC_STATIC, 8, 35, 36, 8
|
||||
LTEXT "Br&uker:", 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 "&Datamaskin:", IDC_STATIC, 8, 45, 36, 8
|
||||
LTEXT "Data&maskin:", 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, 230, 5, 28, 14, BS_ICON
|
||||
@@ -105,9 +105,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Tegn", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Ord", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "Teg&n", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Ord", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Da&ta:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -108,9 +108,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "D&ane:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Bajty", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Słowa", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Słowa", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "D&ane:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -81,21 +81,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Data:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "D&ata:", 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 "Fonte:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "&Fonte:", 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 "Tempo:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "T&empo:", 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 "Categoria:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Categoria:", 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
|
||||
LTEXT "Tipo:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "&Tipo:", 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 "EventID:", IDC_STATIC, 103, 25, 36, 8
|
||||
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 "&Usuário:", 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 "&Computador:", IDC_STATIC, 8, 45, 36, 8
|
||||
LTEXT "Co&mputador:", 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, 230, 5, 28, 14, BS_ICON
|
||||
@@ -105,9 +105,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "Dad&os:", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Dad&os:", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -81,21 +81,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Data:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "D&ata:", IDC_STATIC, 8, 5, 31, 8
|
||||
EDITTEXT IDC_EVENTDATESTATIC, 50, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Origem:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "O&rigem:", 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 "Hora:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "&Hora:", IDC_STATIC, 8, 15, 31, 8
|
||||
EDITTEXT IDC_EVENTTIMESTATIC, 50, 15, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "Categoria:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Categoria:", 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
|
||||
LTEXT "Tipo:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "&Tipo:", IDC_STATIC, 8, 25, 31, 8
|
||||
EDITTEXT IDC_EVENTTYPESTATIC, 50, 25, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "EventID:", IDC_STATIC, 103, 25, 36, 8
|
||||
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 "&Utilizador:", IDC_STATIC, 8, 35, 36, 8
|
||||
EDITTEXT IDC_EVENTUSERSTATIC, 50, 35, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
LTEXT "&Computador:", IDC_STATIC, 8, 45, 40, 8
|
||||
LTEXT "Co&mputador:", IDC_STATIC, 8, 45, 40, 8
|
||||
EDITTEXT IDC_EVENTCOMPUTERSTATIC, 50, 45, 152, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
|
||||
|
||||
PUSHBUTTON "", IDC_PREVIOUS, 230, 5, 28, 14, BS_ICON
|
||||
@@ -105,9 +105,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "Dad&os:", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Dad&os:", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -203,7 +203,7 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_BYTES_FORMAT "bytes" // "%s bytes"
|
||||
IDS_BYTES_FORMAT "bajtów" // "%s bytes"
|
||||
// "%1!ls! (%2!ls! bytes)"
|
||||
END
|
||||
|
||||
|
@@ -83,21 +83,21 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Dată:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "D&ată:", 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 "Sursă:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "&Sursă:", 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 "Oră:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "O&ră:", 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 "Categorie:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Categorie:", 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
|
||||
LTEXT "Tip:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "T&ip:", 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 "ID Eveniment:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "ID &Eveniment:", 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 "&Utilizator:", 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 "&Calculator:", IDC_STATIC, 8, 45, 36, 8
|
||||
LTEXT "Ca&lculator:", 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, 230, 5, 28, 14, BS_ICON
|
||||
@@ -107,9 +107,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "D&ate:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&8 biți", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&16 biți", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&16 biți", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Da&te:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -205,7 +205,7 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_BYTES_FORMAT "octeți" // "%s bytes"
|
||||
IDS_BYTES_FORMAT "octeţi" // "%s bytes"
|
||||
// "%1!ls! (%2!ls! bytes)"
|
||||
END
|
||||
|
||||
|
@@ -109,9 +109,9 @@ BEGIN
|
||||
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, 60
|
||||
|
||||
LTEXT "&Данные:", IDC_DETAILS_STATIC, 8, 140, 30, 8
|
||||
AUTORADIOBUTTON "&Байты", IDC_BYTESRADIO, 49, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Слова", IDC_WORDRADIO, 87, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Слова", IDC_WORDSRADIO, 87, 140, 34, 8
|
||||
LTEXT "&Данные:", IDC_DETAILS_STATIC, 8, 140, 30, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -105,9 +105,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "Ú&daje:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Bajty", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Slová", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Slová", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Ú&daje:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
@@ -203,7 +203,7 @@ END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_BYTES_FORMAT "bytes" // "%s bytes"
|
||||
IDS_BYTES_FORMAT "bajtov" // "%s bytes"
|
||||
// "%1!ls! (%2!ls! bytes)"
|
||||
END
|
||||
|
||||
|
@@ -81,33 +81,33 @@ IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
|
||||
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
|
||||
FONT 8, "MS Shell Dlg"
|
||||
BEGIN
|
||||
LTEXT "Data:", IDC_STATIC, 8, 5, 31, 8
|
||||
LTEXT "D&ata:", 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 "Burimi:", IDC_STATIC, 103, 5, 36, 8
|
||||
LTEXT "B&urimi:", 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 "Ora:", IDC_STATIC, 8, 15, 31, 8
|
||||
LTEXT "O&ra:", 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 "Kategoria:", IDC_STATIC, 103, 15, 36, 8
|
||||
LTEXT "&Kategoria:", 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
|
||||
LTEXT "Tipi:", IDC_STATIC, 8, 25, 31, 8
|
||||
LTEXT "T&ipi:", 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 "NgjarjeID:", IDC_STATIC, 103, 25, 36, 8
|
||||
LTEXT "&Ngjarje 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 "Përdoruesi:", IDC_STATIC, 8, 35, 36, 8//FIXME: add accel
|
||||
LTEXT "Për&doruesi:", 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 "Kompjuteri:", IDC_STATIC, 8, 45, 36, 8//FIXME: add accel
|
||||
LTEXT "Ko&mpjuteri:", 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, 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//FIXME: add accel
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Bytes", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Word", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Words", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Da&ta:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -105,9 +105,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Byte", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Ord", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Ord", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -106,9 +106,9 @@ BEGIN
|
||||
LTEXT "Açıklama:", IDC_STATIC, 8, 65, 39, 8//FIXME: add accel
|
||||
CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
|
||||
|
||||
LTEXT "Veri:", IDC_DETAILS_STATIC, 8, 140, 20, 8//FIXME: add accel
|
||||
AUTORADIOBUTTON "&Baytlar", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "Sö&zcük", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "Sö&zcükler", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Veri:", IDC_DETAILS_STATIC, 8, 140, 20, 8//FIXME: add accel
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -107,9 +107,9 @@ BEGIN
|
||||
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, 60
|
||||
|
||||
AUTORADIOBUTTON "&Байти", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Слова", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "Д&aта:", IDC_DETAILS_STATIC, 8, 140, 20, 8
|
||||
AUTORADIOBUTTON "&Байт", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "&Слово", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -107,9 +107,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "数据(&A):", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
AUTORADIOBUTTON "字节(&B)", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "字(&W)", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "字(&W)", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "数据(&A):", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -106,9 +106,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "資料(&A):", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
AUTORADIOBUTTON "位元組(&B)", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "位元(&W)", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "字(&W)", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "資料(&A):", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -106,9 +106,9 @@ BEGIN
|
||||
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, 250, 60
|
||||
|
||||
LTEXT "資料(&A):", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
AUTORADIOBUTTON "位元組(&B)", IDC_BYTESRADIO, 39, 140, 34, 8
|
||||
AUTORADIOBUTTON "位元(&W)", IDC_WORDRADIO, 77, 140, 34, 8
|
||||
AUTORADIOBUTTON "字(&W)", IDC_WORDSRADIO, 77, 140, 34, 8
|
||||
LTEXT "資料(&A):", IDC_DETAILS_STATIC, 8, 140, 25, 8
|
||||
EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
|
||||
END
|
||||
|
||||
|
@@ -50,7 +50,7 @@
|
||||
#define IDC_EVENTTEXTEDIT 1011
|
||||
#define IDC_DETAILS_STATIC -2
|
||||
#define IDC_BYTESRADIO 1012
|
||||
#define IDC_WORDRADIO 1013
|
||||
#define IDC_WORDSRADIO 1013
|
||||
#define IDC_EVENTDATAEDIT 1014
|
||||
#define IDC_DISPLAYNAME 1015
|
||||
#define IDC_LOGNAME 1016
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Някои услуги зависят от други услуги, водачи (driver) и зареждат други групи. Ако някоя системна съставка е спряна или не работи правилно, зависимите от нея услуги може да бъдат засегнати.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Тази услуга зависи от следните съставки", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Тази услуга зависи от следните съставки:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -157,6 +157,7 @@ BEGIN
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Některé služby závisí na jiných službách, systémových ovladačích nebo načítají jiné skupiny služeb. Zastavené nebo nesprávně fungující součásti systému mohou ovlivnit závislé služby.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Tato služba závisí na následujících součástech:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Einige Dienste sind von anderen Diensten, Systemtreibern und Ladegruppen abhängig. Falls eine Systemkomponente anhält oder nicht einwandfrei ausgeführt wird, kann dies Auswirkungen auf abhängige Dienste haben.", IDC_STATIC, 8, 7, 238, 38
|
||||
LTEXT "Dieser Dienst ist von folgenden Systemkomponenten abhängig", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Dieser Dienst ist von folgenden Systemkomponenten abhängig:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Die folgenden Komponenten sind von diesem Dienst abhängig:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Some services depend on other services, system drivers and load order groups. If a system component is stopped or it is not running properly, dependant services can be affected.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "This service depends on the following components", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "This service depends on the following components:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Some services depend on other services, system drivers and load order groups. If a system component is stopped or it is not running properly, dependant services can be affected.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "This service depends on the following components", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "&This service depends on the following components:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The &following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -159,7 +159,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Algunos servicios dependen de otros servicios, controladores del sistema y grupos de orden de carga. Si se detiene un componente del sistema o no funciona correctamente, es posible que otros servicios que dependan de éstos resulten afectados.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Éste servicio depende de los siguientes componentes", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Éste servicio depende de los siguientes componentes:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Certains services dépendent d'autres services, pilotes système et groupes d'ordre de chargement. Si un composant système est arrêté ou ne fonctionne pas correctement, les services dépendants peuvent être affectés.", IDC_STATIC, 8, 7, 238, 36
|
||||
LTEXT "Ce service dépend des composants système suivants", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "&Ce service dépend des composants système suivants:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Les c&omposants système suivants dépendent de ce service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "שירותים מסוימים תלויים בשירותים אחרים, במנהלים של התקנים של המערכת ובקבוצות סדר טעינה. אם רכיב מערכת הופסק או שאינו פועל כראוי, ייתכן ששירותים התלויים בו יושפעו.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "שירות זה תלוי ברכיבי המערכת הבאים", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "שירות זה תלוי ברכיבי המערכת הבאים:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Beberapa layanan bergantung pada layanan lainnya, driver sistem dan grup urutan pengambilan. Jika komponen sistem dihentikan atau tidak berjalan dengan benar, layanan yang bergantung akan dipengaruhi.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Layanan ini tergantung pada komponen berikut", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Layanan ini tergantung pada komponen berikut:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Alcuni servizi dipendono da altri servizi, driver di sistema e gruppi di ordine di caricamento. Se un componente di sistema viene fermato o non sta funzionando regolarmente, i servizi dipendenti possono venire influenzati.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Questo servizio dipende dai seguenti componenti", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Questo servizio dipende dai seguenti componenti:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "他のサービス、システム ドライバ、読み込み順グループなどに依存しているサービスがあります。システム コンポーネントが停止するか、または正常に実行されない場合、依存するサービスが影響されている場合があります。", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "このサービスが依存するコンポーネント", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "このサービスが依存するコンポーネント:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -159,6 +159,7 @@ BEGIN
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "일부 서비스는 다른 서비스나 시스템 드라이버, 그룹 등에 종속되어 있습니다. 만약 시스템 컴포넌트가 정지되었거나 제대로 동작하지 않는다면, 종속된 서비스에 영향을 끼칠 수 있습니다.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "이 서비스는 다음 컴포넌트에 종속되어 있습니다.", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -156,7 +156,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Noen tjenester depend på andre tjenester, system drivere og laster system grupper. Hvis system komponenten er stoppet eller ikke kjøre riktig, dependant services can be affected.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Denne tjenesten depends på følgende komponenter", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Denne tjenesten depends på følgende komponenter:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -166,7 +166,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Niektóre usługi są zależne od innych usług, sterowników systemowych i grup kolejności ładowania. Jeżeli składnik systemu jest zatrzymany lub nie działa prawidłowo, zależne od niego usługi nie uruchomią się.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Ta usługa jest zależna od następujących składników systemu", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Ta usługa jest zależna od następujących składników systemu:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -157,6 +157,7 @@ BEGIN
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Alguns serviços dependem de outros serviços, controladores de sistema e grupos de ordenamento de carregamento. Se um componente do sistema for parado ou não estiver a ser executado correctamente, os serviços dependentes podem ser afectados.", IDC_STATIC, 8, 7, 238, 34
|
||||
LTEXT "Este serviço depende dos seguintes componentes do sistema:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "Os seguintes componentes do sistema dependem deste serviço:", IDC_DEPEND_SERVICE, 8, 138, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -165,7 +165,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Unele servicii depind de alte servicii sau de module de sistem și de ordinea încărcării în grup. Dacă o componentă de sistem este oprită sau nu rulează corespunzător, serviciile dependente pot fi și ele afectate.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Acest serviciu depinde de următoarele componente", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Acest serviciu depinde de următoarele componente:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Următoarele componente depind de acest serviciu:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -157,6 +157,7 @@ BEGIN
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Некоторые службы зависят от других. Если служба остановлена или неправильно работает, это отражается на зависимых от нее службах.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Эта служба зависит от следующих компонентов:", IDC_STATIC, 8, 59, 236, 9
|
||||
LTEXT "Следующие компоненты зависят от этой службы:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -161,7 +161,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Some services depend on other services, system drivers and load order groups. If a system component is stopped or it is not running properly, dependant services can be affected.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "This service depends on the following components", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "This service depends on the following components:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -161,7 +161,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Disa shërbime varen nga shërbimet e tjera, driverat e sistemit dhe ngarkimet grupet te renditura. Nëse një komponent sistem është i ndalur ose ajo nuk është në drejtimin e duhur, shërbimet e varur mund të preken.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Ky shërbim varet nga komponentet në vijim", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Ky shërbim varet nga komponentet në vijim:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -163,7 +163,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Några tjänster är beroende av andra tjänster, systemdrivrutiner och laddsystemsgrupper. Om systemkomponenten är stoppad eller inte kör korrekt, kan tjänster som är beroende av den bli påverkade.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Denna tjänsten är beroende av följande komponenter", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Denna tjänsten är beroende av följande komponenter:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -164,7 +164,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "การให้บริการบางอย่างขึ้นกับบริการอื่นๆด้วย, ตัวขับเคลื่อนของระบบ และการดึงข้อมูลตามลำดับกลุ่ม ถ้าส่วนประกอบต่างๆของระบบหยุดทำงานลง หรือไม่ทำงานตามสมควร การให้บริการแบบไม่กำหนดเองจะมีผลทันที", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "การให้บริการนี้ขึ้นอยู่กับส่วนประกอบอื่นๆที่ตามมาด้วย", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "การให้บริการนี้ขึ้นอยู่กับส่วนประกอบอื่นๆที่ตามมาด้วย:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -159,6 +159,7 @@ BEGIN
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Birtakım hizmetler, başka hizmetlere, sistem sürücülerine ve yükleme sırası bileşenlerine bağımlıdır. Eğer bir sistem bileşeni, durdurulmuşsa ya da düzgün çalışmıyorsa bağımlı hizmetler etkilenebilir.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Bu hizmet aşağıdaki bileşenlere bağımlıdır:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -164,7 +164,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "Деякі служби залежать від інших служб, системних драйверів або списку завантаження груп служб. Якщо служба зупинена або неправильно працює, це впливає на залежні від неї служби.", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "Ця служба залежить від наступних компонентів", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "Ця служба залежить від наступних компонентів:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -158,7 +158,8 @@ BEGIN
|
||||
WS_VISIBLE | WS_TABSTOP | TVS_HASBUTTONS | TVS_HASLINES |
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "一些服务依赖于其他服务,系统驱动程序和加载顺序组。如果一个系统组件被停止或者没有正确运行,依赖它的服务也会被影响。", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "这个服务依赖于以下的组件", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "这个服务依赖于以下的组件:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -165,6 +165,7 @@ BEGIN
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "一些服務依賴於其他服務,系統驅動程式和載入順序組。如果一個系統元件被停止或者沒有正確執行,依賴它的服務也會受到影響。", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "這個服務依賴於以下的元件:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -165,6 +165,7 @@ BEGIN
|
||||
TVS_LINESATROOT | TVS_DISABLEDRAGDROP, 8, 151, 236, 68
|
||||
LTEXT "一些服務依賴於其他服務,系統驅動程式和載入順序組。如果一個系統元件被停止或者沒有正確運行,被其依賴的服務也會被影響。", IDC_STATIC, 8, 7, 238, 26
|
||||
LTEXT "這個服務依賴於以下的元件:", IDC_STATIC, 8, 57, 236, 9
|
||||
LTEXT "The following components depend on this service:", IDC_STATIC, 8, 140, 236, 9
|
||||
LTEXT "", IDC_DEPEND_SERVICE, 8, 38, 236, 13
|
||||
END
|
||||
|
||||
|
@@ -33,4 +33,7 @@ Options:\n\
|
||||
IDS_HOP_RESPONSE " reports: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Destination network unreachable.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -33,4 +33,7 @@ Options:\n\
|
||||
IDS_HOP_RESPONSE " reports: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Destination network unreachable.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -38,4 +38,7 @@ Optionen:\n\
|
||||
IDS_HOP_RESPONSE " Antwort: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Zielhost nicht erreichbar.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Zielnetz nicht erreichbar.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -33,4 +33,7 @@ Options:\n\
|
||||
IDS_HOP_RESPONSE " reports: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Destination network unreachable.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -33,4 +33,7 @@ Options:\n\
|
||||
IDS_HOP_RESPONSE " reports: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Destination network unreachable.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -33,4 +33,7 @@ Options :\n\
|
||||
IDS_HOP_RESPONSE " rapporte : "
|
||||
IDS_DEST_HOST_UNREACHABLE "Hôte de destination inatteignable.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Réseau de destination inatteignable.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -39,4 +39,7 @@ Opzioni:\n\
|
||||
IDS_HOP_RESPONSE " rapporti: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Destinazione ospite irraggiungibile.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Destinazione rete irraggiungibile.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -33,4 +33,7 @@ Opcje:\n\
|
||||
IDS_HOP_RESPONSE " raporty: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Host docelowy nieosiągalny.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Sieć docelowa nieosiągalna.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -39,4 +39,7 @@ Opțiuni:\n\
|
||||
IDS_HOP_RESPONSE " rapoarte: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Destinație gazdă inaccesibilă.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Destinație rețea inaccesibilă.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -34,4 +34,7 @@ BEGIN
|
||||
IDS_HOP_RESPONSE " сообщает: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Заданный узел недоступен.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Заданная сеть недоступна.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -33,4 +33,7 @@ Options:\n\
|
||||
IDS_HOP_RESPONSE " reports: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Destination network unreachable.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -33,4 +33,7 @@ Options:\n\
|
||||
IDS_HOP_RESPONSE " reports: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Destination network unreachable.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -34,4 +34,7 @@ Seçenekler:\n\
|
||||
IDS_HOP_RESPONSE " raporlar: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Hedef cihaza erişilemiyor.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Hedef ağa erişilemiyor.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -33,4 +33,7 @@ Options:\n\
|
||||
IDS_HOP_RESPONSE " reports: "
|
||||
IDS_DEST_HOST_UNREACHABLE "Destination host unreachable.\n"
|
||||
IDS_DEST_NET_UNREACHABLE "Destination network unreachable.\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -33,4 +33,7 @@ BEGIN
|
||||
IDS_HOP_RESPONSE " 报告: "
|
||||
IDS_DEST_HOST_UNREACHABLE "目标主机不可达。\n"
|
||||
IDS_DEST_NET_UNREACHABLE "目标网络不可达。\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -39,4 +39,7 @@ BEGIN
|
||||
IDS_HOP_RESPONSE " reports: "
|
||||
IDS_DEST_HOST_UNREACHABLE "無法連線至目標主機。\n"
|
||||
IDS_DEST_NET_UNREACHABLE "無法連線至目標網路。\n"
|
||||
IDS_BAD_OPTION_VALUE "Bad value for option %1!ls!.\n"
|
||||
IDS_MISSING_OPTION_VALUE "A value must be supplied for option %1!ls!.\n"
|
||||
IDS_MISSING_TARGET "A target name or address must be specified.\n"
|
||||
END
|
||||
|
@@ -19,3 +19,6 @@
|
||||
#define IDS_HOP_RESPONSE 115
|
||||
#define IDS_DEST_HOST_UNREACHABLE 116
|
||||
#define IDS_DEST_NET_UNREACHABLE 117
|
||||
#define IDS_BAD_OPTION_VALUE 118
|
||||
#define IDS_MISSING_OPTION_VALUE 119
|
||||
#define IDS_MISSING_TARGET 120
|
||||
|
@@ -3,6 +3,7 @@
|
||||
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||
* PURPOSE: Trace network paths through networks
|
||||
* COPYRIGHT: Copyright 2018 Ged Murphy <gedmurphy@reactos.org>
|
||||
Copyright 2025 Curtis Wilson <LiquidFox1776@gmail.com>
|
||||
*/
|
||||
|
||||
#ifdef __REACTOS__
|
||||
@@ -24,6 +25,7 @@
|
||||
#include <iphlpapi.h>
|
||||
#include <icmpapi.h>
|
||||
#include <strsafe.h>
|
||||
#include <errno.h>
|
||||
#include "resource.h"
|
||||
|
||||
#define SIZEOF_ICMP_ERROR 8
|
||||
@@ -31,6 +33,10 @@
|
||||
#define PACKET_SIZE 32
|
||||
#define MAX_IPADDRESS 32
|
||||
#define NUM_OF_PINGS 3
|
||||
#define MIN_HOP_COUNT 1
|
||||
#define MAX_HOP_COUNT 255
|
||||
#define MIN_MILLISECONDS 1
|
||||
#define MAX_MILLISECONDS ULONG_MAX
|
||||
|
||||
struct TraceInfo
|
||||
{
|
||||
@@ -153,23 +159,27 @@ Usage()
|
||||
OutputText(IDS_USAGE);
|
||||
}
|
||||
|
||||
static ULONG
|
||||
static bool
|
||||
GetULONG(
|
||||
_In_z_ LPWSTR String
|
||||
)
|
||||
_In_ PCWSTR String,
|
||||
_Out_ PULONG Value)
|
||||
{
|
||||
ULONG Length;
|
||||
Length = wcslen(String);
|
||||
PWSTR StopString;
|
||||
|
||||
ULONG i = 0;
|
||||
while ((i < Length) && ((String[i] < L'0') || (String[i] > L'9'))) i++;
|
||||
if ((i >= Length) || ((String[i] < L'0') || (String[i] > L'9')))
|
||||
{
|
||||
return (ULONG)-1;
|
||||
}
|
||||
// Check input arguments
|
||||
if (*String == UNICODE_NULL)
|
||||
return false;
|
||||
|
||||
LPWSTR StopString;
|
||||
return wcstoul(&String[i], &StopString, 10);
|
||||
// Clear errno so we can use its value after
|
||||
// the call to wcstoul to check for errors.
|
||||
errno = 0;
|
||||
|
||||
// Try to convert String to ULONG
|
||||
*Value = wcstoul(String, &StopString, 10);
|
||||
if ((errno != ERANGE) && (errno != 0 || *StopString != UNICODE_NULL))
|
||||
return false;
|
||||
// The conversion was successful
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
@@ -557,6 +567,40 @@ Cleanup:
|
||||
return Success;
|
||||
}
|
||||
|
||||
static bool
|
||||
GetUlongOptionInRange(
|
||||
_In_ int argc,
|
||||
_In_ wchar_t *argv[],
|
||||
_Inout_ int *i,
|
||||
_Out_ ULONG *Value,
|
||||
_In_ ULONG MinimumValue,
|
||||
_In_ ULONG MaximumValue)
|
||||
{
|
||||
ULONG ParsedValue = 0;
|
||||
|
||||
// Check if we have enough values
|
||||
if ((*i + 1) > (argc - 1))
|
||||
{
|
||||
OutputText(IDS_MISSING_OPTION_VALUE, argv[*i]);
|
||||
return false;
|
||||
}
|
||||
|
||||
(*i)++;
|
||||
|
||||
// Try to parse and convert the value as ULONG.
|
||||
// Check if ParsedValue is within the specified range.
|
||||
if (!GetULONG(argv[*i], &ParsedValue) ||
|
||||
((ParsedValue < MinimumValue) || (ParsedValue > MaximumValue)))
|
||||
{
|
||||
(*i)--;
|
||||
OutputText(IDS_BAD_OPTION_VALUE, argv[*i]);
|
||||
return false;
|
||||
}
|
||||
|
||||
*Value = ParsedValue;
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
ParseCmdline(int argc, wchar_t *argv[])
|
||||
{
|
||||
@@ -568,7 +612,7 @@ ParseCmdline(int argc, wchar_t *argv[])
|
||||
|
||||
for (int i = 1; i < argc; i++)
|
||||
{
|
||||
if (argv[i][0] == '-')
|
||||
if (argv[i][0] == '-' || argv[i][0] == '/')
|
||||
{
|
||||
switch (argv[i][1])
|
||||
{
|
||||
@@ -577,7 +621,15 @@ ParseCmdline(int argc, wchar_t *argv[])
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
Info.MaxHops = GetULONG(argv[++i]);
|
||||
if (!GetUlongOptionInRange(argc,
|
||||
argv,
|
||||
&i,
|
||||
&Info.MaxHops,
|
||||
MIN_HOP_COUNT,
|
||||
MAX_HOP_COUNT))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'j':
|
||||
@@ -585,7 +637,15 @@ ParseCmdline(int argc, wchar_t *argv[])
|
||||
return false;
|
||||
|
||||
case 'w':
|
||||
Info.Timeout = GetULONG(argv[++i]);
|
||||
if (!GetUlongOptionInRange(argc,
|
||||
argv,
|
||||
&i,
|
||||
&Info.Timeout,
|
||||
MIN_MILLISECONDS,
|
||||
MAX_MILLISECONDS))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
||||
case '4':
|
||||
@@ -606,11 +666,25 @@ ParseCmdline(int argc, wchar_t *argv[])
|
||||
}
|
||||
else
|
||||
{
|
||||
// The host must be the last argument
|
||||
if (i != (argc - 1))
|
||||
{
|
||||
Usage();
|
||||
return false;
|
||||
}
|
||||
|
||||
StringCchCopyW(Info.HostName, NI_MAXHOST, argv[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for missing host
|
||||
if (Info.HostName[0] == UNICODE_NULL)
|
||||
{
|
||||
OutputText(IDS_MISSING_TARGET);
|
||||
Usage();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@@ -176,6 +176,7 @@ void PerfDataRefresh(void)
|
||||
PSID ProcessUser;
|
||||
ULONG Buffer[64]; /* must be 4 bytes aligned! */
|
||||
ULONG cwcUserName;
|
||||
BOOL bIsWow64;
|
||||
|
||||
/* Get new system time */
|
||||
status = NtQuerySystemInformation(SystemTimeOfDayInformation, &SysTimeInfo, sizeof(SysTimeInfo), NULL);
|
||||
@@ -389,6 +390,11 @@ ReadProcOwner:
|
||||
pPerfData[Idx].GDIObjectCount = GetGuiResources(hProcess, GR_GDIOBJECTS);
|
||||
}
|
||||
|
||||
if (IsWow64Process(hProcess, &bIsWow64) && bIsWow64)
|
||||
{
|
||||
wcscat(pPerfData[Idx].ImageName, L" *32");
|
||||
}
|
||||
|
||||
GetProcessIoCounters(hProcess, &pPerfData[Idx].IOCounters);
|
||||
CloseHandle(hProcess);
|
||||
} else {
|
||||
|
@@ -12,7 +12,7 @@
|
||||
|
||||
typedef struct _PERFDATA
|
||||
{
|
||||
WCHAR ImageName[MAX_PATH];
|
||||
WCHAR ImageName[MAX_PATH + _countof(L" *32") - 1];
|
||||
HANDLE ProcessId;
|
||||
WCHAR UserName[MAX_PATH];
|
||||
ULONG SessionId;
|
||||
|
@@ -509,7 +509,7 @@ PDHCP_ADAPTER AdapterFindIndex( unsigned int indx ) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PDHCP_ADAPTER AdapterFindName( const WCHAR *name ) {
|
||||
PDHCP_ADAPTER AdapterFindName( const CHAR *name ) {
|
||||
PDHCP_ADAPTER Adapter;
|
||||
PLIST_ENTRY ListEntry;
|
||||
|
||||
@@ -517,7 +517,7 @@ PDHCP_ADAPTER AdapterFindName( const WCHAR *name ) {
|
||||
ListEntry != &AdapterList;
|
||||
ListEntry = ListEntry->Flink ) {
|
||||
Adapter = CONTAINING_RECORD( ListEntry, DHCP_ADAPTER, ListEntry );
|
||||
if( !_wcsicmp( Adapter->IfMib.wszName, name ) ) return Adapter;
|
||||
if( !stricmp((const CHAR*)Adapter->IfMib.bDescr, name ) ) return Adapter;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
@@ -33,6 +33,101 @@ VOID ApiFree() {
|
||||
|
||||
/* This represents the service portion of the DHCP client API */
|
||||
|
||||
DWORD
|
||||
DSAcquireParams(
|
||||
_In_ PipeSendFunc Send,
|
||||
_In_ HANDLE CommPipe,
|
||||
_Out_ COMM_DHCP_REQ *Req)
|
||||
{
|
||||
COMM_DHCP_REPLY Reply;
|
||||
PDHCP_ADAPTER Adapter;
|
||||
struct protocol* proto;
|
||||
|
||||
DPRINT1("DSAcquireParams()\n");
|
||||
|
||||
ApiLock();
|
||||
|
||||
Adapter = AdapterFindName(Req->Body.AcquireParams.AdapterName);
|
||||
DPRINT1("Adapter: %p\n", Adapter);
|
||||
|
||||
if (Adapter == NULL || Adapter->DhclientState.state == S_STATIC)
|
||||
{
|
||||
Reply.Reply = 0;
|
||||
ApiUnlock();
|
||||
return Send(CommPipe, &Reply);
|
||||
}
|
||||
|
||||
Reply.Reply = 1;
|
||||
|
||||
proto = find_protocol_by_adapter(&Adapter->DhclientInfo);
|
||||
if (proto)
|
||||
remove_protocol(proto);
|
||||
|
||||
add_protocol(Adapter->DhclientInfo.name,
|
||||
Adapter->DhclientInfo.rfdesc, got_one,
|
||||
&Adapter->DhclientInfo);
|
||||
|
||||
Adapter->DhclientInfo.client->state = S_INIT;
|
||||
state_reboot(&Adapter->DhclientInfo);
|
||||
|
||||
if (hAdapterStateChangedEvent != NULL)
|
||||
SetEvent(hAdapterStateChangedEvent);
|
||||
|
||||
ApiUnlock();
|
||||
|
||||
return Send(CommPipe, &Reply);
|
||||
}
|
||||
|
||||
|
||||
DWORD
|
||||
DSReleaseParams(
|
||||
_In_ PipeSendFunc Send,
|
||||
_In_ HANDLE CommPipe,
|
||||
_Out_ COMM_DHCP_REQ *Req)
|
||||
{
|
||||
COMM_DHCP_REPLY Reply;
|
||||
PDHCP_ADAPTER Adapter;
|
||||
struct protocol* proto;
|
||||
|
||||
DPRINT1("DSReleaseParams()\n");
|
||||
|
||||
ApiLock();
|
||||
|
||||
Adapter = AdapterFindName(Req->Body.AcquireParams.AdapterName);
|
||||
DPRINT1("Adapter: %p\n", Adapter);
|
||||
|
||||
Reply.Reply = Adapter ? 1 : 0;
|
||||
|
||||
if (Adapter)
|
||||
{
|
||||
if (Adapter->NteContext)
|
||||
{
|
||||
DeleteIPAddress(Adapter->NteContext);
|
||||
Adapter->NteContext = 0;
|
||||
}
|
||||
if (Adapter->RouterMib.dwForwardNextHop)
|
||||
{
|
||||
DeleteIpForwardEntry(&Adapter->RouterMib);
|
||||
Adapter->RouterMib.dwForwardNextHop = 0;
|
||||
}
|
||||
|
||||
proto = find_protocol_by_adapter(&Adapter->DhclientInfo);
|
||||
if (proto)
|
||||
remove_protocol(proto);
|
||||
|
||||
Adapter->DhclientInfo.client->active = NULL;
|
||||
Adapter->DhclientInfo.client->state = S_INIT;
|
||||
|
||||
if (hAdapterStateChangedEvent != NULL)
|
||||
SetEvent(hAdapterStateChangedEvent);
|
||||
}
|
||||
|
||||
ApiUnlock();
|
||||
|
||||
return Send(CommPipe, &Reply);
|
||||
}
|
||||
|
||||
|
||||
DWORD DSLeaseIpAddress( PipeSendFunc Send, HANDLE CommPipe, COMM_DHCP_REQ *Req ) {
|
||||
COMM_DHCP_REPLY Reply;
|
||||
PDHCP_ADAPTER Adapter;
|
||||
@@ -205,40 +300,3 @@ DWORD DSStaticRefreshParams( PipeSendFunc Send, HANDLE CommPipe, COMM_DHCP_REQ *
|
||||
|
||||
return Send(CommPipe, &Reply );
|
||||
}
|
||||
|
||||
DWORD DSGetAdapterInfo( PipeSendFunc Send, HANDLE CommPipe, COMM_DHCP_REQ *Req ) {
|
||||
COMM_DHCP_REPLY Reply;
|
||||
PDHCP_ADAPTER Adapter;
|
||||
|
||||
ApiLock();
|
||||
|
||||
Adapter = AdapterFindIndex( Req->AdapterIndex );
|
||||
|
||||
Reply.Reply = Adapter ? 1 : 0;
|
||||
|
||||
if( Adapter ) {
|
||||
Reply.GetAdapterInfo.DhcpEnabled = (S_STATIC != Adapter->DhclientState.state);
|
||||
if (S_BOUND == Adapter->DhclientState.state) {
|
||||
if (sizeof(Reply.GetAdapterInfo.DhcpServer) ==
|
||||
Adapter->DhclientState.active->serveraddress.len) {
|
||||
memcpy(&Reply.GetAdapterInfo.DhcpServer,
|
||||
Adapter->DhclientState.active->serveraddress.iabuf,
|
||||
Adapter->DhclientState.active->serveraddress.len);
|
||||
} else {
|
||||
DPRINT1("Unexpected server address len %d\n",
|
||||
Adapter->DhclientState.active->serveraddress.len);
|
||||
Reply.GetAdapterInfo.DhcpServer = htonl(INADDR_NONE);
|
||||
}
|
||||
Reply.GetAdapterInfo.LeaseObtained = Adapter->DhclientState.active->obtained;
|
||||
Reply.GetAdapterInfo.LeaseExpires = Adapter->DhclientState.active->expiry;
|
||||
} else {
|
||||
Reply.GetAdapterInfo.DhcpServer = htonl(INADDR_NONE);
|
||||
Reply.GetAdapterInfo.LeaseObtained = 0;
|
||||
Reply.GetAdapterInfo.LeaseExpires = 0;
|
||||
}
|
||||
}
|
||||
|
||||
ApiUnlock();
|
||||
|
||||
return Send(CommPipe, &Reply );
|
||||
}
|
||||
|
@@ -532,6 +532,10 @@ void setup_adapter( PDHCP_ADAPTER Adapter, struct client_lease *new_lease ) {
|
||||
RegSetValueExA(hkey, "DhcpSubnetMask", 0, REG_SZ, (LPBYTE)Buffer, strlen(Buffer)+1);
|
||||
dwEnableDHCP = 1;
|
||||
RegSetValueExA(hkey, "EnableDHCP", 0, REG_DWORD, (LPBYTE)&dwEnableDHCP, sizeof(DWORD));
|
||||
|
||||
RegSetValueExA(hkey, "LeaseObtainedTime", 0, REG_DWORD, (LPBYTE)&new_lease->obtained, sizeof(DWORD));
|
||||
RegSetValueExA(hkey, "LeaseTerminatesTime", 0, REG_DWORD, (LPBYTE)&new_lease->expiry, sizeof(DWORD));
|
||||
RegSetValueExA(hkey, "DhcpServer", 0, REG_SZ, (LPBYTE)piaddr(new_lease->serveraddress), strlen(piaddr(new_lease->serveraddress))+1);
|
||||
}
|
||||
|
||||
if( !NT_SUCCESS(Status) )
|
||||
|
@@ -377,11 +377,21 @@ DWORD WINAPI PipeThreadProc( LPVOID Parameter ) {
|
||||
}
|
||||
}
|
||||
|
||||
if( Result ) {
|
||||
switch( Req.Type ) {
|
||||
case DhcpReqQueryHWInfo:
|
||||
DSQueryHWInfo( PipeSend, CommPipe, &Req );
|
||||
break;
|
||||
if( Result )
|
||||
{
|
||||
switch( Req.Type )
|
||||
{
|
||||
case DhcpReqAcquireParams:
|
||||
DSAcquireParams(PipeSend, CommPipe, &Req);
|
||||
break;
|
||||
|
||||
case DhcpReqReleaseParams:
|
||||
DSReleaseParams(PipeSend, CommPipe, &Req);
|
||||
break;
|
||||
|
||||
case DhcpReqQueryHWInfo:
|
||||
DSQueryHWInfo(PipeSend, CommPipe, &Req);
|
||||
break;
|
||||
|
||||
case DhcpReqLeaseIpAddress:
|
||||
DSLeaseIpAddress( PipeSend, CommPipe, &Req );
|
||||
@@ -399,10 +409,6 @@ DWORD WINAPI PipeThreadProc( LPVOID Parameter ) {
|
||||
DSStaticRefreshParams( PipeSend, CommPipe, &Req );
|
||||
break;
|
||||
|
||||
case DhcpReqGetAdapterInfo:
|
||||
DSGetAdapterInfo( PipeSend, CommPipe, &Req );
|
||||
break;
|
||||
|
||||
default:
|
||||
DPRINT1("Unrecognized request type %d\n", Req.Type);
|
||||
ZeroMemory( &Reply, sizeof( COMM_DHCP_REPLY ) );
|
||||
|
@@ -74,6 +74,69 @@ DhcpCApiCleanup(VOID)
|
||||
PipeHandle = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
|
||||
|
||||
/* FIXME: The adapter name should be a unicode string */
|
||||
DWORD
|
||||
APIENTRY
|
||||
DhcpAcquireParameters(
|
||||
_In_ PSTR AdapterName)
|
||||
{
|
||||
COMM_DHCP_REQ Req;
|
||||
COMM_DHCP_REPLY Reply;
|
||||
DWORD BytesRead;
|
||||
BOOL Result;
|
||||
|
||||
DPRINT1("DhcpAcquireParameters(%s)\n", AdapterName);
|
||||
|
||||
ASSERT(PipeHandle != INVALID_HANDLE_VALUE);
|
||||
|
||||
Req.Type = DhcpReqAcquireParams;
|
||||
strcpy(Req.Body.AcquireParams.AdapterName, AdapterName);
|
||||
|
||||
Result = TransactNamedPipe(PipeHandle,
|
||||
&Req, sizeof(Req),
|
||||
&Reply, sizeof(Reply),
|
||||
&BytesRead, NULL);
|
||||
if (!Result)
|
||||
{
|
||||
/* Pipe transaction failed */
|
||||
return GetLastError();
|
||||
}
|
||||
|
||||
return Reply.Reply;
|
||||
}
|
||||
|
||||
/* FIXME: The adapter name should be a unicode string */
|
||||
DWORD
|
||||
APIENTRY
|
||||
DhcpReleaseParameters(
|
||||
_In_ PSTR AdapterName)
|
||||
{
|
||||
COMM_DHCP_REQ Req;
|
||||
COMM_DHCP_REPLY Reply;
|
||||
DWORD BytesRead;
|
||||
BOOL Result;
|
||||
|
||||
DPRINT1("DhcpReleaseParameters(%s)\n", AdapterName);
|
||||
|
||||
ASSERT(PipeHandle != INVALID_HANDLE_VALUE);
|
||||
|
||||
Req.Type = DhcpReqReleaseParams;
|
||||
strcpy(Req.Body.AcquireParams.AdapterName, AdapterName);
|
||||
|
||||
Result = TransactNamedPipe(PipeHandle,
|
||||
&Req, sizeof(Req),
|
||||
&Reply, sizeof(Reply),
|
||||
&BytesRead, NULL);
|
||||
if (!Result)
|
||||
{
|
||||
/* Pipe transaction failed */
|
||||
return GetLastError();
|
||||
}
|
||||
|
||||
return Reply.Reply;
|
||||
}
|
||||
|
||||
DWORD APIENTRY
|
||||
DhcpQueryHWInfo(DWORD AdapterIndex,
|
||||
PDWORD MediaType,
|
||||
@@ -272,74 +335,6 @@ DhcpRequestParams(DWORD Flags,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
* Get DHCP info for an adapter
|
||||
*
|
||||
* \param[in] AdapterIndex
|
||||
* Index of the adapter (iphlpapi-style) for which info is
|
||||
* requested
|
||||
*
|
||||
* \param[out] DhcpEnabled
|
||||
* Returns whether DHCP is enabled for the adapter
|
||||
*
|
||||
* \param[out] DhcpServer
|
||||
* Returns DHCP server IP address (255.255.255.255 if no
|
||||
* server reached yet), in network byte order
|
||||
*
|
||||
* \param[out] LeaseObtained
|
||||
* Returns time at which the lease was obtained
|
||||
*
|
||||
* \param[out] LeaseExpires
|
||||
* Returns time at which the lease will expire
|
||||
*
|
||||
* \return non-zero on success
|
||||
*
|
||||
* \remarks This is a ReactOS-only routine
|
||||
*/
|
||||
DWORD APIENTRY
|
||||
DhcpRosGetAdapterInfo(DWORD AdapterIndex,
|
||||
PBOOL DhcpEnabled,
|
||||
PDWORD DhcpServer,
|
||||
time_t* LeaseObtained,
|
||||
time_t* LeaseExpires)
|
||||
{
|
||||
COMM_DHCP_REQ Req;
|
||||
COMM_DHCP_REPLY Reply;
|
||||
DWORD BytesRead;
|
||||
BOOL Result;
|
||||
|
||||
ASSERT(PipeHandle != INVALID_HANDLE_VALUE);
|
||||
|
||||
Req.Type = DhcpReqGetAdapterInfo;
|
||||
Req.AdapterIndex = AdapterIndex;
|
||||
|
||||
Result = TransactNamedPipe(PipeHandle,
|
||||
&Req, sizeof(Req),
|
||||
&Reply, sizeof(Reply),
|
||||
&BytesRead, NULL);
|
||||
|
||||
if (Result && Reply.Reply != 0)
|
||||
*DhcpEnabled = Reply.GetAdapterInfo.DhcpEnabled;
|
||||
else
|
||||
*DhcpEnabled = FALSE;
|
||||
|
||||
if (*DhcpEnabled)
|
||||
{
|
||||
*DhcpServer = Reply.GetAdapterInfo.DhcpServer;
|
||||
*LeaseObtained = Reply.GetAdapterInfo.LeaseObtained;
|
||||
*LeaseExpires = Reply.GetAdapterInfo.LeaseExpires;
|
||||
}
|
||||
else
|
||||
{
|
||||
*DhcpServer = INADDR_NONE;
|
||||
*LeaseObtained = 0;
|
||||
*LeaseExpires = 0;
|
||||
}
|
||||
|
||||
return Reply.Reply;
|
||||
}
|
||||
|
||||
|
||||
static VOID
|
||||
UpdateServiceStatus(DWORD dwState)
|
||||
{
|
||||
|
@@ -5,7 +5,7 @@
|
||||
# PURPOSE: dhcpcsvc exports
|
||||
# COPYRIGHT: Copyright 2006 Ge van Geldorp <gvg@reactos.org>
|
||||
#
|
||||
@ stub DhcpAcquireParameters
|
||||
@ stdcall DhcpAcquireParameters(str)
|
||||
@ stub DhcpAcquireParametersByBroadcast
|
||||
@ stdcall DhcpCApiCleanup()
|
||||
@ stdcall DhcpCApiInitialize(ptr)
|
||||
@@ -27,7 +27,7 @@
|
||||
@ stub DhcpRegisterParamChange
|
||||
@ stdcall DhcpReleaseIpAddressLease(long)
|
||||
@ stub DhcpReleaseIpAddressLeaseEx
|
||||
@ stub DhcpReleaseParameters
|
||||
@ stdcall DhcpReleaseParameters(str)
|
||||
@ stub DhcpRemoveDNSRegistrations
|
||||
@ stdcall DhcpRenewIpAddressLease(long)
|
||||
@ stub DhcpRenewIpAddressLeaseEx
|
||||
@@ -42,5 +42,4 @@
|
||||
@ stub McastReleaseAddress
|
||||
@ stub McastRenewAddress
|
||||
@ stub McastRequestAddress
|
||||
@ stdcall DhcpRosGetAdapterInfo(long ptr ptr ptr ptr)
|
||||
@ stdcall ServiceMain(long ptr)
|
||||
|
@@ -13,7 +13,7 @@
|
||||
#define NTOS_MODE_USER
|
||||
#include <ndk/rtlfuncs.h>
|
||||
#include <dhcpcsdk.h>
|
||||
#include <dhcp/rosdhcp_public.h>
|
||||
#include <rosdhcp_pipe.h>
|
||||
|
||||
#include "debug.h"
|
||||
|
||||
@@ -90,6 +90,7 @@ void AdapterStop(VOID);
|
||||
extern PDHCP_ADAPTER AdapterGetFirst(VOID);
|
||||
extern PDHCP_ADAPTER AdapterGetNext(PDHCP_ADAPTER);
|
||||
extern PDHCP_ADAPTER AdapterFindIndex( unsigned int AdapterIndex );
|
||||
extern PDHCP_ADAPTER AdapterFindName(const CHAR *name);
|
||||
extern PDHCP_ADAPTER AdapterFindInfo( struct interface_info *info );
|
||||
extern PDHCP_ADAPTER AdapterFindByHardwareAddress( u_int8_t haddr[16], u_int8_t hlen );
|
||||
extern HANDLE PipeInit(HANDLE hStopEvent);
|
||||
@@ -97,6 +98,8 @@ extern VOID ApiInit(VOID);
|
||||
extern VOID ApiFree(VOID);
|
||||
extern VOID ApiLock(VOID);
|
||||
extern VOID ApiUnlock(VOID);
|
||||
extern DWORD DSAcquireParams(PipeSendFunc Send, HANDLE CommPipe, COMM_DHCP_REQ *Req);
|
||||
extern DWORD DSReleaseParams(PipeSendFunc Send, HANDLE CommPipe, COMM_DHCP_REQ *Req);
|
||||
extern DWORD DSQueryHWInfo( PipeSendFunc Send, HANDLE CommPipe, COMM_DHCP_REQ *Req );
|
||||
extern DWORD DSLeaseIpAddress( PipeSendFunc Send, HANDLE CommPipe, COMM_DHCP_REQ *Req );
|
||||
extern DWORD DSRenewIpAddressLease( PipeSendFunc Send, HANDLE CommPipe, COMM_DHCP_REQ *Req );
|
||||
|
@@ -1,19 +1,25 @@
|
||||
#ifndef ROSDHCP_PUBLIC_H
|
||||
#define ROSDHCP_PUBLIC_H
|
||||
#ifndef ROSDHCP_PIPE_H
|
||||
#define ROSDHCP_PIPE_H
|
||||
|
||||
enum {
|
||||
DhcpReqAcquireParams,
|
||||
DhcpReqReleaseParams,
|
||||
DhcpReqLeaseIpAddress,
|
||||
DhcpReqQueryHWInfo,
|
||||
DhcpReqReleaseIpAddress,
|
||||
DhcpReqRenewIpAddress,
|
||||
DhcpReqStaticRefreshParams,
|
||||
DhcpReqGetAdapterInfo,
|
||||
};
|
||||
|
||||
typedef struct _COMM_DHCP_REQ {
|
||||
UINT Type;
|
||||
DWORD AdapterIndex;
|
||||
union {
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
CHAR AdapterName[64];
|
||||
} AcquireParams;
|
||||
struct {
|
||||
BOOL Inserted;
|
||||
} PnpEvent;
|
||||
@@ -40,14 +46,8 @@ typedef union _COMM_DHCP_REPLY {
|
||||
DWORD Mtu;
|
||||
DWORD Speed;
|
||||
} QueryHWInfo;
|
||||
struct {
|
||||
BOOL DhcpEnabled;
|
||||
DWORD DhcpServer;
|
||||
time_t LeaseObtained;
|
||||
time_t LeaseExpires;
|
||||
} GetAdapterInfo;
|
||||
} COMM_DHCP_REPLY;
|
||||
|
||||
#define DHCP_PIPE_NAME L"\\\\.\\pipe\\dhcpclient"
|
||||
|
||||
#endif/*ROSDHCP_PUBLIC_H*/
|
||||
#endif/*ROSDHCP_PIPE_H*/
|
@@ -118,6 +118,12 @@ VOID
|
||||
ProcessDeviceClassChangeEvent(
|
||||
_In_ PPLUGPLAY_EVENT_BLOCK PnpEvent)
|
||||
{
|
||||
RPC_STATUS RpcStatus;
|
||||
PLIST_ENTRY Current;
|
||||
PNOTIFY_ENTRY pNotifyData;
|
||||
PDEV_BROADCAST_DEVICEINTERFACE_W pData;
|
||||
DWORD dwSize;
|
||||
|
||||
DPRINT("ProcessDeviceClassChangeEvent(%p)\n", PnpEvent);
|
||||
DPRINT("SymbolicLink: %S\n", PnpEvent->DeviceClass.SymbolicLinkName);
|
||||
DPRINT("ClassGuid: {%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}\n",
|
||||
@@ -125,6 +131,50 @@ ProcessDeviceClassChangeEvent(
|
||||
PnpEvent->DeviceClass.ClassGuid.Data4[0], PnpEvent->DeviceClass.ClassGuid.Data4[1], PnpEvent->DeviceClass.ClassGuid.Data4[2],
|
||||
PnpEvent->DeviceClass.ClassGuid.Data4[3], PnpEvent->DeviceClass.ClassGuid.Data4[4], PnpEvent->DeviceClass.ClassGuid.Data4[5],
|
||||
PnpEvent->DeviceClass.ClassGuid.Data4[6], PnpEvent->DeviceClass.ClassGuid.Data4[7]);
|
||||
|
||||
RtlAcquireResourceShared(&NotificationListLock, TRUE);
|
||||
|
||||
Current = NotificationListHead.Flink;
|
||||
while (Current != &NotificationListHead)
|
||||
{
|
||||
pNotifyData = CONTAINING_RECORD(Current, NOTIFY_ENTRY, ListEntry);
|
||||
if ((pNotifyData->dwType == CLASS_NOTIFICATION) &&
|
||||
((pNotifyData->ulFlags & DEVICE_NOTIFY_ALL_INTERFACE_CLASSES) ||
|
||||
(UuidEqual(&PnpEvent->DeviceClass.ClassGuid, &pNotifyData->ClassGuid, &RpcStatus))))
|
||||
{
|
||||
if ((pNotifyData->ulFlags & DEVICE_NOTIFY_WINDOW_HANDLE) == DEVICE_NOTIFY_WINDOW_HANDLE)
|
||||
{
|
||||
dwSize = sizeof(DEV_BROADCAST_DEVICEINTERFACE_W) + wcslen(PnpEvent->DeviceClass.SymbolicLinkName) * sizeof(WCHAR);
|
||||
pData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize);
|
||||
|
||||
pData->dbcc_size = dwSize;
|
||||
pData->dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
|
||||
CopyMemory(&pData->dbcc_classguid, &PnpEvent->DeviceClass.ClassGuid, sizeof(GUID));
|
||||
wcscpy(pData->dbcc_name, PnpEvent->DeviceClass.SymbolicLinkName);
|
||||
|
||||
if (UuidEqual(&PnpEvent->EventGuid, (UUID*)&GUID_DEVICE_INTERFACE_ARRIVAL, &RpcStatus))
|
||||
{
|
||||
DPRINT("Interface arrival: %S\n", PnpEvent->DeviceClass.SymbolicLinkName);
|
||||
SendMessageW((HANDLE)pNotifyData->hRecipient, WM_DEVICECHANGE, DBT_DEVICEARRIVAL, (LPARAM)pData);
|
||||
}
|
||||
else if (UuidEqual(&PnpEvent->EventGuid, (UUID*)&GUID_DEVICE_INTERFACE_REMOVAL, &RpcStatus))
|
||||
{
|
||||
DPRINT("Interface removal: %S\n", PnpEvent->DeviceClass.SymbolicLinkName);
|
||||
SendMessageW((HANDLE)pNotifyData->hRecipient, WM_DEVICECHANGE, DBT_DEVICEREMOVECOMPLETE, (LPARAM)pData);
|
||||
}
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, pData);
|
||||
}
|
||||
else
|
||||
{
|
||||
DPRINT1("Service notification is not implemented yet!\n");
|
||||
}
|
||||
}
|
||||
|
||||
Current = Current->Flink;
|
||||
}
|
||||
|
||||
RtlReleaseResource(&NotificationListLock);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -26,6 +26,7 @@
|
||||
#include <rtlfuncs.h>
|
||||
#include <setypes.h>
|
||||
#include <umpnpmgr/sysguid.h>
|
||||
#include <wdmguid.h>
|
||||
#include <cfgmgr32.h>
|
||||
#include <regstr.h>
|
||||
#include <userenv.h>
|
||||
@@ -41,10 +42,21 @@ typedef struct
|
||||
WCHAR DeviceIds[ANYSIZE_ARRAY];
|
||||
} DeviceInstallParams;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CLASS_NOTIFICATION = 1,
|
||||
TARGET_NOTIFICATION
|
||||
} NOTIFICATION_TYPE;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
LIST_ENTRY ListEntry;
|
||||
NOTIFICATION_TYPE dwType;
|
||||
PWSTR pszName;
|
||||
DWORD_PTR hRecipient;
|
||||
DWORD ulFlags;
|
||||
GUID ClassGuid;
|
||||
} NOTIFY_ENTRY, *PNOTIFY_ENTRY;
|
||||
|
||||
/* event.c */
|
||||
@@ -78,6 +90,7 @@ DeviceInstallThread(
|
||||
/* rpcserver.c */
|
||||
|
||||
extern LIST_ENTRY NotificationListHead;
|
||||
extern RTL_RESOURCE NotificationListLock;
|
||||
|
||||
DWORD
|
||||
WINAPI
|
||||
|
@@ -37,8 +37,10 @@
|
||||
/* GLOBALS ******************************************************************/
|
||||
|
||||
static WCHAR szRootDeviceInstanceID[] = L"HTREE\\ROOT\\0";
|
||||
LUID LoadDriverPrivilege = {SE_LOAD_DRIVER_PRIVILEGE, 0};
|
||||
|
||||
LIST_ENTRY NotificationListHead;
|
||||
RTL_RESOURCE NotificationListLock;
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
@@ -53,6 +55,7 @@ RpcServerThread(LPVOID lpParameter)
|
||||
DPRINT("RpcServerThread() called\n");
|
||||
|
||||
InitializeListHead(&NotificationListHead);
|
||||
RtlInitializeResource(&NotificationListLock);
|
||||
|
||||
#if 0
|
||||
/* 2k/XP/2k3-compatible protocol sequence/endpoint */
|
||||
@@ -5051,6 +5054,8 @@ PNP_RegisterNotification(
|
||||
pNotifyData = RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(NOTIFY_ENTRY));
|
||||
if (pNotifyData == NULL)
|
||||
return CR_OUT_OF_MEMORY;
|
||||
|
||||
pNotifyData->dwType = CLASS_NOTIFICATION;
|
||||
|
||||
if (pszName != NULL)
|
||||
{
|
||||
@@ -5064,8 +5069,20 @@ PNP_RegisterNotification(
|
||||
}
|
||||
}
|
||||
|
||||
pNotifyData->hRecipient = hRecipient;
|
||||
pNotifyData->ulFlags = ulFlags;
|
||||
|
||||
if ((ulFlags & DEVICE_NOTIFY_ALL_INTERFACE_CLASSES) == 0)
|
||||
{
|
||||
CopyMemory(&pNotifyData->ClassGuid,
|
||||
&pBroadcastDeviceInterface->dbcc_classguid,
|
||||
sizeof(GUID));
|
||||
}
|
||||
|
||||
/* Add the entry to the notification list */
|
||||
RtlAcquireResourceExclusive(&NotificationListLock, TRUE);
|
||||
InsertTailList(&NotificationListHead, &pNotifyData->ListEntry);
|
||||
RtlReleaseResource(&NotificationListLock);
|
||||
|
||||
DPRINT("pNotifyData: %p\n", pNotifyData);
|
||||
*pNotifyHandle = (PNP_NOTIFY_HANDLE)pNotifyData;
|
||||
@@ -5108,7 +5125,10 @@ PNP_UnregisterNotification(
|
||||
if (pEntry == NULL)
|
||||
return CR_INVALID_DATA;
|
||||
|
||||
RtlAcquireResourceExclusive(&NotificationListLock, TRUE);
|
||||
RemoveEntryList(&pEntry->ListEntry);
|
||||
RtlReleaseResource(&NotificationListLock);
|
||||
|
||||
if (pEntry->pszName)
|
||||
RtlFreeHeap(RtlGetProcessHeap(), 0, pEntry->pszName);
|
||||
RtlFreeHeap(RtlGetProcessHeap(), 0, pEntry);
|
||||
|
@@ -35,14 +35,18 @@ list(APPEND SOURCE
|
||||
setuplib.c
|
||||
precomp.h)
|
||||
|
||||
# Static library used for the dll and for setuplib_unittest.
|
||||
add_library(setuplib_static ${SOURCE})
|
||||
add_pch(setuplib_static precomp.h SOURCE)
|
||||
add_dependencies(setuplib_static xdk) # psdk
|
||||
|
||||
add_library(setuplib SHARED
|
||||
${SOURCE}
|
||||
main.c
|
||||
setuplib.rc
|
||||
${CMAKE_CURRENT_BINARY_DIR}/setuplib.def)
|
||||
target_link_libraries(setuplib setuplib_static)
|
||||
|
||||
add_pch(setuplib precomp.h SOURCE)
|
||||
add_dependencies(setuplib xdk) # psdk
|
||||
|
||||
set_module_type(setuplib nativedll)
|
||||
target_link_libraries(setuplib ext2lib vfatlib btrfslib ${PSEH_LIB})
|
||||
add_importlibs(setuplib ntdll)
|
||||
|
49
base/setup/lib/main.c
Normal file
49
base/setup/lib/main.c
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* PROJECT: ReactOS Setup Library
|
||||
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||
* PURPOSE: DLL Main Routine
|
||||
* COPYRIGHT: Copyright 2025 Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
|
||||
*/
|
||||
|
||||
/* INCLUDES ******************************************************************/
|
||||
|
||||
/* PSDK/NDK Headers */
|
||||
#define WIN32_NO_STATUS
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
|
||||
#define NTOS_MODE_USER
|
||||
// #include <ndk/umfuncs.h>
|
||||
#include <ndk/rtlfuncs.h>
|
||||
|
||||
/* GLOBALS *******************************************************************/
|
||||
|
||||
extern HANDLE ProcessHeap;
|
||||
|
||||
/* ENTRY-POINT ***************************************************************/
|
||||
|
||||
/* Declared in ndk/umfuncs.h */
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
LdrDisableThreadCalloutsForDll(
|
||||
_In_ PVOID BaseAddress);
|
||||
|
||||
BOOL
|
||||
NTAPI
|
||||
DllMain(
|
||||
_In_ HINSTANCE hDll,
|
||||
_In_ ULONG dwReason,
|
||||
_In_opt_ PVOID pReserved)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pReserved);
|
||||
|
||||
if (dwReason == DLL_PROCESS_ATTACH)
|
||||
{
|
||||
LdrDisableThreadCalloutsForDll(hDll);
|
||||
ProcessHeap = RtlGetProcessHeap();
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* EOF */
|
@@ -1405,31 +1405,4 @@ Cleanup:
|
||||
return ErrorNumber;
|
||||
}
|
||||
|
||||
|
||||
/* ENTRY-POINT ***************************************************************/
|
||||
|
||||
/* Declared in ndk/umfuncs.h */
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
LdrDisableThreadCalloutsForDll(
|
||||
_In_ PVOID BaseAddress);
|
||||
|
||||
BOOL
|
||||
NTAPI
|
||||
DllMain(
|
||||
_In_ HINSTANCE hDll,
|
||||
_In_ ULONG dwReason,
|
||||
_In_opt_ PVOID pReserved)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(pReserved);
|
||||
|
||||
if (dwReason == DLL_PROCESS_ATTACH)
|
||||
{
|
||||
LdrDisableThreadCalloutsForDll(hDll);
|
||||
ProcessHeap = RtlGetProcessHeap();
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
@@ -1,290 +1,470 @@
|
||||
/*
|
||||
* SHAppBarMessage implementation
|
||||
*
|
||||
* Copyright 2008 Vincent Povirk for CodeWeavers
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*
|
||||
* TODO: freedesktop _NET_WM_STRUT integration
|
||||
*
|
||||
* TODO: find when a fullscreen app is in the foreground and send FULLSCREENAPP
|
||||
* notifications
|
||||
*
|
||||
* TODO: detect changes in the screen size and send ABN_POSCHANGED ?
|
||||
*
|
||||
* TODO: multiple monitor support
|
||||
* PROJECT: ReactOS Explorer
|
||||
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
|
||||
* PURPOSE: AppBar implementation
|
||||
* COPYRIGHT: Copyright 2008 Vincent Povirk for CodeWeavers
|
||||
* Copyright 2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||
*/
|
||||
|
||||
//
|
||||
// Adapted from Wine appbar.c .
|
||||
//
|
||||
|
||||
#include "precomp.h"
|
||||
#include "appbar.h"
|
||||
|
||||
#include <wine/list.h>
|
||||
|
||||
#define GetPrimaryTaskbar() FindWindowW(L"Shell_TrayWnd", NULL)
|
||||
|
||||
struct appbar_cmd
|
||||
CAppBarManager::CAppBarManager()
|
||||
: m_hAppBarDPA(NULL)
|
||||
{
|
||||
DWORD dwMsg;
|
||||
ULONG return_map;
|
||||
DWORD return_process;
|
||||
struct _AppBarData abd;
|
||||
};
|
||||
}
|
||||
|
||||
struct appbar_response
|
||||
CAppBarManager::~CAppBarManager()
|
||||
{
|
||||
ULONGLONG result;
|
||||
struct _AppBarData abd;
|
||||
};
|
||||
DestroyAppBarDPA();
|
||||
}
|
||||
|
||||
struct appbar_data
|
||||
PAPPBAR CAppBarManager::FindAppBar(_In_ HWND hwndAppBar) const
|
||||
{
|
||||
struct list entry;
|
||||
HWND hwnd;
|
||||
UINT callback_msg;
|
||||
UINT edge;
|
||||
RECT rc;
|
||||
BOOL space_reserved;
|
||||
/* BOOL autohide; */
|
||||
};
|
||||
if (!m_hAppBarDPA)
|
||||
return NULL;
|
||||
|
||||
static struct list appbars = LIST_INIT(appbars);
|
||||
|
||||
static struct appbar_data* get_appbar(HWND hwnd)
|
||||
{
|
||||
struct appbar_data* data;
|
||||
|
||||
LIST_FOR_EACH_ENTRY(data, &appbars, struct appbar_data, entry)
|
||||
INT nItems = DPA_GetPtrCount(m_hAppBarDPA);
|
||||
while (--nItems >= 0)
|
||||
{
|
||||
if (data->hwnd == hwnd)
|
||||
return data;
|
||||
PAPPBAR pAppBar = (PAPPBAR)DPA_GetPtr(m_hAppBarDPA, nItems);
|
||||
if (pAppBar && hwndAppBar == pAppBar->hWnd)
|
||||
return pAppBar;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void appbar_notify_all(HMONITOR hMon, UINT uMsg, HWND hwndExclude, LPARAM lParam)
|
||||
void CAppBarManager::EliminateAppBar(_In_ INT iItem)
|
||||
{
|
||||
struct appbar_data* data;
|
||||
LocalFree(DPA_GetPtr(m_hAppBarDPA, iItem));
|
||||
DPA_DeletePtr(m_hAppBarDPA, iItem);
|
||||
}
|
||||
|
||||
LIST_FOR_EACH_ENTRY(data, &appbars, struct appbar_data, entry)
|
||||
void CAppBarManager::DestroyAppBarDPA()
|
||||
{
|
||||
if (!m_hAppBarDPA)
|
||||
return;
|
||||
|
||||
INT nItems = DPA_GetPtrCount(m_hAppBarDPA);
|
||||
while (--nItems >= 0)
|
||||
{
|
||||
if (data->hwnd == hwndExclude)
|
||||
continue;
|
||||
|
||||
if (hMon && hMon != MonitorFromWindow(data->hwnd, MONITOR_DEFAULTTONULL))
|
||||
continue;
|
||||
|
||||
SendMessageW(data->hwnd, data->callback_msg, uMsg, lParam);
|
||||
::LocalFree(DPA_GetPtr(m_hAppBarDPA, nItems));
|
||||
}
|
||||
|
||||
DPA_Destroy(m_hAppBarDPA);
|
||||
m_hAppBarDPA = NULL;
|
||||
}
|
||||
|
||||
/* send_poschanged: send ABN_POSCHANGED to every appbar except one */
|
||||
static void send_poschanged(HWND hwnd)
|
||||
// ABM_NEW
|
||||
BOOL CAppBarManager::OnAppBarNew(_In_ const APPBAR_COMMAND *pData)
|
||||
{
|
||||
appbar_notify_all(NULL, ABN_POSCHANGED, hwnd, 0);
|
||||
}
|
||||
HWND hWnd = (HWND)UlongToHandle(pData->abd.hWnd32);
|
||||
|
||||
/* appbar_cliprect: cut out parts of the rectangle that interfere with existing appbars */
|
||||
static void appbar_cliprect( HWND hwnd, RECT *rect )
|
||||
{
|
||||
struct appbar_data* data;
|
||||
LIST_FOR_EACH_ENTRY(data, &appbars, struct appbar_data, entry)
|
||||
if (m_hAppBarDPA)
|
||||
{
|
||||
if (data->hwnd == hwnd)
|
||||
if (FindAppBar(hWnd))
|
||||
{
|
||||
/* we only care about appbars that were added before this one */
|
||||
return;
|
||||
}
|
||||
if (data->space_reserved)
|
||||
{
|
||||
/* move in the side that corresponds to the other appbar's edge */
|
||||
switch (data->edge)
|
||||
{
|
||||
case ABE_BOTTOM:
|
||||
rect->bottom = min(rect->bottom, data->rc.top);
|
||||
break;
|
||||
case ABE_LEFT:
|
||||
rect->left = max(rect->left, data->rc.right);
|
||||
break;
|
||||
case ABE_RIGHT:
|
||||
rect->right = min(rect->right, data->rc.left);
|
||||
break;
|
||||
case ABE_TOP:
|
||||
rect->top = max(rect->top, data->rc.bottom);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static UINT_PTR handle_appbarmessage(DWORD msg, _AppBarData *abd)
|
||||
{
|
||||
struct appbar_data* data;
|
||||
HWND hwnd = abd->hWnd;
|
||||
|
||||
switch (msg)
|
||||
{
|
||||
case ABM_NEW:
|
||||
if (get_appbar(hwnd))
|
||||
{
|
||||
/* fail when adding an hwnd the second time */
|
||||
ERR("Already exists: %p\n", hWnd);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
data = (struct appbar_data*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct appbar_data));
|
||||
if (!data)
|
||||
{
|
||||
ERR("out of memory\n");
|
||||
return FALSE;
|
||||
}
|
||||
data->hwnd = hwnd;
|
||||
data->callback_msg = abd->uCallbackMessage;
|
||||
|
||||
list_add_tail(&appbars, &data->entry);
|
||||
|
||||
return TRUE;
|
||||
case ABM_REMOVE:
|
||||
if ((data = get_appbar(hwnd)))
|
||||
{
|
||||
list_remove(&data->entry);
|
||||
|
||||
send_poschanged(hwnd);
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, data);
|
||||
}
|
||||
else
|
||||
WARN("removing hwnd %p not on the list\n", hwnd);
|
||||
return TRUE;
|
||||
case ABM_QUERYPOS:
|
||||
if (abd->uEdge > ABE_BOTTOM)
|
||||
WARN("invalid edge %i for %p\n", abd->uEdge, hwnd);
|
||||
appbar_cliprect( hwnd, &abd->rc );
|
||||
return TRUE;
|
||||
case ABM_SETPOS:
|
||||
if (abd->uEdge > ABE_BOTTOM)
|
||||
{
|
||||
WARN("invalid edge %i for %p\n", abd->uEdge, hwnd);
|
||||
return TRUE;
|
||||
}
|
||||
if ((data = get_appbar(hwnd)))
|
||||
{
|
||||
/* calculate acceptable space */
|
||||
appbar_cliprect( hwnd, &abd->rc );
|
||||
|
||||
if (!EqualRect(&abd->rc, &data->rc))
|
||||
send_poschanged(hwnd);
|
||||
|
||||
/* reserve that space for this appbar */
|
||||
data->edge = abd->uEdge;
|
||||
data->rc = abd->rc;
|
||||
data->space_reserved = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
WARN("app sent ABM_SETPOS message for %p without ABM_ADD\n", hwnd);
|
||||
}
|
||||
return TRUE;
|
||||
case ABM_GETSTATE:
|
||||
TRACE("SHAppBarMessage(ABM_GETSTATE)\n");
|
||||
return (g_TaskbarSettings.sr.AutoHide ? ABS_AUTOHIDE : 0) |
|
||||
(g_TaskbarSettings.sr.AlwaysOnTop ? ABS_ALWAYSONTOP : 0);
|
||||
case ABM_SETSTATE:
|
||||
TRACE("SHAppBarMessage(ABM_SETSTATE lparam=%s)\n", wine_dbgstr_longlong(abd->lParam));
|
||||
hwnd = GetPrimaryTaskbar();
|
||||
if (hwnd)
|
||||
{
|
||||
TaskbarSettings settings = g_TaskbarSettings;
|
||||
settings.sr.AutoHide = (abd->lParam & ABS_AUTOHIDE) != 0;
|
||||
settings.sr.AlwaysOnTop = (abd->lParam & ABS_ALWAYSONTOP) != 0;
|
||||
SendMessageW(hwnd, TWM_SETTINGSCHANGED, 0, (LPARAM)&settings);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
case ABM_GETTASKBARPOS:
|
||||
TRACE("SHAppBarMessage(ABM_GETTASKBARPOS, hwnd=%p)\n", hwnd);
|
||||
abd->uEdge = g_TaskbarSettings.sr.Position;
|
||||
abd->hWnd = GetPrimaryTaskbar();
|
||||
return abd->hWnd && GetWindowRect(abd->hWnd, &abd->rc);
|
||||
case ABM_ACTIVATE:
|
||||
return TRUE;
|
||||
case ABM_GETAUTOHIDEBAR:
|
||||
FIXME("SHAppBarMessage(ABM_GETAUTOHIDEBAR, hwnd=%p, edge=%x): stub\n", hwnd, abd->uEdge);
|
||||
if (abd->uEdge == g_TaskbarSettings.sr.Position && g_TaskbarSettings.sr.AutoHide)
|
||||
return (SIZE_T)GetPrimaryTaskbar();
|
||||
return NULL;
|
||||
case ABM_SETAUTOHIDEBAR:
|
||||
FIXME("SHAppBarMessage(ABM_SETAUTOHIDEBAR, hwnd=%p, edge=%x, lparam=%s): stub\n",
|
||||
hwnd, abd->uEdge, wine_dbgstr_longlong(abd->lParam));
|
||||
return TRUE;
|
||||
case ABM_WINDOWPOSCHANGED:
|
||||
return TRUE;
|
||||
default:
|
||||
FIXME("SHAppBarMessage(%x) unimplemented\n", msg);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
LRESULT appbar_message ( COPYDATASTRUCT* cds )
|
||||
{
|
||||
struct appbar_cmd cmd;
|
||||
UINT_PTR result;
|
||||
HANDLE return_hproc;
|
||||
HANDLE return_map;
|
||||
LPVOID return_view;
|
||||
struct appbar_response* response;
|
||||
|
||||
if (cds->cbData != sizeof(struct appbar_cmd))
|
||||
return TRUE;
|
||||
|
||||
RtlCopyMemory(&cmd, cds->lpData, cds->cbData);
|
||||
|
||||
result = handle_appbarmessage(cmd.dwMsg, &cmd.abd);
|
||||
|
||||
return_hproc = OpenProcess(PROCESS_DUP_HANDLE, FALSE, cmd.return_process);
|
||||
if (return_hproc == NULL)
|
||||
{
|
||||
ERR("couldn't open calling process\n");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (!DuplicateHandle(return_hproc, UlongToHandle(cmd.return_map), GetCurrentProcess(), &return_map, 0, FALSE, DUPLICATE_SAME_ACCESS))
|
||||
{
|
||||
ERR("couldn't duplicate handle\n");
|
||||
CloseHandle(return_hproc);
|
||||
return TRUE;
|
||||
}
|
||||
CloseHandle(return_hproc);
|
||||
|
||||
return_view = MapViewOfFile(return_map, FILE_MAP_WRITE, 0, 0, sizeof(struct appbar_response));
|
||||
|
||||
if (return_view)
|
||||
{
|
||||
response = (struct appbar_response*)return_view;
|
||||
response->result = result;
|
||||
response->abd = cmd.abd;
|
||||
|
||||
UnmapViewOfFile(return_view);
|
||||
}
|
||||
else
|
||||
{
|
||||
ERR("couldn't map view of file\n");
|
||||
const UINT c_nGrow = 4;
|
||||
m_hAppBarDPA = DPA_Create(c_nGrow);
|
||||
if (!m_hAppBarDPA)
|
||||
{
|
||||
ERR("Out of memory\n");
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
CloseHandle(return_map);
|
||||
PAPPBAR pAppBar = (PAPPBAR)::LocalAlloc(LPTR, sizeof(*pAppBar));
|
||||
if (pAppBar)
|
||||
{
|
||||
pAppBar->hWnd = hWnd;
|
||||
pAppBar->uEdge = UINT_MAX;
|
||||
pAppBar->uCallbackMessage = pData->abd.uCallbackMessage;
|
||||
if (DPA_InsertPtr(m_hAppBarDPA, INT_MAX, pAppBar) >= 0)
|
||||
return TRUE; // Success!
|
||||
|
||||
::LocalFree(pAppBar);
|
||||
}
|
||||
|
||||
ERR("Out of memory\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// ABM_REMOVE
|
||||
void CAppBarManager::OnAppBarRemove(_In_ const APPBAR_COMMAND *pData)
|
||||
{
|
||||
if (!m_hAppBarDPA)
|
||||
return;
|
||||
|
||||
HWND hWnd = (HWND)UlongToHandle(pData->abd.hWnd32);
|
||||
INT nItems = DPA_GetPtrCount(m_hAppBarDPA);
|
||||
while (--nItems >= 0)
|
||||
{
|
||||
PAPPBAR pAppBar = (PAPPBAR)DPA_GetPtr(m_hAppBarDPA, nItems);
|
||||
if (!pAppBar)
|
||||
continue;
|
||||
|
||||
if (pAppBar->hWnd == hWnd)
|
||||
{
|
||||
RECT rcOld = pAppBar->rc;
|
||||
EliminateAppBar(nItems);
|
||||
StuckAppChange(hWnd, &rcOld, NULL, FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ABM_QUERYPOS
|
||||
void CAppBarManager::OnAppBarQueryPos(_Inout_ PAPPBAR_COMMAND pData)
|
||||
{
|
||||
HWND hWnd = (HWND)UlongToHandle(pData->abd.hWnd32);
|
||||
PAPPBAR pAppBar1 = FindAppBar(hWnd);
|
||||
if (!pAppBar1)
|
||||
{
|
||||
ERR("Not found: %p\n", hWnd);
|
||||
return;
|
||||
}
|
||||
|
||||
PAPPBARDATA3264 pOutput = AppBar_LockOutput(pData);
|
||||
if (!pOutput)
|
||||
{
|
||||
ERR("!pOutput: %d\n", pData->dwProcessId);
|
||||
return;
|
||||
}
|
||||
pOutput->rc = pData->abd.rc;
|
||||
|
||||
if (::IsRectEmpty(&pOutput->rc))
|
||||
ERR("IsRectEmpty\n");
|
||||
|
||||
HMONITOR hMon1 = ::MonitorFromRect(&pOutput->rc, MONITOR_DEFAULTTOPRIMARY);
|
||||
ASSERT(hMon1 != NULL);
|
||||
|
||||
// Subtract tray rectangle from pOutput->rc if necessary
|
||||
if (hMon1 == GetMonitor() && !IsAutoHideState())
|
||||
{
|
||||
APPBAR dummyAppBar;
|
||||
dummyAppBar.uEdge = GetPosition();
|
||||
GetDockedRect(&dummyAppBar.rc);
|
||||
AppBarSubtractRect(&dummyAppBar, &pOutput->rc);
|
||||
}
|
||||
|
||||
// Subtract area from pOutput->rc
|
||||
UINT uEdge = pData->abd.uEdge;
|
||||
INT nItems = DPA_GetPtrCount(m_hAppBarDPA);
|
||||
while (--nItems >= 0)
|
||||
{
|
||||
PAPPBAR pAppBar2 = (PAPPBAR)DPA_GetPtr(m_hAppBarDPA, nItems);
|
||||
if (!pAppBar2 || pAppBar1->hWnd == pAppBar2->hWnd)
|
||||
continue;
|
||||
|
||||
if ((Edge_IsVertical(uEdge) || !Edge_IsVertical(pAppBar2->uEdge)) &&
|
||||
(pAppBar1->uEdge != uEdge || !AppBarOutsideOf(pAppBar1, pAppBar2)))
|
||||
{
|
||||
if (pAppBar1->uEdge == uEdge || pAppBar2->uEdge != uEdge)
|
||||
continue;
|
||||
}
|
||||
|
||||
HMONITOR hMon2 = ::MonitorFromRect(&pAppBar2->rc, MONITOR_DEFAULTTONULL);
|
||||
if (hMon1 == hMon2)
|
||||
AppBarSubtractRect(pAppBar2, &pOutput->rc);
|
||||
}
|
||||
|
||||
AppBar_UnLockOutput(pOutput);
|
||||
}
|
||||
|
||||
// ABM_SETPOS
|
||||
void CAppBarManager::OnAppBarSetPos(_Inout_ PAPPBAR_COMMAND pData)
|
||||
{
|
||||
HWND hWnd = (HWND)UlongToHandle(pData->abd.hWnd32);
|
||||
PAPPBAR pAppBar = FindAppBar(hWnd);
|
||||
if (!pAppBar)
|
||||
return;
|
||||
|
||||
OnAppBarQueryPos(pData);
|
||||
|
||||
PAPPBARDATA3264 pOutput = AppBar_LockOutput(pData);
|
||||
if (!pOutput)
|
||||
return;
|
||||
|
||||
RECT rcOld = pAppBar->rc, rcNew = pData->abd.rc;
|
||||
BOOL bChanged = !::EqualRect(&rcOld, &rcNew);
|
||||
|
||||
pAppBar->rc = rcNew;
|
||||
pAppBar->uEdge = pData->abd.uEdge;
|
||||
|
||||
AppBar_UnLockOutput(pOutput);
|
||||
|
||||
if (bChanged)
|
||||
StuckAppChange(hWnd, &rcOld, &rcNew, FALSE);
|
||||
}
|
||||
|
||||
void CAppBarManager::OnAppBarNotifyAll(
|
||||
_In_opt_ HMONITOR hMon,
|
||||
_In_opt_ HWND hwndIgnore,
|
||||
_In_ DWORD dwNotify,
|
||||
_In_opt_ LPARAM lParam)
|
||||
{
|
||||
TRACE("%p, %p, 0x%X, %p\n", hMon, hwndIgnore, dwNotify, lParam);
|
||||
|
||||
if (!m_hAppBarDPA)
|
||||
return;
|
||||
|
||||
INT nItems = DPA_GetPtrCount(m_hAppBarDPA);
|
||||
while (--nItems >= 0)
|
||||
{
|
||||
PAPPBAR pAppBar = (PAPPBAR)DPA_GetPtr(m_hAppBarDPA, nItems);
|
||||
if (!pAppBar || pAppBar->hWnd == hwndIgnore)
|
||||
continue;
|
||||
|
||||
HWND hwndAppBar = pAppBar->hWnd;
|
||||
if (!::IsWindow(hwndAppBar))
|
||||
{
|
||||
EliminateAppBar(nItems);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!hMon || hMon == ::MonitorFromWindow(hwndAppBar, MONITOR_DEFAULTTONULL))
|
||||
::PostMessageW(hwndAppBar, pAppBar->uCallbackMessage, dwNotify, lParam);
|
||||
}
|
||||
}
|
||||
|
||||
/// @param pAppBar The target AppBar to subtract.
|
||||
/// @param prc The rectangle to be subtracted.
|
||||
void CAppBarManager::AppBarSubtractRect(_In_ PAPPBAR pAppBar, _Inout_ PRECT prc)
|
||||
{
|
||||
switch (pAppBar->uEdge)
|
||||
{
|
||||
case ABE_LEFT: prc->left = max(prc->left, pAppBar->rc.right); break;
|
||||
case ABE_TOP: prc->top = max(prc->top, pAppBar->rc.bottom); break;
|
||||
case ABE_RIGHT: prc->right = min(prc->right, pAppBar->rc.left); break;
|
||||
case ABE_BOTTOM: prc->bottom = min(prc->bottom, pAppBar->rc.top); break;
|
||||
default:
|
||||
ASSERT(FALSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Is pAppBar1 outside of pAppBar2?
|
||||
BOOL CAppBarManager::AppBarOutsideOf(
|
||||
_In_ const APPBAR *pAppBar1,
|
||||
_In_ const APPBAR *pAppBar2)
|
||||
{
|
||||
if (pAppBar1->uEdge != pAppBar2->uEdge)
|
||||
return FALSE;
|
||||
|
||||
switch (pAppBar2->uEdge)
|
||||
{
|
||||
case ABE_LEFT: return pAppBar1->rc.left >= pAppBar2->rc.left;
|
||||
case ABE_TOP: return pAppBar1->rc.top >= pAppBar2->rc.top;
|
||||
case ABE_RIGHT: return pAppBar1->rc.right <= pAppBar2->rc.right;
|
||||
case ABE_BOTTOM: return pAppBar1->rc.bottom <= pAppBar2->rc.bottom;
|
||||
default:
|
||||
ASSERT(FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/// Get rectangle of the tray window.
|
||||
/// @param prcDocked The pointer to the rectangle to be received.
|
||||
void CAppBarManager::GetDockedRect(_Out_ PRECT prcDocked)
|
||||
{
|
||||
*prcDocked = *GetTrayRect();
|
||||
if (IsAutoHideState() && IsHidingState())
|
||||
ComputeHiddenRect(prcDocked, GetPosition());
|
||||
}
|
||||
|
||||
/// Compute the position and size of the hidden TaskBar.
|
||||
/// @param prc The rectangle before hiding TaskBar.
|
||||
/// @param uSide The side of TaskBar (ABE_...).
|
||||
void CAppBarManager::ComputeHiddenRect(_Inout_ PRECT prc, _In_ UINT uSide)
|
||||
{
|
||||
MONITORINFO mi = { sizeof(mi) };
|
||||
HMONITOR hMonitor = ::MonitorFromRect(prc, MONITOR_DEFAULTTONULL);
|
||||
if (!::GetMonitorInfoW(hMonitor, &mi))
|
||||
return;
|
||||
RECT rcMon = mi.rcMonitor;
|
||||
|
||||
INT cxy = Edge_IsVertical(uSide) ? (prc->bottom - prc->top) : (prc->right - prc->left);
|
||||
switch (uSide)
|
||||
{
|
||||
case ABE_LEFT:
|
||||
prc->right = rcMon.left + GetSystemMetrics(SM_CXFRAME) / 2;
|
||||
prc->left = prc->right - cxy;
|
||||
break;
|
||||
case ABE_TOP:
|
||||
prc->bottom = rcMon.top + GetSystemMetrics(SM_CYFRAME) / 2;
|
||||
prc->top = prc->bottom - cxy;
|
||||
break;
|
||||
case ABE_RIGHT:
|
||||
prc->left = rcMon.right - GetSystemMetrics(SM_CXFRAME) / 2;
|
||||
prc->right = prc->left + cxy;
|
||||
break;
|
||||
case ABE_BOTTOM:
|
||||
prc->top = rcMon.bottom - GetSystemMetrics(SM_CYFRAME) / 2;
|
||||
prc->bottom = prc->top + cxy;
|
||||
break;
|
||||
default:
|
||||
ASSERT(FALSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// This function is called when AppBar and/or TaskBar is being moved, removed, and/or updated.
|
||||
/// @param hwndTarget The target window. Optional.
|
||||
/// @param prcOld The old position and size. Optional.
|
||||
/// @param prcNew The new position and size. Optional.
|
||||
/// @param bTray TRUE if the tray is being moved.
|
||||
void
|
||||
CAppBarManager::StuckAppChange(
|
||||
_In_opt_ HWND hwndTarget,
|
||||
_In_opt_ const RECT *prcOld,
|
||||
_In_opt_ const RECT *prcNew,
|
||||
_In_ BOOL bTray)
|
||||
{
|
||||
RECT rcWorkArea1, rcWorkArea2;
|
||||
HMONITOR hMon1 = NULL;
|
||||
UINT flags = 0;
|
||||
enum { SET_WORKAREA_1 = 1, SET_WORKAREA_2 = 2, NEED_SIZING = 4 }; // for flags
|
||||
|
||||
if (prcOld)
|
||||
{
|
||||
hMon1 = (bTray ? GetPreviousMonitor() : ::MonitorFromRect(prcOld, MONITOR_DEFAULTTONEAREST));
|
||||
if (hMon1)
|
||||
{
|
||||
WORKAREA_TYPE type1 = RecomputeWorkArea(GetTrayRect(), hMon1, &rcWorkArea1);
|
||||
if (type1 == WORKAREA_IS_NOT_MONITOR)
|
||||
flags = SET_WORKAREA_1;
|
||||
if (type1 == WORKAREA_SAME_AS_MONITOR)
|
||||
flags = NEED_SIZING;
|
||||
}
|
||||
}
|
||||
|
||||
if (prcNew)
|
||||
{
|
||||
HMONITOR hMon2 = ::MonitorFromRect(prcNew, MONITOR_DEFAULTTONULL);
|
||||
if (hMon2 && hMon2 != hMon1)
|
||||
{
|
||||
WORKAREA_TYPE type2 = RecomputeWorkArea(GetTrayRect(), hMon2, &rcWorkArea2);
|
||||
if (type2 == WORKAREA_IS_NOT_MONITOR)
|
||||
flags |= SET_WORKAREA_2;
|
||||
else if (type2 == WORKAREA_SAME_AS_MONITOR && !flags)
|
||||
flags = NEED_SIZING;
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & SET_WORKAREA_1)
|
||||
{
|
||||
UINT fWinIni = ((flags == SET_WORKAREA_1 && GetDesktopWnd()) ? SPIF_SENDCHANGE : 0);
|
||||
::SystemParametersInfoW(SPI_SETWORKAREA, TRUE, &rcWorkArea1, fWinIni);
|
||||
RedrawDesktop(GetDesktopWnd(), &rcWorkArea1);
|
||||
}
|
||||
|
||||
if (flags & SET_WORKAREA_2)
|
||||
{
|
||||
UINT fWinIni = (GetDesktopWnd() ? SPIF_SENDCHANGE : 0);
|
||||
::SystemParametersInfoW(SPI_SETWORKAREA, TRUE, &rcWorkArea2, fWinIni);
|
||||
RedrawDesktop(GetDesktopWnd(), &rcWorkArea2);
|
||||
}
|
||||
|
||||
if (bTray || flags == NEED_SIZING)
|
||||
::SendMessageW(GetDesktopWnd(), WM_SIZE, 0, 0);
|
||||
|
||||
// Post ABN_POSCHANGED messages to AppBar windows
|
||||
OnAppBarNotifyAll(NULL, hwndTarget, ABN_POSCHANGED, TRUE);
|
||||
}
|
||||
|
||||
void CAppBarManager::RedrawDesktop(_In_ HWND hwndDesktop, _Inout_ PRECT prc)
|
||||
{
|
||||
if (!hwndDesktop)
|
||||
return;
|
||||
::MapWindowPoints(NULL, hwndDesktop, (POINT*)prc, sizeof(*prc) / sizeof(POINT));
|
||||
::RedrawWindow(hwndDesktop, prc, 0, RDW_ALLCHILDREN | RDW_ERASE | RDW_INVALIDATE);
|
||||
}
|
||||
|
||||
/// Re-compute the work area.
|
||||
/// @param prcTray The position and size of the tray window
|
||||
/// @param hMonitor The monitor of the work area to re-compute.
|
||||
/// @param prcWorkArea The work area to be re-computed.
|
||||
WORKAREA_TYPE
|
||||
CAppBarManager::RecomputeWorkArea(
|
||||
_In_ const RECT *prcTray,
|
||||
_In_ HMONITOR hMonitor,
|
||||
_Out_ PRECT prcWorkArea)
|
||||
{
|
||||
MONITORINFO mi = { sizeof(mi) };
|
||||
if (!::GetMonitorInfoW(hMonitor, &mi))
|
||||
return WORKAREA_NO_TRAY_AREA;
|
||||
|
||||
if (IsAutoHideState())
|
||||
*prcWorkArea = mi.rcMonitor;
|
||||
else
|
||||
::SubtractRect(prcWorkArea, &mi.rcMonitor, prcTray);
|
||||
|
||||
if (m_hAppBarDPA)
|
||||
{
|
||||
INT nItems = DPA_GetPtrCount(m_hAppBarDPA);
|
||||
while (--nItems >= 0)
|
||||
{
|
||||
PAPPBAR pAppBar = (PAPPBAR)DPA_GetPtr(m_hAppBarDPA, nItems);
|
||||
if (pAppBar && hMonitor == ::MonitorFromRect(&pAppBar->rc, MONITOR_DEFAULTTONULL))
|
||||
AppBarSubtractRect(pAppBar, prcWorkArea);
|
||||
}
|
||||
}
|
||||
|
||||
if (!::EqualRect(prcWorkArea, &mi.rcWork))
|
||||
return WORKAREA_IS_NOT_MONITOR;
|
||||
|
||||
if (IsAutoHideState() || ::IsRectEmpty(prcTray))
|
||||
return WORKAREA_NO_TRAY_AREA;
|
||||
|
||||
return WORKAREA_SAME_AS_MONITOR;
|
||||
}
|
||||
|
||||
PAPPBAR_COMMAND
|
||||
CAppBarManager::GetAppBarMessage(_Inout_ PCOPYDATASTRUCT pCopyData)
|
||||
{
|
||||
PAPPBAR_COMMAND pData = (PAPPBAR_COMMAND)pCopyData->lpData;
|
||||
|
||||
if (pCopyData->cbData != sizeof(*pData) ||
|
||||
pData->abd.cbSize != sizeof(pData->abd))
|
||||
{
|
||||
ERR("Invalid AppBar message\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return pData;
|
||||
}
|
||||
|
||||
// WM_COPYDATA TABDMC_APPBAR
|
||||
LRESULT CAppBarManager::OnAppBarMessage(_Inout_ PCOPYDATASTRUCT pCopyData)
|
||||
{
|
||||
PAPPBAR_COMMAND pData = GetAppBarMessage(pCopyData);
|
||||
if (!pData)
|
||||
return 0;
|
||||
|
||||
switch (pData->dwMessage)
|
||||
{
|
||||
case ABM_NEW:
|
||||
return OnAppBarNew(pData);
|
||||
case ABM_REMOVE:
|
||||
OnAppBarRemove(pData);
|
||||
break;
|
||||
case ABM_QUERYPOS:
|
||||
OnAppBarQueryPos(pData);
|
||||
break;
|
||||
case ABM_SETPOS:
|
||||
OnAppBarSetPos(pData);
|
||||
break;
|
||||
default:
|
||||
{
|
||||
FIXME("0x%X\n", pData->dwMessage);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
96
base/shell/explorer/appbar.h
Normal file
96
base/shell/explorer/appbar.h
Normal file
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* PROJECT: ReactOS Explorer
|
||||
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
|
||||
* PURPOSE: AppBar implementation
|
||||
* COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
typedef struct tagAPPBAR
|
||||
{
|
||||
HWND hWnd;
|
||||
UINT uCallbackMessage;
|
||||
UINT uEdge;
|
||||
RECT rc;
|
||||
} APPBAR, *PAPPBAR;
|
||||
|
||||
static inline PAPPBARDATA3264
|
||||
AppBar_LockOutput(_In_ PAPPBAR_COMMAND pData)
|
||||
{
|
||||
return (PAPPBARDATA3264)SHLockShared(UlongToHandle(pData->hOutput32), pData->dwProcessId);
|
||||
}
|
||||
|
||||
static inline VOID
|
||||
AppBar_UnLockOutput(_Out_ PAPPBARDATA3264 pOutput)
|
||||
{
|
||||
SHUnlockShared(pOutput);
|
||||
}
|
||||
|
||||
static inline BOOL
|
||||
Edge_IsVertical(_In_ UINT uEdge)
|
||||
{
|
||||
return uEdge == ABE_TOP || uEdge == ABE_BOTTOM;
|
||||
}
|
||||
|
||||
// Return value of CAppBarManager::RecomputeWorkArea
|
||||
enum WORKAREA_TYPE
|
||||
{
|
||||
WORKAREA_NO_TRAY_AREA = 0,
|
||||
WORKAREA_IS_NOT_MONITOR = 1,
|
||||
WORKAREA_SAME_AS_MONITOR = 2,
|
||||
};
|
||||
|
||||
class CAppBarManager
|
||||
{
|
||||
public:
|
||||
CAppBarManager();
|
||||
virtual ~CAppBarManager();
|
||||
|
||||
LRESULT OnAppBarMessage(_Inout_ PCOPYDATASTRUCT pCopyData);
|
||||
|
||||
protected:
|
||||
HDPA m_hAppBarDPA; // DPA (Dynamic Pointer Array)
|
||||
|
||||
PAPPBAR FindAppBar(_In_ HWND hwndAppBar) const;
|
||||
void EliminateAppBar(_In_ INT iItem);
|
||||
void DestroyAppBarDPA();
|
||||
void AppBarSubtractRect(_In_ PAPPBAR pAppBar, _Inout_ PRECT prc);
|
||||
BOOL AppBarOutsideOf(_In_ const APPBAR *pAppBar1, _In_ const APPBAR *pAppBar2);
|
||||
void ComputeHiddenRect(_Inout_ PRECT prc, _In_ UINT uSide);
|
||||
PAPPBAR_COMMAND GetAppBarMessage(_Inout_ PCOPYDATASTRUCT pCopyData);
|
||||
void GetDockedRect(_Out_ PRECT prcDocked);
|
||||
|
||||
BOOL OnAppBarNew(_In_ const APPBAR_COMMAND *pData);
|
||||
void OnAppBarRemove(_In_ const APPBAR_COMMAND *pData);
|
||||
void OnAppBarQueryPos(_Inout_ PAPPBAR_COMMAND pData);
|
||||
void OnAppBarSetPos(_Inout_ PAPPBAR_COMMAND pData);
|
||||
|
||||
void OnAppBarNotifyAll(
|
||||
_In_opt_ HMONITOR hMon,
|
||||
_In_opt_ HWND hwndIgnore,
|
||||
_In_ DWORD dwNotify,
|
||||
_In_opt_ LPARAM lParam);
|
||||
|
||||
WORKAREA_TYPE
|
||||
RecomputeWorkArea(
|
||||
_In_ const RECT *prcTray,
|
||||
_In_ HMONITOR hMonitor,
|
||||
_Out_ PRECT prcWorkArea);
|
||||
|
||||
void StuckAppChange(
|
||||
_In_opt_ HWND hwndTarget,
|
||||
_In_opt_ const RECT *prcOld,
|
||||
_In_opt_ const RECT *prcNew,
|
||||
_In_ BOOL bTray);
|
||||
|
||||
void RedrawDesktop(_In_ HWND hwndDesktop, _Inout_ PRECT prc);
|
||||
|
||||
virtual BOOL IsAutoHideState() const = 0;
|
||||
virtual BOOL IsHidingState() const = 0;
|
||||
virtual HMONITOR GetMonitor() const = 0;
|
||||
virtual HMONITOR GetPreviousMonitor() const = 0;
|
||||
virtual INT GetPosition() const = 0;
|
||||
virtual const RECT* GetTrayRect() = 0;
|
||||
virtual HWND GetDesktopWnd() const = 0;
|
||||
};
|
@@ -353,6 +353,8 @@ UpdateStartMenu(IN OUT IMenuPopup *pMenuPopup,
|
||||
*/
|
||||
VOID
|
||||
ShowCustomizeClassic(HINSTANCE, HWND);
|
||||
VOID
|
||||
ClearRecentAndMru();
|
||||
|
||||
/*
|
||||
* startmnusite.cpp
|
||||
@@ -367,6 +369,11 @@ CStartMenuSite_CreateInstance(IN OUT ITrayWindow *Tray, const IID & riid, PVOID
|
||||
/* TrayClockWnd */
|
||||
HRESULT CTrayClockWnd_CreateInstance(HWND hwndParent, REFIID riid, void **ppv);
|
||||
|
||||
static inline BOOL GetHideClock()
|
||||
{
|
||||
return g_TaskbarSettings.sr.HideClock || SHRestricted(REST_HIDECLOCK);
|
||||
}
|
||||
|
||||
/* TrayNotifyWnd */
|
||||
#define TNWM_GETMINIMUMSIZE (WM_USER + 0x100)
|
||||
#define TNWM_CHANGETRAYPOS (WM_USER + 0x104)
|
||||
|
@@ -58,10 +58,53 @@ static BOOL RecentHasShortcut(HWND hwnd)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static VOID OnClearRecentItems(HWND hwnd)
|
||||
static const PCWSTR g_MruKeys[] =
|
||||
{
|
||||
L"Software\\Microsoft\\Internet Explorer\\TypedURLs",
|
||||
L"Explorer\\RunMRU",
|
||||
L"Explorer\\Comdlg32\\OpenSaveMRU",
|
||||
L"Explorer\\Comdlg32\\LastVisitedMRU",
|
||||
};
|
||||
|
||||
static BOOL HandleMruData(BOOL Delete)
|
||||
{
|
||||
for (UINT i = 0; i < _countof(g_MruKeys); ++i)
|
||||
{
|
||||
WCHAR szKey[200];
|
||||
PCWSTR pszKey = g_MruKeys[i];
|
||||
if (*pszKey != 'S') // Keys not starting with S[oftware] are assumed to be relative to "SMWCV"
|
||||
{
|
||||
wsprintfW(szKey, L"%s\\%s", L"Software\\Microsoft\\Windows\\CurrentVersion", pszKey);
|
||||
pszKey = szKey;
|
||||
}
|
||||
|
||||
HKEY hKey;
|
||||
if (Delete)
|
||||
{
|
||||
SHDeleteKeyW(HKEY_CURRENT_USER, pszKey);
|
||||
}
|
||||
else if (RegOpenKeyExW(HKEY_CURRENT_USER, pszKey, 0, KEY_WRITE, &hKey) == ERROR_SUCCESS)
|
||||
{
|
||||
RegCloseKey(hKey);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
VOID ClearRecentAndMru()
|
||||
{
|
||||
SHAddToRecentDocs(SHARD_PIDL, NULL);
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_CLASSICSTART_CLEAR), RecentHasShortcut(hwnd));
|
||||
HandleMruData(TRUE);
|
||||
}
|
||||
|
||||
static VOID InitializeClearButton(HWND hwnd)
|
||||
{
|
||||
HWND hWndClear = GetDlgItem(hwnd, IDC_CLASSICSTART_CLEAR);
|
||||
BOOL bHasData = RecentHasShortcut(hwnd) || HandleMruData(FALSE);
|
||||
if (!bHasData && hWndClear == GetFocus())
|
||||
SendMessage(hwnd, WM_NEXTDLGCTL, 0, FALSE);
|
||||
EnableWindow(hWndClear, bHasData);
|
||||
}
|
||||
|
||||
struct CUSTOM_ENTRY;
|
||||
@@ -175,7 +218,7 @@ static VOID AddCustomItem(HWND hTreeView, const CUSTOM_ENTRY *entry)
|
||||
|
||||
static void CustomizeClassic_OnInitDialog(HWND hwnd)
|
||||
{
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_CLASSICSTART_CLEAR), RecentHasShortcut(hwnd));
|
||||
InitializeClearButton(hwnd);
|
||||
|
||||
HWND hTreeView = GetDlgItem(hwnd, IDC_CLASSICSTART_SETTINGS);
|
||||
|
||||
@@ -240,7 +283,8 @@ INT_PTR CALLBACK CustomizeClassicProc(HWND hwnd, UINT Message, WPARAM wParam, LP
|
||||
OnAdvancedStartMenuItems();
|
||||
break;
|
||||
case IDC_CLASSICSTART_CLEAR:
|
||||
OnClearRecentItems(hwnd);
|
||||
ClearRecentAndMru();
|
||||
InitializeClearButton(hwnd);
|
||||
break;
|
||||
case IDOK:
|
||||
if (CustomizeClassic_OnOK(hwnd))
|
||||
|
@@ -20,6 +20,8 @@
|
||||
|
||||
#include "precomp.h"
|
||||
#include <commoncontrols.h>
|
||||
#include <regstr.h>
|
||||
#include <shlwapi_undoc.h>
|
||||
|
||||
/* Set DUMP_TASKS to 1 to enable a dump of the tasks and task groups every
|
||||
5 seconds */
|
||||
@@ -1476,25 +1478,60 @@ public:
|
||||
::SendMessage(hwndTray, TWM_PULSE, bDelete, (LPARAM)hwndActive);
|
||||
}
|
||||
|
||||
static BOOL InvokeRegistryAppKeyCommand(UINT uAppCmd)
|
||||
{
|
||||
BOOL bResult = FALSE;
|
||||
WCHAR szBuf[MAX_PATH * 2];
|
||||
wsprintfW(szBuf, L"%s\\AppKey\\%u", REGSTR_PATH_EXPLORER, uAppCmd);
|
||||
HUSKEY hKey;
|
||||
if (SHRegOpenUSKeyW(szBuf, KEY_READ, NULL, &hKey, FALSE) != ERROR_SUCCESS)
|
||||
return bResult;
|
||||
|
||||
DWORD cb = sizeof(szBuf);
|
||||
if (!bResult && SHRegQueryUSValueW(hKey, L"ShellExecute", NULL, szBuf, &cb, FALSE, NULL, 0) == ERROR_SUCCESS)
|
||||
{
|
||||
bResult = TRUE;
|
||||
}
|
||||
cb = sizeof(szBuf);
|
||||
if (!bResult && SHRegQueryUSValueW(hKey, L"Association", NULL, szBuf, &cb, FALSE, NULL, 0) == ERROR_SUCCESS)
|
||||
{
|
||||
bResult = TRUE;
|
||||
cb = _countof(szBuf);
|
||||
if (AssocQueryString(ASSOCF_NOTRUNCATE, ASSOCSTR_EXECUTABLE, szBuf, NULL, szBuf, &cb) != S_OK)
|
||||
*szBuf = UNICODE_NULL;
|
||||
}
|
||||
cb = sizeof(szBuf);
|
||||
if (!bResult && SHRegQueryUSValueW(hKey, L"RegisteredApp", NULL, szBuf, &cb, FALSE, NULL, 0) == ERROR_SUCCESS)
|
||||
{
|
||||
bResult = TRUE;
|
||||
SHRunIndirectRegClientCommand(NULL, szBuf);
|
||||
*szBuf = UNICODE_NULL; // Don't execute again
|
||||
}
|
||||
SHRegCloseUSKey(hKey);
|
||||
|
||||
// Note: Tweak UI uses an empty string for its "Do nothing" option.
|
||||
if (bResult && *szBuf)
|
||||
ShellExec_RunDLLW(NULL, NULL, szBuf, SW_SHOW);
|
||||
return bResult;
|
||||
}
|
||||
|
||||
BOOL HandleAppCommand(IN WPARAM wParam, IN LPARAM lParam)
|
||||
{
|
||||
BOOL Ret = FALSE;
|
||||
|
||||
switch (GET_APPCOMMAND_LPARAM(lParam))
|
||||
const UINT uAppCmd = GET_APPCOMMAND_LPARAM(lParam);
|
||||
if (InvokeRegistryAppKeyCommand(uAppCmd))
|
||||
return TRUE;
|
||||
switch (uAppCmd)
|
||||
{
|
||||
case APPCOMMAND_BROWSER_SEARCH:
|
||||
Ret = SHFindFiles(NULL,
|
||||
NULL);
|
||||
break;
|
||||
|
||||
case APPCOMMAND_BROWSER_HOME:
|
||||
case APPCOMMAND_LAUNCH_MAIL:
|
||||
default:
|
||||
TRACE("Shell app command %d unhandled!\n", (INT) GET_APPCOMMAND_LPARAM(lParam));
|
||||
break;
|
||||
case APPCOMMAND_VOLUME_MUTE:
|
||||
case APPCOMMAND_VOLUME_DOWN:
|
||||
case APPCOMMAND_VOLUME_UP:
|
||||
// TODO: Try IMMDeviceEnumerator::GetDefaultAudioEndpoint first and then fall back to mixer.
|
||||
FIXME("Call the mixer API to change the global volume\n");
|
||||
return TRUE;
|
||||
case APPCOMMAND_BROWSER_SEARCH:
|
||||
return SHFindFiles(NULL, NULL);
|
||||
}
|
||||
|
||||
return Ret;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
LRESULT OnShellHook(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||
@@ -1513,7 +1550,7 @@ public:
|
||||
switch ((INT) wParam)
|
||||
{
|
||||
case HSHELL_APPCOMMAND:
|
||||
Ret = HandleAppCommand(wParam, lParam);
|
||||
Ret = HandleAppCommand(0, lParam);
|
||||
break;
|
||||
|
||||
case HSHELL_WINDOWCREATED:
|
||||
|
@@ -666,7 +666,7 @@ LRESULT CTrayClockWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& b
|
||||
|
||||
m_tooltip.AddTool(&ti);
|
||||
|
||||
if (!g_TaskbarSettings.sr.HideClock)
|
||||
if (!GetHideClock())
|
||||
{
|
||||
ResetTime();
|
||||
}
|
||||
@@ -694,26 +694,17 @@ LRESULT CTrayClockWnd::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHa
|
||||
LRESULT CTrayClockWnd::OnTaskbarSettingsChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||
{
|
||||
BOOL bRealign = FALSE;
|
||||
|
||||
BOOL bHideClock = GetHideClock();
|
||||
TaskbarSettings* newSettings = (TaskbarSettings*)lParam;
|
||||
if (newSettings->bShowSeconds != g_TaskbarSettings.bShowSeconds)
|
||||
{
|
||||
g_TaskbarSettings.bShowSeconds = newSettings->bShowSeconds;
|
||||
if (!g_TaskbarSettings.sr.HideClock)
|
||||
{
|
||||
bRealign = TRUE;
|
||||
|
||||
ResetTime();
|
||||
}
|
||||
}
|
||||
|
||||
if (newSettings->sr.HideClock != g_TaskbarSettings.sr.HideClock)
|
||||
if (newSettings->sr.HideClock != !IsWindowVisible())
|
||||
{
|
||||
g_TaskbarSettings.sr.HideClock = newSettings->sr.HideClock;
|
||||
ShowWindow(g_TaskbarSettings.sr.HideClock ? SW_HIDE : SW_SHOW);
|
||||
bHideClock = GetHideClock();
|
||||
ShowWindow(bHideClock ? SW_HIDE : SW_SHOW);
|
||||
bRealign = TRUE;
|
||||
|
||||
if (g_TaskbarSettings.sr.HideClock)
|
||||
if (bHideClock)
|
||||
{
|
||||
/* Disable all timers */
|
||||
if (IsTimerEnabled)
|
||||
@@ -733,6 +724,16 @@ LRESULT CTrayClockWnd::OnTaskbarSettingsChanged(UINT uMsg, WPARAM wParam, LPARAM
|
||||
}
|
||||
}
|
||||
|
||||
if (newSettings->bShowSeconds != g_TaskbarSettings.bShowSeconds)
|
||||
{
|
||||
g_TaskbarSettings.bShowSeconds = newSettings->bShowSeconds;
|
||||
if (!bHideClock)
|
||||
{
|
||||
bRealign = TRUE;
|
||||
ResetTime();
|
||||
}
|
||||
}
|
||||
|
||||
if (newSettings->bPreferDate != g_TaskbarSettings.bPreferDate)
|
||||
{
|
||||
g_TaskbarSettings.bPreferDate = newSettings->bPreferDate;
|
||||
@@ -766,7 +767,7 @@ HRESULT CTrayClockWnd::Initialize(IN HWND hWndParent)
|
||||
/* Create the window. The tray window is going to move it to the correct
|
||||
position and resize it as needed. */
|
||||
DWORD dwStyle = WS_CHILD | WS_CLIPSIBLINGS;
|
||||
if (!g_TaskbarSettings.sr.HideClock)
|
||||
if (!GetHideClock())
|
||||
dwStyle |= WS_VISIBLE;
|
||||
|
||||
Create(hWndParent, 0, NULL, dwStyle);
|
||||
|
@@ -139,8 +139,9 @@ public:
|
||||
SIZE clockSize = { 0, 0 };
|
||||
SIZE traySize = { 0, 0 };
|
||||
SIZE showDesktopSize = { 0, 0 };
|
||||
BOOL bHideClock = GetHideClock();
|
||||
|
||||
if (!g_TaskbarSettings.sr.HideClock)
|
||||
if (!bHideClock)
|
||||
{
|
||||
if (IsHorizontal)
|
||||
{
|
||||
@@ -197,7 +198,7 @@ public:
|
||||
{
|
||||
pSize->cx = 2 * TRAY_NOTIFY_WND_SPACING_X;
|
||||
|
||||
if (!g_TaskbarSettings.sr.HideClock)
|
||||
if (!bHideClock)
|
||||
pSize->cx += TRAY_NOTIFY_WND_SPACING_X + trayClockMinSize.cx;
|
||||
|
||||
if (g_TaskbarSettings.bShowDesktopButton)
|
||||
@@ -210,7 +211,7 @@ public:
|
||||
{
|
||||
pSize->cy = 2 * TRAY_NOTIFY_WND_SPACING_Y;
|
||||
|
||||
if (!g_TaskbarSettings.sr.HideClock)
|
||||
if (!bHideClock)
|
||||
pSize->cy += TRAY_NOTIFY_WND_SPACING_Y + trayClockMinSize.cy;
|
||||
|
||||
if (g_TaskbarSettings.bShowDesktopButton)
|
||||
@@ -303,7 +304,7 @@ public:
|
||||
swpFlags);
|
||||
}
|
||||
|
||||
if (!g_TaskbarSettings.sr.HideClock)
|
||||
if (!GetHideClock())
|
||||
{
|
||||
POINT ptClock = { rcClient.left, rcClient.top };
|
||||
SIZE clockSize = { rcClient.right - rcClient.left, rcClient.bottom - rcClient.top };
|
||||
@@ -482,6 +483,8 @@ public:
|
||||
SendMessage(WM_NOTIFY, 0, (LPARAM) &nmh);
|
||||
}
|
||||
|
||||
g_TaskbarSettings.bHideInactiveIcons = newSettings->bHideInactiveIcons;
|
||||
|
||||
return OnClockMessage(uMsg, wParam, lParam, bHandled);
|
||||
}
|
||||
|
||||
|
@@ -276,11 +276,16 @@ public:
|
||||
|
||||
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
|
||||
{
|
||||
CheckDlgButton(IDC_TASKBARPROP_CLOCK, (!g_TaskbarSettings.sr.HideClock) ? BST_CHECKED : BST_UNCHECKED);
|
||||
::EnableWindow(GetDlgItem(IDC_TASKBARPROP_CLOCK), !SHRestricted(REST_HIDECLOCK));
|
||||
CheckDlgButton(IDC_TASKBARPROP_CLOCK, (!GetHideClock()) ? BST_CHECKED : BST_UNCHECKED);
|
||||
CheckDlgButton(IDC_TASKBARPROP_SECONDS, g_TaskbarSettings.bShowSeconds ? BST_CHECKED : BST_UNCHECKED);
|
||||
CheckDlgButton(IDC_TASKBARPROP_HIDEICONS, g_TaskbarSettings.bHideInactiveIcons ? BST_CHECKED : BST_UNCHECKED);
|
||||
CheckDlgButton(IDC_TASKBARPROP_DESKTOP, g_TaskbarSettings.bShowDesktopButton ? BST_CHECKED : BST_UNCHECKED);
|
||||
|
||||
// TODO: bHideInactiveIcons is not implemented yet, just disable for now
|
||||
CheckDlgButton(IDC_TASKBARPROP_HIDEICONS, BST_UNCHECKED);
|
||||
::EnableWindow(GetDlgItem(IDC_TASKBARPROP_HIDEICONS), FALSE);
|
||||
|
||||
_UpdateDialog();
|
||||
return TRUE;
|
||||
}
|
||||
|
@@ -1,30 +1,16 @@
|
||||
/*
|
||||
* ReactOS Explorer
|
||||
*
|
||||
* Copyright 2006 - 2007 Thomas Weidenmueller <w3seek@reactos.org>
|
||||
* Copyright 2018-2022 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
|
||||
*
|
||||
* this library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* this library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
* PROJECT: ReactOS Explorer
|
||||
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
|
||||
* PURPOSE: Tray window implementation
|
||||
* COPYRIGHT: Copyright 2006-2007 Thomas Weidenmueller <w3seek@reactos.org>
|
||||
* Copyright 2018-2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
|
||||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
#include <commoncontrols.h>
|
||||
#include "appbar.h"
|
||||
|
||||
HRESULT TrayWindowCtxMenuCreator(ITrayWindow * TrayWnd, IN HWND hWndOwner, IContextMenu ** ppCtxMenu);
|
||||
LRESULT appbar_message(COPYDATASTRUCT* cds);
|
||||
void appbar_notify_all(HMONITOR hMon, UINT uMsg, HWND hwndExclude, LPARAM lParam);
|
||||
|
||||
#define WM_APP_TRAYDESTROY (WM_APP + 0x100)
|
||||
|
||||
@@ -56,8 +42,6 @@ void appbar_notify_all(HMONITOR hMon, UINT uMsg, HWND hwndExclude, LPARAM lParam
|
||||
#define IDHK_DESKTOP 0x1fe
|
||||
#define IDHK_PAGER 0x1ff
|
||||
|
||||
static const WCHAR szTrayWndClass[] = L"Shell_TrayWnd";
|
||||
|
||||
enum { NONE, TILED, CASCADED } g_Arrangement = NONE;
|
||||
|
||||
struct WINDOWPOSBACKUPDATA
|
||||
@@ -323,6 +307,7 @@ class CTrayWindow :
|
||||
public CComCoClass<CTrayWindow>,
|
||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||
public CWindowImpl < CTrayWindow, CWindow, CControlWinTraits >,
|
||||
public CAppBarManager,
|
||||
public ITrayWindow,
|
||||
public IShellDesktopTray,
|
||||
public IOleWindow,
|
||||
@@ -470,6 +455,9 @@ public:
|
||||
return;
|
||||
|
||||
SendMessage(m_DesktopWnd, WM_PROGMAN_SAVESTATE, 0, 0);
|
||||
|
||||
if (SHRestricted(REST_CLEARRECENTDOCSONEXIT))
|
||||
ClearRecentAndMru();
|
||||
}
|
||||
|
||||
LRESULT DoExitWindows()
|
||||
@@ -681,35 +669,35 @@ public:
|
||||
break;
|
||||
|
||||
case ID_SHELL_CMD_TILE_WND_H:
|
||||
appbar_notify_all(NULL, ABN_WINDOWARRANGE, NULL, TRUE);
|
||||
OnAppBarNotifyAll(NULL, NULL, ABN_WINDOWARRANGE, TRUE);
|
||||
if (g_Arrangement == NONE)
|
||||
{
|
||||
BackupWindowPos();
|
||||
}
|
||||
TileWindows(NULL, MDITILE_HORIZONTAL, NULL, 0, NULL);
|
||||
appbar_notify_all(NULL, ABN_WINDOWARRANGE, NULL, FALSE);
|
||||
OnAppBarNotifyAll(NULL, NULL, ABN_WINDOWARRANGE, FALSE);
|
||||
g_Arrangement = TILED;
|
||||
break;
|
||||
|
||||
case ID_SHELL_CMD_TILE_WND_V:
|
||||
appbar_notify_all(NULL, ABN_WINDOWARRANGE, NULL, TRUE);
|
||||
OnAppBarNotifyAll(NULL, NULL, ABN_WINDOWARRANGE, TRUE);
|
||||
if (g_Arrangement == NONE)
|
||||
{
|
||||
BackupWindowPos();
|
||||
}
|
||||
TileWindows(NULL, MDITILE_VERTICAL, NULL, 0, NULL);
|
||||
appbar_notify_all(NULL, ABN_WINDOWARRANGE, NULL, FALSE);
|
||||
OnAppBarNotifyAll(NULL, NULL, ABN_WINDOWARRANGE, FALSE);
|
||||
g_Arrangement = TILED;
|
||||
break;
|
||||
|
||||
case ID_SHELL_CMD_CASCADE_WND:
|
||||
appbar_notify_all(NULL, ABN_WINDOWARRANGE, NULL, TRUE);
|
||||
OnAppBarNotifyAll(NULL, NULL, ABN_WINDOWARRANGE, TRUE);
|
||||
if (g_Arrangement == NONE)
|
||||
{
|
||||
BackupWindowPos();
|
||||
}
|
||||
CascadeWindows(NULL, MDITILE_SKIPDISABLED, NULL, 0, NULL);
|
||||
appbar_notify_all(NULL, ABN_WINDOWARRANGE, NULL, FALSE);
|
||||
OnAppBarNotifyAll(NULL, NULL, ABN_WINDOWARRANGE, FALSE);
|
||||
g_Arrangement = CASCADED;
|
||||
break;
|
||||
|
||||
@@ -2391,18 +2379,29 @@ ChangePos:
|
||||
/* Set the initial lock state in the band site */
|
||||
m_TrayBandSite->Lock(g_TaskbarSettings.bLock);
|
||||
|
||||
RegisterHotKey(m_hWnd, IDHK_RUN, MOD_WIN, 'R');
|
||||
RegisterHotKey(m_hWnd, IDHK_MINIMIZE_ALL, MOD_WIN, 'M');
|
||||
RegisterHotKey(m_hWnd, IDHK_RESTORE_ALL, MOD_WIN|MOD_SHIFT, 'M');
|
||||
RegisterHotKey(m_hWnd, IDHK_HELP, MOD_WIN, VK_F1);
|
||||
RegisterHotKey(m_hWnd, IDHK_EXPLORE, MOD_WIN, 'E');
|
||||
RegisterHotKey(m_hWnd, IDHK_FIND, MOD_WIN, 'F');
|
||||
RegisterHotKey(m_hWnd, IDHK_FIND_COMPUTER, MOD_WIN|MOD_CONTROL, 'F');
|
||||
RegisterHotKey(m_hWnd, IDHK_NEXT_TASK, MOD_WIN, VK_TAB);
|
||||
RegisterHotKey(m_hWnd, IDHK_PREV_TASK, MOD_WIN|MOD_SHIFT, VK_TAB);
|
||||
RegisterHotKey(m_hWnd, IDHK_SYS_PROPERTIES, MOD_WIN, VK_PAUSE);
|
||||
RegisterHotKey(m_hWnd, IDHK_DESKTOP, MOD_WIN, 'D');
|
||||
RegisterHotKey(m_hWnd, IDHK_PAGER, MOD_WIN, 'B');
|
||||
static const UINT winkeys[] =
|
||||
{
|
||||
MAKELONG(IDHK_RUN, MAKEWORD('R', MOD_WIN)),
|
||||
MAKELONG(IDHK_MINIMIZE_ALL, MAKEWORD('M', MOD_WIN)),
|
||||
MAKELONG(IDHK_RESTORE_ALL, MAKEWORD('M', MOD_WIN|MOD_SHIFT)),
|
||||
MAKELONG(IDHK_HELP, MAKEWORD(VK_F1, MOD_WIN)),
|
||||
MAKELONG(IDHK_EXPLORE, MAKEWORD('E', MOD_WIN)),
|
||||
MAKELONG(IDHK_FIND, MAKEWORD('F', MOD_WIN)),
|
||||
MAKELONG(IDHK_FIND_COMPUTER, MAKEWORD('F', MOD_WIN|MOD_CONTROL)),
|
||||
MAKELONG(IDHK_NEXT_TASK, MAKEWORD(VK_TAB, MOD_WIN)),
|
||||
MAKELONG(IDHK_PREV_TASK, MAKEWORD(VK_TAB, MOD_WIN|MOD_SHIFT)),
|
||||
MAKELONG(IDHK_SYS_PROPERTIES, MAKEWORD(VK_PAUSE, MOD_WIN)),
|
||||
MAKELONG(IDHK_DESKTOP, MAKEWORD('D', MOD_WIN)),
|
||||
MAKELONG(IDHK_PAGER, MAKEWORD('B', MOD_WIN)),
|
||||
};
|
||||
if (!SHRestricted(REST_NOWINKEYS))
|
||||
{
|
||||
for (UINT i = 0; i < _countof(winkeys); ++i)
|
||||
{
|
||||
UINT mod = HIBYTE(HIWORD(winkeys[i])), key = LOBYTE(HIWORD(winkeys[i]));
|
||||
RegisterHotKey(m_hWnd, LOWORD(winkeys[i]), mod, key);
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -2454,6 +2453,7 @@ ChangePos:
|
||||
CheckTrayWndPosition();
|
||||
}
|
||||
|
||||
// Note: We rely on CDesktopBrowser to get this message and call SHSettingsChanged
|
||||
if (m_DesktopWnd)
|
||||
::SendMessageW(m_DesktopWnd, uMsg, wParam, lParam);
|
||||
|
||||
@@ -2503,11 +2503,14 @@ ChangePos:
|
||||
|
||||
LRESULT OnCopyData(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||
{
|
||||
COPYDATASTRUCT *pCopyData = (COPYDATASTRUCT *)lParam;
|
||||
PCOPYDATASTRUCT pCopyData = (PCOPYDATASTRUCT)lParam;
|
||||
if (!pCopyData)
|
||||
return FALSE;
|
||||
|
||||
switch (pCopyData->dwData)
|
||||
{
|
||||
case TABDMC_APPBAR:
|
||||
return appbar_message(pCopyData);
|
||||
return OnAppBarMessage(pCopyData);
|
||||
case TABDMC_NOTIFY:
|
||||
case TABDMC_LOADINPROC:
|
||||
return ::SendMessageW(m_TrayNotify, uMsg, wParam, lParam);
|
||||
@@ -2936,7 +2939,7 @@ HandleTrayContextMenu:
|
||||
LRESULT Ret = FALSE;
|
||||
/* FIXME: We can't check with IsChild whether the hwnd is somewhere inside
|
||||
the rebar control! But we shouldn't forward messages that the band
|
||||
site doesn't handle, such as other controls (start button, tray window */
|
||||
site doesn't handle, such as other controls (start button, tray window) */
|
||||
|
||||
HRESULT hr = E_FAIL;
|
||||
|
||||
@@ -3371,7 +3374,7 @@ HandleTrayContextMenu:
|
||||
return 0;
|
||||
}
|
||||
|
||||
DECLARE_WND_CLASS_EX(szTrayWndClass, CS_DBLCLKS, COLOR_3DFACE)
|
||||
DECLARE_WND_CLASS_EX(L"Shell_TrayWnd", CS_DBLCLKS, COLOR_3DFACE)
|
||||
|
||||
BEGIN_MSG_MAP(CTrayWindow)
|
||||
if (m_StartMenuBand != NULL)
|
||||
@@ -3562,6 +3565,24 @@ HandleTrayContextMenu:
|
||||
COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu)
|
||||
END_COM_MAP()
|
||||
|
||||
protected:
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// AppBar section
|
||||
//
|
||||
// See also: appbar.cpp
|
||||
// TODO: freedesktop _NET_WM_STRUT integration
|
||||
// TODO: find when a fullscreen app is in the foreground and send FULLSCREENAPP notifications
|
||||
// TODO: detect changes in the screen size and send ABN_POSCHANGED ?
|
||||
// TODO: multiple monitor support
|
||||
|
||||
BOOL IsAutoHideState() const override { return g_TaskbarSettings.sr.AutoHide; }
|
||||
BOOL IsHidingState() const override { return m_AutoHideState == AUTOHIDE_HIDING; }
|
||||
HMONITOR GetMonitor() const override { return m_Monitor; }
|
||||
HMONITOR GetPreviousMonitor() const override { return m_PreviousMonitor; }
|
||||
INT GetPosition() const override { return m_Position; }
|
||||
const RECT* GetTrayRect() override { return &m_TrayRects[m_Position]; }
|
||||
HWND GetDesktopWnd() const override { return m_DesktopWnd; }
|
||||
};
|
||||
|
||||
class CTrayWindowCtxMenu :
|
||||
|
@@ -104,20 +104,20 @@ HKLM,"SOFTWARE\Classes\Applications\mplay32.exe\SupportedTypes",".avi",0x0000000
|
||||
HKLM,"SOFTWARE\Classes\ftp","",0x00000000,"URL:File Transfer Protocol"
|
||||
HKLM,"SOFTWARE\Classes\ftp\Source Filter","",0x00000000,"{E436EBB6-524F-11CE-9F53-0020AF0BA770}"
|
||||
HKLM,"SOFTWARE\Classes\ftp","URL Protocol",0x00000000,""
|
||||
HKLM,"SOFTWARE\Classes\ftp\shell\open\command","",0x00000000,"""%programfiles%\Internet Explorer\iexplore.exe"" ""%1"""
|
||||
HKLM,"SOFTWARE\Classes\ftp\shell\open\command","",0x00020000,"""%programfiles%\Internet Explorer\iexplore.exe"" ""%1"""
|
||||
|
||||
HKLM,"SOFTWARE\Classes\gopher","",0x00000000,"URL:Gopher Protocol"
|
||||
HKLM,"SOFTWARE\Classes\gopher\Source Filter","",0x00000000,"{E436EBB6-524F-11CE-9F53-0020AF0BA770}"
|
||||
HKLM,"SOFTWARE\Classes\gopher","URL Protocol",0x00000000,""
|
||||
;see http
|
||||
;HKLM,"SOFTWARE\Classes\gopher\shell\open\command","",0x00000000,"""%programfiles%\Internet Explorer\iexplore.exe"" -nohome"
|
||||
HKLM,"SOFTWARE\Classes\gopher\shell\open\command","",0x00000000,"""%programfiles%\Internet Explorer\iexplore.exe"" ""%1"""
|
||||
;HKLM,"SOFTWARE\Classes\gopher\shell\open\command","",0x00020000,"""%programfiles%\Internet Explorer\iexplore.exe"" -nohome"
|
||||
HKLM,"SOFTWARE\Classes\gopher\shell\open\command","",0x00020000,"""%programfiles%\Internet Explorer\iexplore.exe"" ""%1"""
|
||||
|
||||
HKLM,"SOFTWARE\Classes\http","",0x00000000,"URL:HyperText Transfer Protocol"
|
||||
HKLM,"SOFTWARE\Classes\http\DefaultIcon","",0x00000000,"%SystemRoot%\system32\url.dll,0"
|
||||
HKLM,"SOFTWARE\Classes\http\DefaultIcon","",0x00020000,"%SystemRoot%\system32\url.dll,0"
|
||||
HKLM,"SOFTWARE\Classes\http\Source Filter","",0x00000000,"{E436EBB6-524F-11CE-9F53-0020AF0BA770}"
|
||||
HKLM,"SOFTWARE\Classes\http","URL Protocol",0x00000000,""
|
||||
HKLM,"SOFTWARE\Classes\http\shell\open\command","",0x00000000,"""%programfiles%\Internet Explorer\iexplore.exe"" ""%1"""
|
||||
HKLM,"SOFTWARE\Classes\http\shell\open\command","",0x00020000,"""%programfiles%\Internet Explorer\iexplore.exe"" ""%1"""
|
||||
;TODO : iexplore should use DDE
|
||||
;HKLM,"SOFTWARE\Classes\http\shell\open\ddeexec","",0x00000000,"""%1"",,-1,0,,,,"
|
||||
;HKLM,"SOFTWARE\Classes\http\shell\open\ddeexec","NoActivateHandler",0x00000000,""
|
||||
@@ -129,14 +129,14 @@ HKLM,"SOFTWARE\Classes\https\DefaultIcon","",0x00000000,"%SystemRoot%\system32\u
|
||||
HKLM,"SOFTWARE\Classes\https\Source Filter","",0x00000000,"{E436EBB6-524F-11CE-9F53-0020AF0BA770}"
|
||||
HKLM,"SOFTWARE\Classes\https","URL Protocol",0x00000000,""
|
||||
;see http
|
||||
;HKLM,"SOFTWARE\Classes\https\shell\open\command","",0x00000000,"""%programfiles%\Internet Explorer\iexplore.exe"" -nohome"
|
||||
HKLM,"SOFTWARE\Classes\https\shell\open\command","",0x00000000,"""%programfiles%\Internet Explorer\iexplore.exe"" ""%1"""
|
||||
;HKLM,"SOFTWARE\Classes\https\shell\open\command","",0x00020000,"""%programfiles%\Internet Explorer\iexplore.exe"" -nohome"
|
||||
HKLM,"SOFTWARE\Classes\https\shell\open\command","",0x00020000,"""%programfiles%\Internet Explorer\iexplore.exe"" ""%1"""
|
||||
|
||||
; Register system default web browser
|
||||
HKLM,"SOFTWARE\Clients\StartMenuInternet","",0x00000000,"IEXPLORE.EXE"
|
||||
HKLM,"SOFTWARE\Clients\StartMenuInternet\IEXPLORE.EXE","",0x00000000,"Internet Explorer"
|
||||
HKLM,"SOFTWARE\Clients\StartMenuInternet\IEXPLORE.EXE\DefaultIcon","",0x00000000,"%programfiles%\Internet Explorer\iexplore.exe,-7"
|
||||
HKLM,"SOFTWARE\Clients\StartMenuInternet\IEXPLORE.EXE\shell\open\command","",0x00000000,"%programfiles%\Internet Explorer\iexplore.exe"
|
||||
HKLM,"SOFTWARE\Clients\StartMenuInternet\IEXPLORE.EXE\DefaultIcon","",0x00020000,"%programfiles%\Internet Explorer\iexplore.exe,-7"
|
||||
HKLM,"SOFTWARE\Clients\StartMenuInternet\IEXPLORE.EXE\shell\open\command","",0x00020000,"%programfiles%\Internet Explorer\iexplore.exe"
|
||||
|
||||
; CTF
|
||||
HKLM,"SOFTWARE\Microsoft\CTF\SystemShared",,0x00000012
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user