|
Какой рейтинг вас больше интересует?
|
Главная /
Каталог блоговCтраница блогера Справочник по C#/Записи в блоге |
![]() |
|
Отслеживаем состояние раскладки клавиатуры
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 (читать в оригинале)

На сегодняшний день мне известны два способа парсинга:
с помощью регулярных выражений;
с помощью 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]/tableFirefox:
/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. Вот так у него выглядит форма регистрации:




input data-val-regex-pattern="[a-zA-Z0-9-]{1,}" data-val-regex="The field UserName must match the regular expression '[a-zA-Z0-9-]{1,}'." 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.ruprivate 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 пространства имен 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 класс предоставляет несколько опций, которые можно использовать для управления запросами, а также возможность отправки асинхронных запросов.
Категория «Знаменитости»
Взлеты Топ 5
|
| ||
|
+241 |
251 |
_Kicker_ |
|
+215 |
255 |
Zoxx.ru - Блог Металлиста |
|
+214 |
302 |
shocvideo |
|
+203 |
257 |
Ка-фе - фрик - интернет - кафе в RSS |
|
+199 |
256 |
Сериал "Универ" - комедийный сериал на ТНТ |
Падения Топ 5
|
| ||
|
-2 |
46 |
Бабка-ежка |
|
-2 |
55 |
I_want_be_loved |
|
-3 |
45 |
Темы_дня |
|
-3 |
54 |
CadburRy |
|
-4 |
60 |
Моя Свобода и Любовь |
Популярные за сутки
Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.
взяты из открытых общедоступных источников и являются собственностью их авторов.

