C# Web Browser Son Sürüm IE Kullanmak

C# Web Browser Son Sürüm IE Kullanmak

4 Ocak 2019 0 Yazar: Mustafa BÜKÜLMEZ
Toplam Görüntülenme : 88
Yaklaşık okuma süresi : 11 DK
C# Web Browser Otomatik En Alta İndirmek
C# DataGridView'den Veri Çekme
C# Web Browser Son Sürüm IE Kullanmak
5 (100%) 1 Oy

C# Web Browser Son Sürüm IE Kullanmak, yazım ile C# eğitim setimize devam ediyorum. C# Web Browser nesnesi ile form içerisinde istediğimiz siteleri yada bir html dosya gösterebiliyoruz. Ancak bu Web Browser varsayılan olarak Internet Explorer 7 versiyonunu kullanıyor. Elbette bu da bir dünya CSS komutunun çalışmaması anlamına geliyor.

C# Web Browser Son Sürüm IE Kullanmak

Son uğraştığım projemde Web Browser üzerinde kendi oluşturduğum bir html uzantılı dosyayı göstermem gerekiyordu. Elbette bu html dosyası içinde birçok CSS özelliği de yer alması gerekiyor. En basit örneği DIV ‘lerin kenarlarını oval yapmak ve DIV ‘lere gölge vermek istedim.

Nasıl bir CSS yazsam da aktif olmadı. HTML dosyayı Google Chrome’da açtığımda normal C# Web Browser ile açtığımda darmadağın görünüyordu. Sonradan yaptığım araştırmalarda öğrendim ki C# Web Browser varsayılan olaran İnternet Explorer 7 sürümünü kullandığını öğrendim.

O zaman bu durumda bu web browserin IE sürümünü yükseltmemiz gerekiyor. Yükseltmeliyiz ki bir CSS özelliğini kullanabilelim.  Yaptığım araştırmalarda bulduğum çözümleri sizlerle de paylaşmak istedim. o yüzden hadi bu işlemi nasıl yapacağımızı görelim.

Yazacağımız kodlar ile form load eventi içinde sürüm kontrolü yapıyoruz ve gerekiyorsa kurulum yapıyoruz. Görelim;

private void Form1_Load(object sender, EventArgs e)
{
    var appName = Process.GetCurrentProcess().ProcessName + ".exe";
    SetIE8KeyforWebBrowserControl(appName);
}

private void SetIE8KeyforWebBrowserControl(string appName)
{
    RegistryKey Regkey = null;
    try
    {
        // 64 bit bilgisayarlar için
        if (Environment.Is64BitOperatingSystem)
            Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Wow6432Node\\Microsoft\\Internet Explorer\\MAIN\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
        else  // 32 bit bilgisayarlar için
            Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);

        // Yol doğru değilse veya
        // kullanıcı kayıt defterine erişmek için ayrıcalıklara sahip değilse
        if (Regkey == null)
        {
            MessageBox.Show("Uygulama Ayarları Başarısız Oldu - Adres Bulunamadı");
            return;
        }

        string FindAppkey = Convert.ToString(Regkey.GetValue(appName));

        // Anahtarın mevcut olup olmadığını kontrol edin
        if (FindAppkey == "8000")
        {
            MessageBox.Show("Gerekli Uygulama Ayarları Mevcut");
            Regkey.Close();
            return;
        }

        // Bir anahtar yoksa, anahtarı ekleyin, Anahtar değeri 8000 (decimal)
        if (string.IsNullOrEmpty(FindAppkey))
            Regkey.SetValue(appName, unchecked((int)0x1F40), RegistryValueKind.DWord);

        // Ekledikten sonra anahtarı kontrol et
        FindAppkey = Convert.ToString(Regkey.GetValue(appName));

        if (FindAppkey == "8000")
            MessageBox.Show("Uygulama Ayarları Başarıyla Uygulandı");
        else
            MessageBox.Show("Uygulama Ayarları Başarısız Oldu, Ref: " + FindAppkey);
    }
    catch (Exception ex)
    {
        MessageBox.Show("Uygulama Ayarları Başarısız Oldu");
        MessageBox.Show(ex.Message);
    }
    finally
    {
        //  Registry kapat
        if (Regkey != null)
            Regkey.Close();
    }
}

Messagebox.show’u sadece test için kullanırsınız. Uygulama esnasına  Messagebox ları yorum satırı yapabilirsiniz..

İlgili İçerik  C# NameSpace Kavramı

Bu kodlar ile çalışmayan bir çok CSS ve HTML komutlarını çalışır hale getirebilirsiniz.

Burada kullanacağımız farklı anahtarlar da mevcuttur.

  • 11001 (0x2AF9) – Internet Explorer 11. Web sayfaları, !DOCTYPEyönergeye bakılmaksızın, IE11 edge modunda görüntülenir .
  • 11000 (0x2AF8) – Internet Explorer 11. Standartlara dayalı !DOCTYPEyönergeler içeren web sayfaları IE11 edge modunda görüntülenir. IE11 için varsayılan değer.
  • 10001 (0x2711) – Internet Explorer 10. Web sayfaları, !DOCTYPEyönergeye bakılmaksızın, IE10 Standartları modunda görüntülenir .
  • 10000 (0x2710) – Internet Explorer 10. Standartlara dayalı !DOCTYPEyönergeler içeren web sayfaları IE10 Standartları modunda görüntülenir. Internet Explorer 10 için varsayılan değer.
  • 9999 (0x270F) – Internet Explorer 9. Yönergeye bakılmaksızın, Web sayfaları IE9 Standartları modunda görüntülenir !DOCTYPE.
  • 9000 (0x2328) – Internet Explorer 9. Standartlara dayalı !DOCTYPEyönergeleri içeren web sayfaları IE9 modunda görüntülenir.
  • 8888 (0x22B8) – Web sayfaları !DOCTYPEyönergeye bakılmaksızın IE8 Standartları modunda görüntülenir .
  • 8000 (0x1F40) – Standartlara dayalı !DOCTYPE yönergeleri içeren web sayfaları IE8 modunda görüntülenir.
  • 7000 (0x1B58) – Standartlara dayalı !DOCTYPE yönergeleri içeren web sayfaları IE7 Standartları modunda görüntülenir.

