Сайт для программистов

вторник, 23 сентября 2008 г.

Функция IsProcessorFeaturePresent

Давно не разбирали какую-нибудь функцию Windows API. Сегодня познакомлю вас с функцией IsProcessorFeaturePresent. Функция IsProcessorFeaturePresent определяет, поддерживается ли указанная особенность на процессоре текущего компьютера. Ее объявление выглядит следующим образом:
[DllImport("kernel32.dll")]
static extern bool IsProcessorFeaturePresent(uint ProcessorFeature);
Описывать все параметры ProcessorFeature я не буду, зарегистрированные пользователи смогут ознакомиться с ними в справочнике. Приведу пример, где проверяется поддержка процессором MMX-инструкций (параметр PF_MMX_INSTRUCTIONS_AVAILABLE = 3).
[DllImport("kernel32.dll")]
static extern bool IsProcessorFeaturePresent(uint ProcessorFeature);
private const int PF_MMX_INSTRUCTIONS_AVAILABLE = 3;
// Проверяем доступность MMX-инструкций
MessageBox.Show(IsProcessorFeaturePresent(PF_MMX_INSTRUCTIONS_AVAILABLE).ToString());
Удачного вам программирования!

суббота, 13 сентября 2008 г.

Есть ли подключение к интернету

Достаточно распространненая задача - проверка на наличие подключения к интернету. Определить, подключен ли компьютер к интернету, можно при помощи метода NetworkInterface.GetIsNetworkAvailable, который появился в .NET Framework 2.0.
Следует заметить, что если компьютер подключен к локальной сети, то этот способ окажется бесполезным, так как ваша машина
может иметь подключение к сети, но не иметь выхода в интернет. В этом случае попробуйте воспользоваться функцией Windows API
InternetGetConnectedState, которая описана в моей книге C#.Cоветы программистам или в справочнике по функциям Windows API.
MessageBox.Show("Наличие подключения: " + System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable().ToString());
Удачного вам подключения к интернету!

четверг, 11 сентября 2008 г.

Microsoft готова обменять твои знания на призы

Microsoft запустила любопытную акцию - вам необходимо пройти тест из пяти вопросов. Если вы пройдете тест, то у вас есть шанс выиграть какой-нибудь приз. Вопросы совсем не сложные, поэтому попробовать свои силы может даже программист-любитель. На данный момент существует более 50 тестов на самые разные темы. Ссылку на сайт с викториной я разместил на своей главной странице. Поэтому заходим на нее, кликаем на кнопочке или ссылке и участвуем.
Счастливого вам прохождения тестов!

пятница, 5 сентября 2008 г.

Обмен книгами

Недавно узнал о существовании замечательного проекта БукРивер, который проходит под девизом Поменяй книгу - спаси дерево. Проект построен по принципу социальных сетей, наподобие Одноклассники.ру, VKontakte.ru и т.п. Цель проекта - обменять свои книги на другие (или подарить). На странице есть ТОП активных участников, у которых счет обменянных книг идет десятками. Если у вас скопилась гора прочитанных книг, то вступайте в эту сеть.
Удачного вам чтения!

Пошутим над коллегой

Недавно вышел совет от Сары Форд в блоге Секреты Visual Studio, в котором рассказывалось, как изменить цвет фона в редакторе кода на черный. А ведь это неплохая возможность подшутить над коллегой. Улучите минутку, когда сосед-программист отойдет от своего компьютера и сделайте цвет фона и символов одинаковым белым цветом. Когда коллега вернется на свое рабочее место и начнет печатать, то ничего не увидит на экране. Как вариант, можно показать своему руководителю или знакомому, как вы запускаете программу на исполнение при девственно чистом редакторе кода и ваше приложение запускается словно по волшебству.
P.S. Сегодня пятница, поэтому пост не очень серьезный. Удачного вам отдыха в выходные!

воскресенье, 31 августа 2008 г.

