Сегодня 13 февраля, четверг ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7278
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
Справочник по C#
Справочник по C#
Голосов: 1
Адрес блога: http://www.csharpcoderr.com/
Добавлен: 2012-11-28 00:46:26
 

Отслеживаем состояние раскладки клавиатуры

2012-10-19 14:25:12 (читать в оригинале)





public Form1()
{
    InitializeComponent();
    timer1 = new Timer();
    this.timer1.Enabled = true;
    this.timer1.Interval = 777;
    this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
    this.TopMost = true;
}

private void timer1_Tick(object sender, EventArgs e)
{
    label1.Text = GetKeyboardLayoutId();
}

[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr GetKeyboardLayout(int WindowsThreadProcessID);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int GetWindowThreadProcessId(IntPtr handleWindow, out int lpdwProcessID);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetForegroundWindow();

private static InputLanguageCollection _InstalledInputLanguages;
// Идентификатор активного потока
private static int _ProcessId;
// Текущий язык ввода
private static string _CurrentInputLanguage;


private static string GetKeyboardLayoutId()
{

    _InstalledInputLanguages = InputLanguage.InstalledInputLanguages;

    // Получаем хендл активного окна
    IntPtr hWnd = GetForegroundWindow();
    // Получаем номер потока активного окна
    int WinThreadProcId = GetWindowThreadProcessId(hWnd, out _ProcessId);

    // Получаем раскладку
    IntPtr KeybLayout = GetKeyboardLayout(WinThreadProcId);
    // Циклом перебираем все установленные языки для проверки идентификатора
    for (int i = 0; i < _InstalledInputLanguages.Count; i++)
    {
        if (KeybLayout == _InstalledInputLanguages[i].Handle)
        {
            _CurrentInputLanguage = _InstalledInputLanguages[i].Culture.ThreeLetterWindowsLanguageName.ToString();
        }
    }
    return _CurrentInputLanguage;

}


Запрет на изменение раскладки клавиатуры в вашем Windows Form

2012-10-19 10:33:03 (читать в оригинале)





protected override void OnInputLanguageChanged(InputLanguageChangedEventArgs e)
{
    base.OnInputLanguageChanged(e);
    InputLanguage.CurrentInputLanguage = InputLanguage.InstalledInputLanguages[0];
}


Парсинг HTML-страниц на примере Yandex.Маркет (с HtmlAgilityPack)

2012-10-19 09:07:35 (читать в оригинале)


      Довольно часто возникает ситуация, когда в автоматическом режиме нужно получить какие-то данные со страницы в формате HTML или XHTML. Парсить можно разными способами, используя встроенные в Framework средства или сторонние библиотеки.

На сегодняшний день мне известны два способа парсинга:
с помощью регулярных выражений;
с помощью XPath.


В данной статье разберем, как можно использовать XPath для получения нужного текста.
      Предположим, что нам необходимо получить характеристики товара со страницы http://market.yandex.ua/model-spec.xml?modelid=7911905&hid=90639.
      Первая часть работы — получение html-текста страницы. Как вы его получите, — это уже второй вопрос или через WebClient, компонент браузера или загрузите файл с жесткого диска.
      Вторая часть работы сводится собственно к парсингу нужного текста. Для начала нам необходимо получить XPath к заданном элементу в структуре HTML или XHTML. Чтобы не писать все руками, открываем браузер Chrome или Firefox с плагином Firebug. В браузере F12 и попадаем в исходный код страницы. Выбираем искомый элемент и нажимаем правую кнопку мыши. В выпадающем меню выбираем Copy XPath. В Firefox по аналогии.


В результате в буфере обмена будет текст (для Chrome):

//*[@id="js"]/body/table[3]/tbody/tr/td[2]/table
Firefox:
/html/body/table[3]/tbody/tr/td[2]/table
В этом тексте описан полный путь к элементу. Но, здесь есть нужно кое-что изменить. Во первых всегда нужно убирать tbody., во вторых нет необходимости писать html или *[@id="js"], в случае с Chrome.
Нам достаточно строки:

//body/table[3]/tr/td[2]/table

Теперь берем библиотеку HtmlAgilityPack и скармливаем ей наш путь и исходный текст страницы следующим образом:

public string GetDescription(string html)
{
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();            
    doc.OptionFixNestedTags = true; //Опционально, если требуется
    doc.Load(new StringReader(html));
    HtmlNode node = doc.DocumentNode.SelectSingleNode("//body/table[3]/tr/td[2]/table");    
    return node.OuterHtml;
}
      В данном случае мы передаем тело html-страницы и через SelectSingleNode получаем исходный код таблицы. Обратите внимание, чтобы получить html-код найденной таблицы, необходимо использовать свойство OuterHtml. Свойство InnerHtml вернет чистый текст без тегов. Таким образом, мы на выходе метода получим таблицу, которую можно разобрать и обработать.
Все остальные данные по товару получаем по схожей схеме.


Источник http://krez0n.org.ua


Автозаполнение в WebBrowser

2012-10-19 08:48:54 (читать в оригинале)


      Данный пример показывает как легко и просто можно реализовать авто заполнение в компоненте WebBrowser. Мне данный пример пригодился для авто заполнения формы и автоматической регистрации на сайте www.masterlike.ru


      Для работы нам понадобится разместить компонент WebBrowser на форму! Теперь буду пытаться объяснить как выполнить данную задачу на примере сайта www.masterlike.ru. Вот так у него выглядит форма регистрации:

       Давайте подробнее рассмотрим что мы можем здесь заполнить автоматически, это будут все поля кроме поля ввода кода подтверждения так как он всегда разный! Теперь необходимо определить имена полей которые мы заполняем, для этого открываем браузер Chrome и переходим на нашу страничку www.masterlike.ru,после полной загрузки страницы нажимаем "F12". У нас появится дополнительное окно:
      Далее нам необходимо узнать ID первого текстового поля, ввода Логин. Для это правой клавишей мыши нажимаем на это текстовое поле и выбираем пункт "Просмотр кода элемента".
После этого мы увидим код необходимого нам текстового поля.
В этом коде нам необходим всего лишь один параметр, это id компонента:
input data-val-regex-pattern="[a-zA-Z0-9-]{1,}" data-val-regex="The field UserName must match the regular expression &#39;[a-zA-Z0-9-]{1,}&#39;." data-val-required="The UserName field is required." data-val="true" id="UserName" name="UserName" size="50" type="text" value=""
Для поля ввода "Логин" это будет "UserName". Теперь его необходимо заполнить:
webBrowser1.Document.GetElementById("UserName").SetAttribute("value", "csharpcoderr");
      В примере выше мы извлекли отдельный объект System.Windows.Forms.HtmlElement с использованием атрибута ID GetElementById("UserName") этого элемента в качестве поискового ключа и задали значение атрибута с заданным именем(value) в элементе.
С остальными полями поступаете так же. Единственное что нам осталось это поставить галочку "Я согласен с правилами системы". Для это мы выполняем все те же действия как и для текстового поля и получаем ID нашего checkbox.

HtmlDocument rememberme = this.webBrowser1.Document;
rememberme.GetElementById("helpbox").SetAttribute("checked", "true");       
      Думаю здесь мне уже не надо ничего обьяснять. Вот полный пример кода для заполнения формы регистрации сайта www.masterlike.ru
private void button1_Click(object sender, EventArgs e)
{
    if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
    {
        webBrowser1.Document.GetElementById("UserName").SetAttribute("value", "csharpcoderr");
        webBrowser1.Document.GetElementById("Email").InnerText = "info@csharpcoderr.com";
        webBrowser1.Document.GetElementById("Password").InnerText = "11111111";
        webBrowser1.Document.GetElementById("ConfirmedPassword").InnerText = "11111111";
        webBrowser1.Document.GetElementById("Phonecode").InnerText = "7922";
        webBrowser1.Document.GetElementById("Phone").InnerText = "7946455";

        HtmlDocument rememberme = this.webBrowser1.Document;
        rememberme.GetElementById("helpbox").SetAttribute("checked", "true");               
    }
}


Проверяем машины на доступность

2012-10-15 14:58:56 (читать в оригинале)


      Есть много утилит, чтобы помочь контролировать ваши компьютеры в сети, но что, если вам необходимо интегрировать информацию о состоянии системы в ваше собственное приложение? Допустим у вас есть список машин вашей сети и вы хотите быстро проанализировать их доступность, обычно просто открывают командную строку и выполняют команду Ping! А что если таких машин сотни или тысячи? 
      Для решения данной задачи можно воспользоваться командой Ping пространства имен System.Net.NetworkInformation.

Ping Pinger = new Ping(); 
PingReply Reply = Pinger.Send("127.0.0.1"); 

      Приведенный выше код создает новый экземпляр класса Ping, а затем отправляет пинг на локальный компьютер. Взгляните на другой пример. На этот раз вы начнете со списка компьютеров, которые должны быть проверены. Например, перебор каждого компьютера в списке, диагностика компьютера и отображение результатов. Список компьютеров может содержать либо IP-адресов(192.168.1.243) или веб-сайтов(www.google.ru) или Net-Bios имена(OAOKOMP1). Для этого примера я включил несколько внутренних систем, а также пару сайтов.

List IPs = new List(); 
IPs.Add("10.1.1.12"); 
IPs.Add("10.1.1.15"); 
IPs.Add("OAOkomp1"); 
IPs.Add("192.168.173.160"); 
IPs.Add("www.google.com"); 
IPs.Add("www.amazon.com"); 
Ping Pinger = new Ping(); 
foreach (string ip in IPs) 
{ 
    PingReply Reply = Pinger.Send(ip); 
    Console.WriteLine("Ping " + ip + ": " + Reply.Status.ToString()); 
}

      С помощью всего нескольких строк кода, теперь вы можете определить состояние ваших компьютеров в вашей локальной сети или в интернете. Ping класс предоставляет несколько опций, которые можно использовать для управления запросами, а также возможность отправки асинхронных запросов.




Страницы: ... 21 22 23 24 25 26 27 28 29 30 31 32 33 34 

 


Самый-самый блог
Блогер ЖЖ все стерпит
ЖЖ все стерпит
по количеству голосов (152) в категории «Истории»
Изменения рейтинга
Категория «Истории»
Взлеты Топ 5
Падения Топ 5


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.