以编程方式阅读Windows的语言环境设置

问题描述:

我需要从C#Winforms应用程序中知道底层O/S的当前语言环境/文化的默认页面大小(例如A4或Letter)。以编程方式阅读Windows的语言环境设置

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

+0

我不觉得默认的纸张尺寸为系统区域设置的一部分。但MS Office有这样的设置。 – 2011-06-14 09:25:08

+0

我在某处看到一个名为类似ILocale.PageSize的常量。我正在寻找它, – jadedboy 2011-06-14 09:35:20

new PrinterSettings().DefaultPageSettings.PaperSize; 

+1

要清楚,这是特定打印机的纸张尺寸 – 2011-06-14 09:49:38

参见此:

使用System.Drawing.Printing;

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"); 
    } 
} 

参考文献: