6.8.22

C# Check the version of Microsoft Office you are using on your computer

Hi mọi người, lại là mình đây hôm nay mình chia sẽ cho những anh coder còn non trẻ như mình biết cách hiển thị thông tin chương trình "MICROSOFT OFFICE" mọi người cùng biết nhé.


Đầu tiên, các bạn tạo cho mình một class Office.cs với nội dung như sau:
public class Office
{

    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]

    static extern uint RegOpenKeyEx(UIntPtr hKey, string lpSubKey, uint ulOptions, int samDesired, out int phkResult);
    [DllImport("Advapi32.dll")]
    static extern uint RegCloseKey(int hKey);
    [DllImport("advapi32.dll", EntryPoint = "RegQueryValueEx")]
    static extern int RegQueryValueEx(int hKey, string lpValueName, int lpReserved, ref uint lpType,
        System.Text.StringBuilder lpData, ref uint lpcbData);
    private static UIntPtr HKEY_LOCAL_MACHINE = new UIntPtr(0x80000002u);
    private static UIntPtr HKEY_CURRENT_USER = new UIntPtr(0x80000001u);

    private Dictionary<string, string> LatestVersions = new Dictionary<string, string>();

    public Office()
    {
        LatestVersions.Add("12.0", "Office2007");
        LatestVersions.Add("14.0", "Office2010");
        LatestVersions.Add("15.0", "Office2013");
        LatestVersions.Add("16.0", "Office2017 and higher ");
    }

    private string GetVersionNumberFromRegistry()
    {
        string regVersion;

        regVersion = GetVersionNumberFromRegistry("SOFTWARE\\Microsoft\\Office\\");
        if (regVersion == null)
            regVersion = GetVersionNumberFromRegistry("SOFTWARE\\Wow6432Node\\Microsoft\\Office\\");

        return regVersion;
    }
    private string GetVersionNumberFromRegistry(string key)
    {
        string version = null;
        foreach (string VerNo in LatestVersions.Keys)
        {
            string offPath = Reg64(HKEY_LOCAL_MACHINE, key + VerNo + "\\Excel\\InstallRoot", "Path");
            if (offPath != null)
            {
                version = VerNo;
                break;
            }
        }
        return version;
    }
    public string GetVersion()
    {
        string versionFromReg = GetVersionNumberFromRegistry();
        string versionInstalled = LatestVersions[versionFromReg];

        bool? Office64BitFromReg = Off64Bit("SOFTWARE\\Microsoft\\Office\\", versionFromReg);

        if (Office64BitFromReg == null)
            Office64BitFromReg = Off64Bit("SOFTWARE\\Wow6432Node\\Microsoft\\Office\\", versionFromReg);
        if (Office64BitFromReg.HasValue && Office64BitFromReg.Value)
            versionInstalled += " (64 bit)";
        else if (Office64BitFromReg.HasValue && !Office64BitFromReg.Value)
            versionInstalled += " (32 bit)";
        else
        {
            versionInstalled += " (Unknown bit)";
        }

        return versionInstalled;
    }

    private bool? Off64Bit(string key, string version)
    {
        bool? Office64BitFromReg = null;
        string Bitness = Reg64(HKEY_LOCAL_MACHINE, key + version + "\\Outlook", "Bitness");
        if (Bitness == "x86")
            Office64BitFromReg = false;
        else if ((Bitness == "x64"))
            Office64BitFromReg = true;
        return Office64BitFromReg;
    }

    private string Reg64(UIntPtr parent, string key, string prop)
    {
        int ikey = 0;
        int bit36_64 = 0x0100;
        int query = 0x0001;
        try
        {
            uint res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, key, 0, query | bit36_64, out ikey);
            if (0 != res) return null;
            uint type = 0;
            uint data = 1024;
            StringBuilder buffer = new StringBuilder(1024);
            RegQueryValueEx(ikey, prop, 0, ref type, buffer, ref data);
            string ver = buffer.ToString();
            return ver;
        }
        finally
        {
            if (0 != ikey) RegCloseKey(ikey);
        }
    }

}

Sau khi các bạn đã tạo được một class office.cs rồi thì các bạn tiếp tục với đoạn mã bên dưới để lấy thông tin MICROSOFT OFFICE nhé.
private void Form1_Load(object sender, EventArgs e)
{
    string RunningOfficeVersion = new Office().GetVersion();
    MessageBox.Show("Running Office Number: " + RunningOfficeVersion);
}

Chúc các bạn thành công với thủ thuật đơn giản này.
Theo : LapTrinhVB.Net

3 nhận xét:

  1. nice (y) cũng hay nhưng chưa áp dụng nên không biết thế nào :D

    Trả lờiXóa
  2. cũng ok đó, nhưng k cần lắm, chủ yếu là trình duyệt web của bạn đang sữ dụng có tích hợp nhiều thứ bổ trợ cho công việc của m` hay không thôi :))

    Trả lờiXóa