Windows2003-3790/windows/appcompat/shims/general/forcetemporarymodechange.cpp

159 lines
3.0 KiB
C++
Raw Normal View History

2001-01-01 00:00:00 +01:00
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
ForceTemporaryModeChange.cpp
Abstract:
A hack for several apps that permanently change the display mode and fail
to restore it correctly. Some of these apps do restore the resolution, but
not the refresh rate. 1024x768 @ 60Hz looks really bad.
Notes:
This is a general purpose shim.
History:
01/20/2000 linstev Created
--*/
#include "precomp.h"
IMPLEMENT_SHIM_BEGIN(ForceTemporaryModeChange)
#include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN
APIHOOK_ENUM_ENTRY(ChangeDisplaySettingsA)
APIHOOK_ENUM_ENTRY(ChangeDisplaySettingsW)
APIHOOK_ENUM_ENTRY(ChangeDisplaySettingsExA)
APIHOOK_ENUM_ENTRY(ChangeDisplaySettingsExW)
APIHOOK_ENUM_END
/*++
Force temporary change.
--*/
LONG
APIHOOK(ChangeDisplaySettingsA)(
LPDEVMODEA lpDevMode,
DWORD dwFlags
)
{
if (dwFlags != CDS_FULLSCREEN) {
LOGN(
eDbgLevelError,
"[ChangeDisplaySettingsA] Changing flags to CDS_FULLSCREEN.");
}
return ORIGINAL_API(ChangeDisplaySettingsA)(
lpDevMode,
CDS_FULLSCREEN);
}
/*++
Force temporary change.
--*/
LONG
APIHOOK(ChangeDisplaySettingsW)(
LPDEVMODEW lpDevMode,
DWORD dwFlags
)
{
if (dwFlags != CDS_FULLSCREEN) {
LOGN(
eDbgLevelError,
"[ChangeDisplaySettingsW] Changing flags to CDS_FULLSCREEN.");
}
return ORIGINAL_API(ChangeDisplaySettingsW)(
lpDevMode,
CDS_FULLSCREEN);
}
/*++
Force temporary change.
--*/
LONG
APIHOOK(ChangeDisplaySettingsExA)(
LPCSTR lpszDeviceName,
LPDEVMODEA lpDevMode,
HWND hwnd,
DWORD dwflags,
LPVOID lParam
)
{
if (dwflags != CDS_FULLSCREEN) {
LOGN(
eDbgLevelError,
"[ChangeDisplaySettingsExA] Changing flags to CDS_FULLSCREEN.");
}
return ORIGINAL_API(ChangeDisplaySettingsExA)(
lpszDeviceName,
lpDevMode,
hwnd,
CDS_FULLSCREEN,
lParam);
}
/*++
Force temporary change.
--*/
LONG
APIHOOK(ChangeDisplaySettingsExW)(
LPCWSTR lpszDeviceName,
LPDEVMODEW lpDevMode,
HWND hwnd,
DWORD dwflags,
LPVOID lParam
)
{
if (dwflags != CDS_FULLSCREEN) {
LOGN(
eDbgLevelError,
"[ChangeDisplaySettingsExW] Changing flags to CDS_FULLSCREEN.");
}
return ORIGINAL_API(ChangeDisplaySettingsExW)(
lpszDeviceName,
lpDevMode,
hwnd,
CDS_FULLSCREEN,
lParam);
}
/*++
Register hooked functions
--*/
HOOK_BEGIN
APIHOOK_ENTRY(USER32.DLL, ChangeDisplaySettingsA)
APIHOOK_ENTRY(USER32.DLL, ChangeDisplaySettingsW)
APIHOOK_ENTRY(USER32.DLL, ChangeDisplaySettingsExA)
APIHOOK_ENTRY(USER32.DLL, ChangeDisplaySettingsExW)
HOOK_END
IMPLEMENT_SHIM_END