« 2013年07月 | メイン | 2013年10月 »

2013年09月 アーカイブ

2013年09月04日

[C#] Windows 及び Internet Explorer のバージョンを調べる

■ 概要

C# で Windows 及び Internet Explorer のバージョンを調べる方法を示す。

■ 解説

・C# での Windows のバージョンの取得方法

Windows のバージョンは、System.Environment.OSVersion.Version で取得できる。

例えば、Windows 8 のバージョンは "6.2.9200.0" ですが、メジャー バージョンである最初の 6 だけを得たい場合は、System.Environment.OSVersion.Version.Major で int として取得できる。

ちなみに、マイナー バージョンの 2 の部分の取得には、System.Environment.OSVersion.Version.Minor を使う。

・C# での Internet Explorer のバージョンの取得方法

Internet Explorer のバージョンはレジストリで確認することができる。

レジストリの HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer の Version の値や svcVersion の値で確認できる (Internet Explorer 9 以前は Version、Internet Explorer 10 は svcVersion)。

下のサンプル コードでは、Registry.LocalMachine.OpenSubKey メソッドでキーをオープンし、キーの GetValue メソッドで値を取得している。

ちなみに、Internet Explorer のバージョンは次のサイトで確認することができる。

例えば、Windows 8 の Internet Explorer 10 では、"10.0.9200.16384" だ。

■ サンプル コード

using Microsoft.Win32; 
using System; 

namespace IEVersionChecker 
{ 
    public static class VersionChecker 
    { 
        public static Version WindowsVersion 
        { 
            get { return Environment.OSVersion.Version; } 
        } 

        public static int WindowsMajorVersion 
        { 
            get { return WindowsVersion.Major; } 
        } 

        public static string InternetExplorerVersion // 取得失敗時は null 
        { 
            get 
            { 
                const string internetExplorerKeyName = @"SOFTWARE\Microsoft\Internet Explorer"; // レジストリのこの場所を確認 
                const string svcVersionValueName = "svcVersion"; // Internet Explorer 10 からはこれの値でチェック 
                const string versionValueName = "Version" ; // Internet Explorer 9 以前はこれの値でチェック 

                try { 
                    using (var key = Registry.LocalMachine.OpenSubKey(internetExplorerKeyName)) { 
                        return (string)(key.GetValue(svcVersionValueName) ?? key.GetValue(versionValueName)); 
                    } 
                } catch (Exception) { 
                    return null; 
                } 
            } 
        } 

        public static int InternetExplorerMajorVersion // 取得失敗時は 0 
        { 
            get 
            { 
                var internetExplorerVersion = InternetExplorerVersion; 
                if (!string.IsNullOrWhiteSpace(internetExplorerVersion)) { 
                    var versionTexts = internetExplorerVersion.Split(new Char[] { '.' }); 
                    if (versionTexts.Length > 0) { 
                        int majorVersion; 
                        if (int.TryParse(versionTexts[0], out majorVersion)) 
                            return majorVersion; 
                    } 
                } 
                return 0; 
            } 
        } 
    } 

    class Program 
    { 
        static void Main() 
        { 
            Console.WriteLine("Windows のバージョンは、{0}。", VersionChecker.WindowsVersion); 
            Console.WriteLine("Windows のメジャー バージョンは、{0}。", VersionChecker.WindowsMajorVersion); 
            Console.WriteLine("Internet Explorer のバージョンは、{0}。", VersionChecker.InternetExplorerVersion); 
            Console.WriteLine("Internet Explorer のメジャー バージョンは、{0}。", VersionChecker.InternetExplorerMajorVersion); 
        } 
    } 
}

■ 実行方法

  1. Windows 上の Visual Studio 2012 以降で「コンソール アプリケーション Visual C#」を新規作成し、Program.cs を上のものに書き換える。
  2. メニューの「デバッグ」-「デバッグなしで開始」を選択するか、Ctrl + F5 キーを押して実行する。
  3.  コマンド プロンプトが起動し、例えば次のように表示される。
Windows のバージョンは、6.2.9200.0。
Windows のメジャー バージョンは、6。
Internet Explorer のバージョンは、10.0.9200.16635。
Internet Explorer のメジャー バージョンは、10。
続行するには何かキーを押してください . . .

2013年09月27日

[C#] 文字が数字かどうかを判定する (char.IsNumber メソッドでローマ数字や漢数字は数字と看做される?)

文字が数字かどうかを判定する場合、System.Char.IsNumber メソッドを使うことができる。

では、ローマ数字などは数字と判定されるのだろうか?

char.IsNumber の場合

今回調べた結果、次のようなテストが通ることが分かった。

using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class CommonTest
{
    [TestMethod]
    public void charのIsNumberのテスト()
    {
              // ※ 一部に機種依存文字があるので注意    

        // 指定した文字が数字だと判断されるケース
        Assert.IsTrue(char.IsNumber('0'));
        Assert.IsTrue(char.IsNumber('1'));
        Assert.IsTrue(char.IsNumber('Ⅲ')); // ローマ数字 (大文字) の 3
        Assert.IsTrue(char.IsNumber('ⅲ')); // ローマ数字 (小文字) の 3
        Assert.IsTrue(char.IsNumber('Ⅰ')); // ローマ数字 (大文字) の 1
        Assert.IsTrue(char.IsNumber('①')); // 丸付きの 1
        Assert.IsTrue(char.IsNumber('2')); // 所謂全角の 2

        // 指定した文字が数字だと判断されないケース
        Assert.IsFalse(char.IsNumber('.')); // 小数点
        Assert.IsFalse(char.IsNumber('-')); // マイナス記号
        Assert.IsFalse(char.IsNumber('I')); // アルファベットの I
        Assert.IsFalse(char.IsNumber('一')); // 漢数字
        Assert.IsFalse(char.IsNumber('四')); // 漢数字
        Assert.IsFalse(char.IsNumber('壱')); // 大字の 1
        Assert.IsFalse(char.IsNumber('壹')); // 大字の 1 (壱の舊字體)
    }
} 

ローマ数字や丸付き数字、所謂全角の数字が数字と見做されていることが分かる。

char.IsDigit の場合

char.IsDigit だとどうだろう。

using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestMethod]
public void charのIsDigitのテスト()
{
    // ※ 一部に機種依存文字があるので注意    

    // 指定した文字が数字だと判断されるケース
    Assert.IsTrue(char.IsDigit('0'));
    Assert.IsTrue(char.IsDigit('1'));
    Assert.IsTrue(char.IsDigit('2')); // 所謂全角の 2

    // 指定した文字が数字だと判断されないケース
    Assert.IsFalse(char.IsDigit('.')); // 小数点
    Assert.IsFalse(char.IsDigit('-')); // マイナス
    Assert.IsFalse(char.IsDigit('①')); // 丸付きの 1
    Assert.IsFalse(char.IsDigit('Ⅲ')); // ローマ数字 (大文字) の 3
    Assert.IsFalse(char.IsDigit('ⅲ')); // ローマ数字 (小文字) の 3
    Assert.IsFalse(char.IsDigit('Ⅰ')); // ローマ数字 (大文字) の 1
    Assert.IsFalse(char.IsDigit('I')); // アルファベットの I
    Assert.IsFalse(char.IsDigit('一')); // 漢数字
    Assert.IsFalse(char.IsDigit('四')); // 漢数字
    Assert.IsFalse(char.IsDigit('壱')); // 大字の 1
    Assert.IsFalse(char.IsDigit('壹')); // 大字の 1 (壱の舊字體)
}

こちらでは、ローマ数字や丸付き数字が数字だと見做されない。

int.TryParse の場合

int.TryParse でもやってみた。

using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestMethod]
public void intのTryParseのテスト()
{
    // ※ 一部に機種依存文字があるので注意    

    int number;

    // 指定した文字が数字だと判断されるケース
    Assert.IsTrue(int.TryParse("0", out number));
    Assert.IsTrue(int.TryParse("1", out number));
    Assert.IsTrue(int.TryParse("2", out number)); // 所謂全角の 2

    // 指定した文字が数字だと判断されないケース
    Assert.IsFalse(int.TryParse(".", out number)); // 小数点
    Assert.IsFalse(int.TryParse("-", out number)); // マイナス
    Assert.IsFalse(int.TryParse("①", out number)); // 丸付きの 1
    Assert.IsFalse(int.TryParse("Ⅲ", out number)); // ローマ数字 (大文字) の 3
    Assert.IsFalse(int.TryParse("ⅲ", out number)); // ローマ数字 (小文字) の 3
    Assert.IsFalse(int.TryParse("Ⅰ", out number)); // ローマ数字 (大文字) の 1
    Assert.IsFalse(int.TryParse("I", out number)); // アルファベットの I
    Assert.IsFalse(int.TryParse("一", out number)); // 漢数字
    Assert.IsFalse(int.TryParse("四", out number)); // 漢数字
    Assert.IsFalse(int.TryParse("壱", out number)); // 大字の 1
    Assert.IsFalse(int.TryParse("壹", out number)); // 大字の 1 (壱の舊字體)
}

こちらは、char.IsDigit と同じ結果となった。

About 2013年09月

2013年09月にブログ「プログラミング C# - 翔ソフトウェア (Sho's)」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2013年07月です。

次のアーカイブは2013年10月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35