Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mendapatkan Secara Pemrograman Faktor Penskalaan Paparan Windows dalam C#?

Bagaimana untuk Mendapatkan Secara Pemrograman Faktor Penskalaan Paparan Windows dalam C#?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-15 12:10:43496semak imbas

How to Programmatically Retrieve Windows Display Scaling Factor in C#?

Mengakses Tetapan Paparan Windows dalam C#

Versi Windows 7 dan lebih baru menyediakan tetapan Panel Kawalan yang membolehkan pengguna melaraskan teks dan saiz elemen UI. Pembangun C# selalunya perlu mendapatkan semula tetapan ini untuk tingkah laku aplikasi dinamik.

Penyelesaian Praktikal

Secara langsung menggunakan graphics.DpiX dan DeviceCap.LOGPIXELSX secara tidak dijangka mengembalikan nilai tetap (96 DPI) tanpa mengira penskalaan sebenar. Untuk menentukan faktor penskalaan dengan tepat, pendekatan berbeza diperlukan:

<code class="language-csharp">[DllImport("gdi32.dll")]
static extern int GetDeviceCaps(IntPtr hdc, int nIndex);

public enum DeviceCap
{
    VERTRES = 10,
    DESKTOPVERTRES = 117
}

private float GetScalingFactor()
{
    using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
    {
        IntPtr desktop = g.GetHdc();
        int logicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.VERTRES);
        int physicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.DESKTOPVERTRES);
        g.ReleaseHdc(desktop);
        return (float)physicalScreenHeight / logicalScreenHeight; // e.g., 1.25 for 125% scaling
    }
}</code>

Coretan kod ini memanfaatkan GetDeviceCaps untuk membandingkan ketinggian skrin logik dan fizikal, memberikan faktor penskalaan yang tepat. Hasil daripada 1.25, misalnya, menunjukkan tahap penskalaan 125%.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Secara Pemrograman Faktor Penskalaan Paparan Windows dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn