我想检索 C++ Windows API 应用程序中的 “使文本变大” 百分比。我知道如何检索缩放(DPI)系数,但我还想包括字体缩放百分比(请参阅附图,上值,而不是下值)。
最终,我想制作保留用户字体和 DPI 缩放设置的应用程序,以便完全支持辅助功能。目前,字体在
.rc
文件中指定,如下所示
FONT 8, "MS Shell Dlg 2", 0, 0, 0x0
但即使省略 FONT 语句,更改“使文本更大”设置时字体仍然不会改变。
对于“使所有内容变大”部分,您可以使用 GetScaleFactorForMonitor
获取特定显示器的比例因子。
对于“使文本变大”部分,您可以使用 WinRT 静态属性:UISettings.TextScaleFactor
获取系统文本大小设置的值。
否则后者也可以使用
TextScaleFactor
来读取
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Accessibility
注册表项中的 DWORD 属性(但这没有正式记录)。
来自 https://devblogs.microsoft.com/oldnewthing/20230830-00/?p=108680
我为您删除了 C# 的示例。请注意,您需要 Windows 10 SDK 才能执行此操作,但通过一些工作,您可以获得与 Windows 8.1 SDK 一起使用的最后一个示例。
IUISettings2
接口可以在您自己的代码中定义。
// C++/WinRT
#include <winrt/Windows.UI.ViewManagement.h>
double GetTextScaleFactor()
{
return winrt::Windows::UI::
ViewManagement::UISettings().TextScaleFactor();
}
// C++/CX
double GetTextScaleFactor()
{
return (ref new Windows::UI::
ViewManagement::UISettings())->TextScaleFactor;
}
// C++/WRL
#include <Windows.UI.ViewManagement.h>
HRESULT GetTextScaleFactor(double* value)
{
*value = 1.0;
using namespace Microsoft::WRL;
using namespace Microsoft::WRL::Wrappers;
ComPtr<IInspectable> instance;
HRESULT hr = RoActivateInstance(HStringReference(
RuntimeClass_Windows_UI_ViewManagement_UISettings).Get(),
&instance);
if (FAILED(hr)) return hr;
ComPtr<ABI::Windows::UI::ViewManagement::IUISettings2>
settings2;
hr = instance.As(&settings2);
if (FAILED(hr)) return hr;
hr = settings2->get_TextScaleFactor(value);
if (FAILED(hr)) return hr;
return S_OK;
}