mirror of
https://github.com/reactos/reactos.git
synced 2025-01-01 20:13:23 +00:00
PaintDesktop(): print system version on desktop background
svn path=/trunk/; revision=10870
This commit is contained in:
parent
e740fd1758
commit
0f892545b8
1 changed files with 102 additions and 7 deletions
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*
|
*
|
||||||
* $Id: desktop.c,v 1.20 2004/08/17 21:52:17 weiden Exp $
|
* $Id: desktop.c,v 1.21 2004/09/15 20:53:43 mf Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -667,6 +667,44 @@ NtUserCloseDesktop(HDESK hDesktop)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int GetSystemVersionString(LPWSTR buffer)
|
||||||
|
{
|
||||||
|
RTL_OSVERSIONINFOEXW versionInfo;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
versionInfo.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW);
|
||||||
|
|
||||||
|
if (!NT_SUCCESS(RtlGetVersion((PRTL_OSVERSIONINFOW)&versionInfo)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (versionInfo.dwMajorVersion <= 4)
|
||||||
|
len = swprintf(buffer,
|
||||||
|
L"ReactOS Version %d.%d %s Build %d",
|
||||||
|
versionInfo.dwMajorVersion, versionInfo.dwMinorVersion,
|
||||||
|
versionInfo.szCSDVersion, versionInfo.dwBuildNumber&0xFFFF);
|
||||||
|
else
|
||||||
|
len = swprintf(buffer,
|
||||||
|
L"ReactOS %s (Build %d)",
|
||||||
|
versionInfo.szCSDVersion, versionInfo.dwBuildNumber&0xFFFF);
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NTSTATUS STDCALL PaintDesktopVersionCallback(
|
||||||
|
IN PWSTR ValueName, IN ULONG ValueType,
|
||||||
|
IN PVOID ValueData, IN ULONG ValueLength,
|
||||||
|
IN PVOID Context, IN PVOID EntryContext
|
||||||
|
)
|
||||||
|
{
|
||||||
|
DPRINT("PaintDesktopVersionCallback ValueType=%d ValueLength=%d\n", ValueType, ValueLength);
|
||||||
|
|
||||||
|
if (ValueType==REG_DWORD && ValueLength==sizeof(DWORD))
|
||||||
|
*((DWORD*)Context) = *(DWORD*)ValueData;
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NtUserPaintDesktop
|
* NtUserPaintDesktop
|
||||||
*
|
*
|
||||||
|
@ -675,7 +713,7 @@ NtUserCloseDesktop(HDESK hDesktop)
|
||||||
* function is provided primarily for shell desktops.
|
* function is provided primarily for shell desktops.
|
||||||
*
|
*
|
||||||
* Parameters
|
* Parameters
|
||||||
* hdc
|
* hDC
|
||||||
* Handle to the device context.
|
* Handle to the device context.
|
||||||
*
|
*
|
||||||
* Status
|
* Status
|
||||||
|
@ -688,6 +726,13 @@ NtUserPaintDesktop(HDC hDC)
|
||||||
RECT Rect;
|
RECT Rect;
|
||||||
HBRUSH DesktopBrush, PreviousBrush;
|
HBRUSH DesktopBrush, PreviousBrush;
|
||||||
HWND hWndDesktop;
|
HWND hWndDesktop;
|
||||||
|
BOOL doPatBlt = TRUE;
|
||||||
|
|
||||||
|
RTL_QUERY_REGISTRY_TABLE queryTable[2];
|
||||||
|
DWORD displayVersion;
|
||||||
|
NTSTATUS status;
|
||||||
|
int len;
|
||||||
|
|
||||||
PWINSTATION_OBJECT WinSta = PsGetWin32Thread()->Desktop->WindowStation;
|
PWINSTATION_OBJECT WinSta = PsGetWin32Thread()->Desktop->WindowStation;
|
||||||
|
|
||||||
IntGdiGetClipBox(hDC, &Rect);
|
IntGdiGetClipBox(hDC, &Rect);
|
||||||
|
@ -728,24 +773,74 @@ NtUserPaintDesktop(HDC hDC)
|
||||||
NtGdiPatBlt(hDC, Rect.left, Rect.top, Rect.right, Rect.bottom, PATCOPY);
|
NtGdiPatBlt(hDC, Rect.left, Rect.top, Rect.right, Rect.bottom, PATCOPY);
|
||||||
NtGdiSelectObject(hDC, PreviousBrush);
|
NtGdiSelectObject(hDC, PreviousBrush);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
doPatBlt = FALSE;
|
||||||
|
|
||||||
hOldBitmap = NtGdiSelectObject(hWallpaperDC, WinSta->hbmWallpaper);
|
hOldBitmap = NtGdiSelectObject(hWallpaperDC, WinSta->hbmWallpaper);
|
||||||
NtGdiBitBlt(hDC, x, y, WinSta->cxWallpaper, WinSta->cyWallpaper, hWallpaperDC, 0, 0, SRCCOPY);
|
NtGdiBitBlt(hDC, x, y, WinSta->cxWallpaper, WinSta->cyWallpaper, hWallpaperDC, 0, 0, SRCCOPY);
|
||||||
NtGdiSelectObject(hWallpaperDC, hOldBitmap);
|
NtGdiSelectObject(hWallpaperDC, hOldBitmap);
|
||||||
|
|
||||||
NtGdiDeleteDC(hWallpaperDC);
|
NtGdiDeleteDC(hWallpaperDC);
|
||||||
if(x <= 0 && y <= 0) return TRUE;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (doPatBlt) {
|
||||||
PreviousBrush = NtGdiSelectObject(hDC, DesktopBrush);
|
PreviousBrush = NtGdiSelectObject(hDC, DesktopBrush);
|
||||||
NtGdiPatBlt(hDC, Rect.left, Rect.top, Rect.right, Rect.bottom, PATCOPY);
|
NtGdiPatBlt(hDC, Rect.left, Rect.top, Rect.right, Rect.bottom, PATCOPY);
|
||||||
NtGdiSelectObject(hDC, PreviousBrush);
|
NtGdiSelectObject(hDC, PreviousBrush);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Display system version on the desktop background
|
||||||
|
*/
|
||||||
|
|
||||||
|
RtlZeroMemory(queryTable, sizeof(queryTable));
|
||||||
|
|
||||||
|
queryTable[0].QueryRoutine = PaintDesktopVersionCallback;
|
||||||
|
queryTable[0].Name = L"PaintDesktopVersion";
|
||||||
|
queryTable[0].EntryContext = &displayVersion;
|
||||||
|
|
||||||
|
/* query the "PaintDesktopVersion" flag in the "Control Panel\Desktop" key */
|
||||||
|
status = RtlQueryRegistryValues(RTL_REGISTRY_USER, L"Control Panel\\Desktop", queryTable, NULL, NULL);
|
||||||
|
|
||||||
|
if (!NT_SUCCESS(status)) {
|
||||||
|
DPRINT1("RtlQueryRegistryValues failed for PaintDesktopVersion: status=%x\n", status);
|
||||||
|
displayVersion = 0;
|
||||||
|
}
|
||||||
|
DPRINT("PaintDesktopVersion=%d\n", displayVersion);
|
||||||
|
|
||||||
|
if (displayVersion) {
|
||||||
|
static WCHAR s_wszVersion[256] = {0};
|
||||||
|
RECT rect;
|
||||||
|
|
||||||
|
if (*s_wszVersion)
|
||||||
|
len = wcslen(s_wszVersion);
|
||||||
|
else
|
||||||
|
len = GetSystemVersionString(s_wszVersion);
|
||||||
|
|
||||||
|
if (len) {
|
||||||
|
if (!NtUserSystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0)) {
|
||||||
|
rect.right = NtUserGetSystemMetrics(SM_CXSCREEN);
|
||||||
|
rect.bottom = NtUserGetSystemMetrics(SM_CYSCREEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
COLORREF color_old = NtGdiSetTextColor(hDC, RGB(255,255,255));
|
||||||
|
UINT align_old = NtGdiSetTextAlign(hDC, TA_RIGHT);
|
||||||
|
int mode_old = NtGdiSetBkMode(hDC, TRANSPARENT);
|
||||||
|
|
||||||
|
NtGdiTextOut(hDC, rect.right-16, rect.bottom-48, s_wszVersion, len);
|
||||||
|
|
||||||
|
NtGdiSetBkMode(hDC, mode_old);
|
||||||
|
NtGdiSetTextAlign(hDC, align_old);
|
||||||
|
NtGdiSetTextColor(hDC, color_old);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NtUserSwitchDesktop
|
* NtUserSwitchDesktop
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue