Turning gears are the logo of co-scripts

İnternette sunucuların sunduğu resimler(jpeg vb.) statik olarak .jpg ile adreslendirilebileceği gibi sunucu tarafından binary akışı olarak da gönderilebilir. Bu taktirde Url http://engingem.com/resimver.php?id=123  şeklinde görünecektir. Bu gibi durumlarda dosyayı kaydetmek istersek binaryleri alıp bir dizi tipi değişkene aktarıp oradan kaydetmek uygun yöntemlerden birisidir.

Örnek kodumuzdaki C# projesinde forma iki adet metin kutusu bir de düğme ekledik. Kutulardan birisi bize görseli veren url diğeri ise görseli makinada kaydetmek için vereceğimiz ismi girdiğimiz kutu.

Düğmenin onclick olayına yazacağımız iki fonksiyonu atıyoruz. Birinci fonksiyon binary dizisini geri veriyor, diğeri (2.) onu alıp dosya olarak kaydediyor.

HttpWebRequest, ve Stream için using System.Net ve FileStream ile BinaryWrite için using System.IO; yu projemize eklemeyi unutmayın.

İnternette kodları bulduğum url şurada . Web alanında örnek image binary veren dosyayı hazırlayıp sunan  Engin GEM arkadaşıma ve soruyu bana sorup bu bilgiyi de öğrenmeme ve az da olsa işe yaramama neden olan İnan KARACAN arkadaşıma teşekkür ederim.

Düğmenin onclick prosedüründeki kodlar aşağıda:

 

        private void button1_Click(object sender, EventArgs e)
        { DiskeByteYazma(textBox2.Text,URLdenByteAlma(textBox1.Text)); }

            // başlıyoruz

           static public byte[] URLdenByteAlma(string url)
        {
            byte[] b;
            HttpWebRequest bizimTalep = (HttpWebRequest)WebRequest.Create(url);
            WebResponse bizimCevap = bizimTalep.GetResponse();

            Stream stream = bizimCevap.GetResponseStream();
            //int i;
            using (BinaryReader binaryOkuyucu = new BinaryReader(stream))
            {
                //i=(int)(stream.Length);
                b = binaryOkuyucu.ReadBytes(500000); // Burada okunacak byte sayısı resmin büyüklüğü ile alakalı
                binaryOkuyucu.Close();
            }
            bizimCevap.Close();
            return b;
            // Buraya kadar urlden çektiğimiz byteları bir diziye aktardık ve return ettik.
        }

        static public void DiskeByteYazma(string dosyaAdi, byte[] icerik)
        {
            FileStream dosyaAkisi = new FileStream(dosyaAdi, FileMode.Create);
            BinaryWriter binaryYazici = new BinaryWriter(dosyaAkisi);
            try
            {
                binaryYazici.Write(icerik);
            }
            finally
            {
                dosyaAkisi.Close();
                binaryYazici.Close();
            }
        }


            // bitirdik

Kolay gelsin

co-scripts tag image urlden resim kaydetmebinary kaydetmeurlden binary almafilemodeurlden byte almakhttpwebrequestwebresponsestreamfilestreambinarywritersystem.netsystem.iogetresponsegetresponsestream
ID:243 | Okunma:2644


 

Projemize bir webbrowser kontrolü eklediğimizde onu tıpkı bir web browser gibi yönlendirebiliriz (.navigate(string url) .

Ayrıca mshtml ile web browser kontolünün içine yüklenen içeriğini ele alabilir ve elementler arasında DOM hiyerarşisini kullanarak istediğimiz bilgiyi çekebilir veya sayfa içine müdahelelerde bulunabiliriz (form doldurma ve submit vb.). 

Doğukan isimli bir arkadaşın (:oP) , yeni başladığım bu C# işinde bana bir soru sormasıyla oluşan sabahlama sürecinde birden çok yöntemi olduğunu öğrendiğim web sayfası ele alma olayına en basit olan çözümü size iletiyorum.

Wellformed olmayan (element hiyerarşisi adam gibi olmayan ve standartlara uymayan sayfa)  web içeriğinde harici paketler kullanılıyor. Bunlardan birisi olan HTMLAgilityPack'i daha sonraki bir yazıya bırakıyorum. (OpenSource olan paketin sayfası burası).

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using mshtml;

namespace SelectBoxDren
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

                private void button2_Click(object sender, EventArgs e)
                {
                    comboBox2.Items.Clear();
                    webBrowser1.Navigate(hedefAdres.Text);
                }

                private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
                {
                    if (webBrowser1.Document != null)
                    {
                        HtmlElementCollection selectElems = webBrowser1.Document.GetElementsByTagName("select");
                        foreach (HtmlElement selElem in selectElems)
                        {
                            comboBox2.Items.Add(selElem.Id);
                        }

                    }

                }
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
                {
                    int sira;
                    richTextBox1.Text = '';
                    string secimId = comboBox2.SelectedItem.ToString();
                    HtmlElement sSelect = webBrowser1.Document.GetElementById(secimId);
                    for(sira=0;sira < sSelect.children.count; sira++ )
{
richTextBox1.Text += sSelect.Children[sira].InnerText + Environment.NewLine;
                    }
                }



        }
    }

co-scripts tag image webbrowsermshtmlhtmlelementhtmlparsing
ID:220 | Okunma:5756


 

Merhaba,

Kısaca yazacağım. Bir projede webbrowser kontrolü kullandığınızda kesinlikle içine yüklediğiniz (webbrowser1.navigate(url) ) sayfanın tam yüklenip yüklenmediği, işlemin tamamlanıp tamamlanmadığı sizin için önemli olacaktır.

Bunun kontrolü için while döngüsünde WebBrowserReadyState. durumlarına bakacaksınız. Ancak ben bir projemde bu duruma bakarken programın başka işlem yapmadığını hatta işlemleri tamamen durdurduğunu gördüm ve bu noktada takıldım kaldım.

Biraz web araştırması İngilizce ve Türkçe çözümlere ulaştırdı. Çözümlerden birisi yazılmış bir sınıf olan MessageBoxEx() kullanmak. Böylece mesaj kutusu çıktığında browser yüklemesine devam edebiliyor. Belirtilen süre sonunda da mesaj kutusu kayboluyor. Bunun sakıncası geç yüklenen bir sayfada sürenin saptanamaması.

Şu adresten ilgili makale ve sınıfı bulabilirsiniz. (Microsoft'un sayfası)

Gelelim bir Türkçe forumdan bulduğum güzel çözüme. Kesinlikle anlamlı ve bu bilgi az yerde bulunuyor.

http://www.csharpnedir.com/forum2/printer_friendly_posts.asp?TID=17232 forumunda bulduğum çözüm şu

webbrowser1.navigate("www.google.com")
while(webbrowser1.ReadyState != WebBrowserReadyState.Complete)
{
// buraya kadar biliniyor zaten
Application.DoEvents(); // işin sırrı burada, programın kilitlenmemesini sağlıyor
}

Böylece sorunu aştım.

co-scripts tag image webbrowserreadystatedoeventswebbrowser1
ID:219 | Okunma:3584


 

Microsoft'un sitesinden alınmış bir örnektir. Üstüne bir kaç şey ekleyeceğim, kaybetmemek için geçici olarak koyuyorum. Bir örneğin parçası olacak.

function test(name, address) {
window.alert("Name is " + name + "; address is " + address);
}
private void InvokeTestMethod(String name, String address)
{
    if (webBrowser1.Document != null)
    {
        Object[] objArray = new Object[2];
        objArray[0] = (Object)name;
        objArray[1] = (Object)address;
        webBrowser1.Document.InvokeScript("test", objArray);
    }
}

Devam edilecek...

co-scripts tag image webbrowserinvokescriptwebbrowser.documentjavascript
ID:145 | Okunma:2019


 

Merhaba,

C Sharpta çok yeniyim o yüzden sürekli öğreniyorum. Öğrendiklerimi de buradan paylaşıyorum.

Bir grup içindeki radyo düğmelerinin işaretli olanını bulmak ve değerini almak için bir foreach döngüsünden faydalanıyoruz. Bu döngüler pek çok koleksiyonda çok işimize yarayacaktır. foreach yazıp +TAB +TAB size otomatik yazımla çok rahat etmenizi sağlar (tşk @kubilaykupeli).

            string secilenTur = "";
            string secim ="";
            foreach (RadioButton radyoDugmesi in groupBox3.Controls)
            {
               
                if (radyoDugmesi.Checked) { secilenTur = radyoDugmesi.Text.ToString(); }
 
            }
 

Yukarıda radyo düğmelerinden seçili olana ait değer secilenTur şeklinde bir değişkene atanıyor. Değişken daha önceden boş bir metin değişkeni olarak tanımlanmıştı.

GroupBox3 ise HTML deki fieldset nesnesi. Radyo düğmeleri başka bir kontrol içinde de yer alabilirler. Ama her durumda bir koleksiyon oluşturuyorlar. HTML deki gibi aynı ismi alıp almadıklarını henüz öğrenmedim. Öğrendiğimde yazacağım. secim adlı değişken ise metin şeklindeki değerleri başka bir kontrolde istediğimiz şekilde mi kontrol amaçlı kullanılıyor.

            switch(secilenTur)
            {
                case "Mor ve Turuncu Reçeteler":
                    secim = "1";
                    break;
 
                case "Eritropoetin ve Darbopoetin Reçeteleri":
                    secim = "2";
                    break;
 
                case "Diyaliz Solüsyonu Reçeteleri":
                    secim = "3";
                    break;
 
                case "İşyeri Hekimi Reçeteleri":
                    secim = "5";
                    break;
 
                case "SHÇEK Reçeteleri":
                    secim = "7";
                    break;
            }

Kolay gelsin

co-scripts tag image c#radiobutton groupgroupboxswitchcasefor each
ID:124 | Okunma:5512


 

C#'ta bir web sayfasını görüntülemenin ve gezinti yapmanın en kolay yolu webbrowser nesnesini kullanmaktır. Bazı durumlarda gelen sayfadaki içerik ile etkileşerek bir veri almak veya sunucuya sayfa üzerinden bir veri göndermek gerekebilir. Bu gibi durumlarda sayfadaki formu kullanarak veri yollamak için en sık kullanılan bir kaç yoldan birisi DOM hiyerarşisi üzerinden gitmektir.

Ancak çok daha kısa ve pratik bir yöntem var. Formun sayfadaki ilk form olduğunu düşürsek:

  webBrowser2.Navigate("javascript:document.forms[0].submit()");

Buradaki nesnemizin adı webBrowser2, metod ise .Navigate. Böylece browser adres satırına javascript yazarcasına bir komut göndermiş olduk. Komut sayfadaki form elementleri bir koleksiyon ve bunlardan ilkine submit() olayını uygula diyor. Navigate metodunun normal kullanımında ise browser (tarayıcı) nesnesi verilen parametredeki adrese yönlenir.

co-scripts tag image webbrowser objectform submitdocument.forms
ID:117 | Okunma:2114