Referans: MSDN: İnternet Özellik Denetimleri

 

Windows’taki en son IE sürümünü almak

public class WebBrowserHelper
{
    public static int GetEmbVersion()
    {
        int ieVer = GetBrowserVersion();

        if (ieVer > 9)
            return ieVer * 1000 + 1;

        if (ieVer > 7)
            return ieVer * 1111;

        return 7000;
    }
    public static void FixBrowserVersion()
    {
        string appName = System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().Location);
        FixBrowserVersion(appName);
    }
    public static void FixBrowserVersion(string appName)
    {
        FixBrowserVersion(appName, GetEmbVersion());
    }
    // FixBrowserVersion("<YourAppName>", 9000);
    public static void FixBrowserVersion(string appName, int ieVer)
    {
        FixBrowserVersion_Internal("HKEY_LOCAL_MACHINE", appName + ".exe", ieVer);
        FixBrowserVersion_Internal("HKEY_CURRENT_USER", appName + ".exe", ieVer);
        FixBrowserVersion_Internal("HKEY_LOCAL_MACHINE", appName + ".vshost.exe", ieVer);
        FixBrowserVersion_Internal("HKEY_CURRENT_USER", appName + ".vshost.exe", ieVer);
    }
    private static void FixBrowserVersion_Internal(string root, string appName, int ieVer)
    {
        try
        {
            //64 bit makina 
            if (Environment.Is64BitOperatingSystem)
                Microsoft.Win32.Registry.SetValue(root + @"\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appName, ieVer);
            else  // 32 bit makina 
                Microsoft.Win32.Registry.SetValue(root + @"\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appName, ieVer);
        }
        catch (Exception)
        {
            // bazı yapılandırmalar erişim hakları istisnalarına çarpacak
            // bu yüzden hem LOCAL_MACHINE hem de CURRENT_USER ile deniyoruz.
        }
    }
    public static int GetBrowserVersion()
    {
        // string strKeyPath = @"HKLM\SOFTWARE\Microsoft\Internet Explorer";
        string strKeyPath = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer";
        string[] ls = new string[] { "svcVersion", "svcUpdateVersion", "Version", "W2kVersion" };

        int maxVer = 0;
        for (int i = 0; i < ls.Length; ++i)
        {
            object objVal = Microsoft.Win32.Registry.GetValue(strKeyPath, ls[i], "0");
            string strVal = System.Convert.ToString(objVal);
            if (strVal != null)
            {
                int iPos = strVal.IndexOf('.');
                if (iPos > 0)
                    strVal = strVal.Substring(0, iPos);

                int res = 0;
                if (int.TryParse(strVal, out res))
                    maxVer = Math.Max(maxVer, res);
            }
        }
        return maxVer;
    }
}

Kullanımı aşağıdaki gibidir.

WebBrowserHelper.FixBrowserVersion();
WebBrowserHelper.FixBrowserVersion("SomeAppName");
WebBrowserHelper.FixBrowserVersion("SomeAppName",intIeVer);

Windows 10 karşılaştırılabilirliğinde bir sorunla karşılaşabilirsiniz, web siteniz nedeniyle bu meta etiketi eklemeniz gerekebilir

<meta http-equiv="X-UA-Compatible" content="IE=11" >

MSDN’den: “Kayıt defteri yeniden yönlendiricisi, WOW64’teki kayıt defterinin belirli bölümlerinin ayrı mantıksal görünümlerini sağlayarak 32 bit ve 64 bit uygulamalarını izole eder. Kayıt defteri yeniden yönlendiricisi, 32 bitlik ve 64 bit kayıt defteri çağrılarını ilgili mantıksal kayıt defteri görünümlerine ve bunları karşılık gelen fiziksel kayıt defteri konumuna eşler.Yönlendirme işlemi uygulamaya şeffaftır, bu nedenle, 32-bit bir uygulama, 32-bit Windows’da çalışıyormuş gibi kayıt defteri verilerine erişebilir. 64-bit Windows “Wow6432Node hakkında endişelenmenize gerek yok.

Artık C# Web Browser içerisinde HTML5 ve CSS3 komutlarını gönül rahatlığı içerisinde çalıştırabilirsiniz.

İlgili İçerik  C# Değişkenler, Tipleri, Atamalar ve Dönüşümleri

C# Web Browser Son Sürüm IE Kullanmak, yazımızda bu kadar dostlar. Diğer derslerimizde görüşmek üzere…

C# eğitim seti sayfasına gitmek için tıklayabilirsiniz.

Bu ders içeriğini github projeme eklemedim. Çünkü bir yöntem veya anlatılması gereken bir kod değildir. Sadece formunuza kopyalayın ve kullanın. Yani bu kodları öğrenmek için çaba göstermenize gerek yoktur.

Şöyle düşünün, web browser nesnesini 15, 20 projeden birinde kullanacaksınızdır ama bir gridview’i her projenizde kullanacaksınızdır. 😉

Sağlıcakla ve Takipte Kalın 😉

C# Web Browser Otomatik En Alta İndirmek
C# DataGridView'den Veri Çekme