C# 以编程方式读取windows的区域设置

C# 以编程方式读取windows的区域设置,c#,.net,culture,C#,.net,Culture,我需要知道C#Winforms应用程序中底层O/S的当前区域设置/区域性的默认页面大小(如A4或字母) 我看到MSDN的一个页面解释了这一点,但后来我失去了链接。我怎样才能做到这一点呢?我想你需要的是。不是区域设置 new PrinterSettings().DefaultPageSettings.PaperSize; 请参见: 使用系统、绘图、打印 private void button1_Click(object sender, EventArgs e) {

我需要知道C#Winforms应用程序中底层O/S的当前区域设置/区域性的默认页面大小(如A4或字母)

我看到MSDN的一个页面解释了这一点,但后来我失去了链接。我怎样才能做到这一点呢?

我想你需要的是。不是区域设置

new PrinterSettings().DefaultPageSettings.PaperSize;
请参见:

使用系统、绘图、打印

    private void button1_Click(object sender, EventArgs e)
    {

        PrintDocument doc = new PrintDocument();
        PageSettings ps = doc.DefaultPageSettings;

        if (ps.Landscape)
            label1.Text = "LANDSCAPE";
        PaperSize paperSize = ps.PaperSize;

    }

您可以使用ps的许多其他属性。

您必须查找以下内容:

对于懒惰的人,@logeeks的答案将使用以下代码:

[DllImport("kernel32.dll", SetLastError = true)]
static extern int GetLocaleInfo(
   uint Locale,
   uint LCType,
   [Out] StringBuilder lpLCData,
   int cchData);

public enum LCType : uint
{
    LOCALE_IPAPERSIZE = 0x0000100A,   // 1 = letter, 5 = legal, 8 = a3, 9 = a4
}

void Main()
{
    //CultureInfo culture = CultureInfo.GetCultureInfo("en-US");
    CultureInfo culture = CultureInfo.GetCultureInfo("de-DE"); ;

    var output = new StringBuilder();

    int result = GetLocaleInfo((uint)(culture.LCID), (uint)LCType.LOCALE_IPAPERSIZE, output, 99);

    if (result > 0)
    {
        // 1 = letter, 5 = legal, 8 = a3, 9 = a4
        Console.WriteLine(output.ToString());
    }
    else
    {
        Console.WriteLine("fail");
    }
}
参考资料:


我认为默认纸张大小不是系统区域设置的一部分。然而,MS Office有这样一个设置。我在某处看到一个名为ILocale.PageSize的常量。我在找它,