在 C# 中可以使用 GetDpiForWindow 函数来获取指定窗口的 DPI 值。DPI 值表示每英寸点数(dots per inch),是计算机显示屏幕分辨率的一种度量方式。可以通过获取当前用户的 SCREEN_DPI 设置来优化窗口显示效果。

以下是一个使用 C# 调用 GetDpiForWindow 函数获取当前用户的 DPI 设置的示例代码:

[DllImport("user32.dll")]
static extern int GetDpiForWindow(IntPtr hwnd);

// 获取当前 DPI 值
int dpi = GetDpiForWindow(IntPtr.Zero);

在这个示例中,我们调用 GetDpiForWindow 函数,并将窗口句柄设置为 IntPtr.Zero,表示获取当前活动窗口的 DPI 值。如果要获取特定窗口的 DPI 值,可以将窗口的句柄作为参数传递给该函数。

需要注意的是,获取 DPI 值时需要使用正确的缩放方法来处理窗口和控件的大小和位置。可以使用 VisualTreeHelper 类提供的 GetDpiScaleRatio 方法来获取当前 DPI 值与系统默认 DPI 值的比例系数,然后通过相应地缩放窗口和控件来适应不同的 DPI 值。

// 获取 DPI 缩放比例
var dpiScale = VisualTreeHelper.GetDpiScaleRatio(this);

// 缩放窗口和控件大小
this.Width = 200 * dpiScale.Width;
this.Height = 100 * dpiScale.Height;