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..
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ı,
!DOCTYPE
yönergeye bakılmaksızın, IE11 edge modunda görüntülenir . - 11000 (0x2AF8) – Internet Explorer 11. Standartlara dayalı
!DOCTYPE
yö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ı,
!DOCTYPE
yönergeye bakılmaksızın, IE10 Standartları modunda görüntülenir . - 10000 (0x2710) – Internet Explorer 10. Standartlara dayalı
!DOCTYPE
yö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ı
!DOCTYPE
yönergeleri içeren web sayfaları IE9 modunda görüntülenir. - 8888 (0x22B8) – Web sayfaları
!DOCTYPE
yö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.
C# Web Browser Son Sürüm IE Kullanmak, yazımızda bu kadar dostlar. Diğer derslerimizde görüşmek üzere…
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…
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 ;)
kullandığın kütüphaneleri yazmamıssın ek olarak var appName = Process.GetCurrentProcess().ProcessName + “.exe”;
Buradaki process hatalı kod olarak görünüyor.
Evet bu dersimde NameScape’leri vermemişim. Haklısınız.
Visual Studio’da Hatalı olan kodların üzerine gelin. Kodun sol tarafında bir ampül simgesi çıkar. Ona tıklayın ve üzerinde durduğunuz kodun hangi NameSpace’e ait olduğunu görebilir ve forma otomatik olarak ekleyebilirsiniz.
Ayrıca hiçbir kodu test etmeden yayınlamıyorum. Bende çalışan hali ile kodları ders olarak ekliyorum. Burada yaşadığınız sorun NameSpace’lerin eklenmemesi ya da net.framework sürümü kaynaklı olabilir.