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

понедельник, 24 ноября 2008 г.

CoCreateGuid, "Русалка" и блондинка

Начну свою запись в блоге с функции Windows API CoCreateGuid. Если вы раньше использовали эту функцию в .NET Compact Framework 1.1, то можете отказаться от нее, так как в CF2.0 и выше поддерживается метод Guid.NewGuid. Я убрал описание этой функции из справочника по функциям Windows API и поместил ее на страницу устаревших функций.
Кстати, если вы программируете для мобильных устройств, то обратите внимание, что вышли новые версии эмуляторов под Windows Mobile 6.1. (ссылки ищите здесь).
Переходим к Русалке. Недавно я рассказывал о песне в исполнении певицы Массква про телефон за тысячу евро. Недавно по 1 каналу показали этот фильм. Я не мог пропустить это событие и посмотрел картину. Мне фильм понравился, и песня нормально слушается. А как вам?
И, напоследок, расскажу о встрече с блондинкой. Шел я недавно в центре Москвы по Кривоколенному переулку. Навстречу мне идет молодая блондика и обращается за помощью. Ей нужен был дом 9, а мы стояли как раз между домами 8 и 10. Она мне и говорит: "Вы случайно не местный? Не подскажете, где дом 9, вот дом 8, а за ним сразу дом 10". Я немного растерялся, на миг потерял дар речи. Потом все-таки собрался, показал рукой на другую сторону переулка и сказал, что нечетные номера домов находятся на другой стороне. Она так удивилась...
Удачи вам, блондинки!

понедельник, 3 ноября 2008 г.

Системные значки Windows

Если вам понадобится в приложении использовать системные значки Windows, которые мы обычно применяем в MessageBox, то воспользуйтесь классом SystemIcons. Например, пользователям Windows Vista хорошо знаком значок с изображением щита, тесно связанного с функциями UAC. Чтобы вывести этот значок, используйте такой код:

using (Graphics g = CreateGraphics())
{
g.DrawIcon(SystemIcons.Shield, 20, 30);
}

Если вам необходимо вывести все системные значки Windows, то лучше воспользоваться отражением. Пример с щитом показывает, что набор системных значков постоянно пополняется, и Reflection поможет написать универсальный код для этой задачи:

using System.Reflection;

// Получаем PropertyInfo для всех статических
// свойств SystemIcons
PropertyInfo[] props = typeof(SystemIcons).GetProperties(BindingFlags.Public BindingFlags.Static);
Graphics g = CreateGraphics();

int y = 0;
// Отображаем каждый значок. Все статические члены
// получаем через отражение — класс!
//
foreach (PropertyInfo p in props)
{
Object obj = p.GetValue(null, null);
if (obj.GetType() == typeof(Icon))
{
Icon icon = (Icon)obj;
g.DrawIcon(icon, 0, y);
g.DrawString(String.Format("SystemIcons.{0}",
p.Name), new Font("Arial", 12), Brushes.Blue, icon.Width + 2, y);
y += icon.Height;
}
}
g.Dispose();

Счастливого вам программирования!

воскресенье, 2 ноября 2008 г.

Защита файлов

Поговорим о функции Windows API SfcIsFileProtected.
В Windows Vista есть защищенные файлы, которые нельзя изменять или удалять. Поэтому, если ваша программа занимается чем-то подобным, то проверьте сначала, не является ли используемый файл защищенным. Для этой цели и служит функция SfcIsFileProtected, которая возвращает true, если файл защищен, и false, если файл не защищен. Проверяем.

// Проверим, является ли Блокнот и утилита от NERO в папке Windows защищенными файлами
MessageBox.Show(SfcIsFileProtected(IntPtr.Zero,@"c:\windows\notepad.exe").ToString());
MessageBox.Show(SfcIsFileProtected(IntPtr.Zero,@"c:\windows\unnerovision.exe").ToString());


Полное описание функции, как всегда, будет доступно зарегистрированным пользователям справочника по функциям Windows API.

Счастливого вам программирования!