О перечислении Enum, стилях для HatchBrush и документации на MSDN

В своей книге C#. Советы программистам я привел несколько примеров для работы с перечислением Enum. Недавно для одного проекта мне понадобилось воспользоваться одним из описанных способов для перечисления всех стилей для кисти HatchBrush. Я написал следующее:

foreach (HatchStyle hatch_style in Enum.GetValues(typeof(HatchStyle)))
{
listBox1.Items.Add(hatch_style.ToString());
}

Когда я посмотрел на список, то увидел, что некоторые элементы списка повторяются. Например, стиль Horizontal повторяется два раза, а стиль LargeGrid - три раза. Сначала я подумал, что совершил ошибку в коде. Не найдя ошибки в этом примере, я решил прогуляться на сайт MSDN и посмотреть, что пишут про перечисление HatchStyle. Просматривая все значения стилей, я заметил, что стилю Min соответствует стиль Horizontal. Стало понятно, откуда взялось в моем списке два одинаковых стиля Horizontal. Обрадовшись, стал искать соответствия для трех значений LargeGrid. И тут я столкнулся с проблемой. В документации говорилось, что этому стилю соответствует сам LargeGrid и стиль Cross. А как же быть с третьим вариантом? Больше нигде не упоминалось о связи стилей с значением LargeGrid. Тут меня осенило. Взглянув еще раз на примеры из книги, я решил написать дополнительно еще несколько строчек кода, которые выводят имена стилей HatchBrush при помощи Enum.GetNames:

string[] hatchstyles = Enum.GetNames(typeof(HatchStyle));
foreach (string s in hatchstyles)
{
listBox2.Items.Add(s);
}

Расположив два списка рядом, сразу стало видно, что чему соответствует. Как уже говорилось выше, значению Horizontal соответствовали стили Horizontal и Min, а значению LargeGrid соответствовали стили Cross, LargeGrid, Max. Обратившись снова к документации, обнаружил, что стилю Max соответствует значение SolidDiamond. Удивившись, я решил просто вывести на форме три прямоугольника с разными стилями:

private void Form1_Paint(object sender, PaintEventArgs e)
{
HatchBrush hatchbrush = new HatchBrush(HatchStyle.Max, Color.Blue);
e.Graphics.FillRectangle(hatchbrush, 20, 20, 300, 100);

hatchbrush = new HatchBrush(HatchStyle.LargeGrid, Color.Blue);
e.Graphics.FillRectangle(hatchbrush, 20, 130, 300, 100);

hatchbrush = new HatchBrush(HatchStyle.SolidDiamond, Color.Blue);
e.Graphics.FillRectangle(hatchbrush, 20, 240, 300, 100);
}

Запустив пример, я убедился, что мой код для списков выдает правильные результаты. Если вы посмотрите на форму, то увидите, что первые два прямоугольника закрашены одинаковыми узорами (Max и LargeGrid), а третий прямоугольник закрашен совсем по другому. Таким образом, получается, что в документацию MSDN вкралась ошибка. Поэтому, когда вы обращаетесь к документации, старайтесь перепроверять написанное. Документацию пишут тоже живые люди, которые могут ошибаться.
А завтра начинается новый учебный год для школьников и студентов. Некоторые из них начнут или продолжат изучение программирования.
Счастливого вам программирования, девочки и мальчики!

воскресенье, 17 августа 2008 г.

Трудности перевода

Зайдите на www.Translate.ru и введите следующую фразу: my cat has given birth to four kittens, two yellow, one white and one black. Посмотрите, что у вас получится.
Для ленивых: переводчик выдает следующую фразу:
мой кот родил четырех котят, два желтых цвета, одно белое и одного афроамериканца.
Классно получилось. И политкорректно. Кстати, не стоит говорить, что черная кошка перебежала вам дорогу. Афроамериканка перебежала вам дорогу (а то еще засудят).