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

вторник, 27 мая 2008 г.

Назад в будущее

В прошлом выпуске я поведал вам о выходе в свет книги C#. Советы программистам. Одна из глав книги посвящена различным трюкам, которые можно использовать в IDE Visual Studio. Сегодня узнал еще один интересный прием, который, похоже, не имеется в книге. Суть в следующем. Предположим у вас имеется большой проект. Вы выбираете в редакторе кода какое-нибудь слова и вызываете из контекстного меню команду Go To Definition. Вам мгновенно переносит в нужное место. Все это, безусловно, прекрасно. Но нам нужно вернуться теперь обратно, а проект очень большой... Неужели придется прокручивать редактор в поисках места, с которого вас выбросило? Запомните волшебную комбинацию клавиш Ctrl + -. Как только вы нажмете эту комбинацию, вы снова вернетесь на предыдущую позицию. Строго говоря, эта комбинация в паре с комбинацией Ctrl + Shift + - работает как кнопки Вперед и Назад в Internet Explorer.
Удачного вам программирования!

суббота, 24 мая 2008 г.

Моя новая книжка C#. Советы программистам

Издательство BHV-Петербург выпустило мою новую книжку C#. Советы программистам. Я постарался отобрать наиболее интересные примеры, которые я использовал в своей практике или собираюсь использовать в будущем. Более полную информацию о книге вы можете почерпуть с моей специальной странички, посвященной книжным новинкам. За написание книги я приступил около двух лет назад. Естественно, часть советов просто не попала в это издание. Поэтому я буду выкладывать новые советы на страницу FAQ. Наиболее интересные решения, возможно, попадут в следующее издании книги. Буду рад, если вы поделитесь своими замечаниями и предложениями по книге. Также можете присылать свои советы, которые я с удовольствием рассмотрю.
Счастливого вам чтения!

воскресенье, 11 мая 2008 г.

Новая книга Защищенный код для Windows Vista

Здравствуйте!
Недавно издательство Питер выпустило книгу Защищенный код для Windows Vista. Книга содержит очень много полезной информации о том, как правильно нужно писать программы под новую операционную систему Windows Vista. Большинство примеров в книге приводится на C++ и только небольшая часть на C#. Но тем не менее, книга очень нужная и своевременная. Я с удовольствием начал ее читать.

пятница, 9 мая 2008 г.

Узнать редакцию Vista

В каждой новой операционной системе появляются новые функции. Не стала исключением и Windows Vista. Как вы, вероятно, знаете, Vista поставляется в нескольких редакциях: Home Basic, Home Premium, Business и так далее. Чтобы узнать, какая версия используется у пользователя, можно воспользоваться двумя способами. Первый способ - использовать WMI (свойство OperatingSystemSKU из класса Win32_OperatingSystem). Пример использования этого свойства можно найти в справочнике по WMI.
Но нас интересует пример на C#. Для этой цели нам подойдет новая функция Windows API GetProductInfo, которая появилась в Windows Vista. Описание этой функции я поместил в справочник по функциям Windows API для .NET Framework, а здесь приведу небольшой пример использования в функции в проекте на C#:

[DllImport("kernel32.dll")]
public static extern bool GetProductInfo(
int dwOSMajorVersion,
int dwOSMinorVersion,
int dwSpMajorVersion,
int dwSpMinorVersion,
out uint pdwReturnedProductType);
// констанды для pdwReturnedProductType
public const uint PRODUCT_BUSINESS = 0x00000006; // Business
public const uint PRODUCT_ENTERPRISE = 0x00000004; // Enterprise
public const uint PRODUCT_HOME_BASIC = 0x00000002; // Home Basic
public const uint PRODUCT_HOME_PREMIUM = 0x00000003; // Home Premium
public const uint PRODUCT_ULTIMATE = 0x00000001; // Ultimate
public const uint PRODUCT_UNDEFINED = 0x00000000;


int majorVersion = Environment.OSVersion.Version.Major;
int minorVersion = Environment.OSVersion.Version.Minor;
int spMajorVersion = Environment.OSVersion.Version.MajorRevision;
int spMinorVersion = Environment.OSVersion.Version.MinorRevision;
// Vista GerProductInfo
uint edition = PRODUCT_UNDEFINED;
if (GetProductInfo(
majorVersion,
minorVersion,
spMajorVersion,
spMinorVersion,
out edition))
{
switch (edition)
{
case PRODUCT_ENTERPRISE:
textBox1.Text += " Enterprise";
break;
case PRODUCT_ULTIMATE:
textBox1.Text += " Ultimate";
break;
case PRODUCT_BUSINESS:
textBox1.Text += " Business";
break;
case PRODUCT_HOME_PREMIUM:
textBox1.Text += " Home Preminum";
break;
case PRODUCT_HOME_BASIC:
textBox1.Text += " Home Basic";
break;
default:
textBox1.Text += " Unknown";
break;
}
}


Программисты, которые по-прежнему работают на Visual Basic 6.0, также не будут забыты. Я постараюсь включить эту фунцию в справочник по функциям Windows API для Visual Basic 6.0.
Всех с праздником Победы!
И счастливого вам программирования!

вторник, 6 мая 2008 г.

Массив байтов и файловые потоки

В одном из проектов мне понадобилось конвертировать массив байтов bytes[] в поток System.IO.Stream. Так как я вплотную потоками не работал, то моя работа затормозилась. Пришлось искать решение в интернете. Оказалось, что мы не одиноки во Вселенной. Одного человека также интересовал этот вопрос, который он задал на форуме ASP.NET Mania. Добрый человек откликнулся на просьбу и предложил решение в виде класса. Я вытащил из кода нужную мне функциональность, но своей странице FAQ оставил оригинальную версию. Вдруг, спустя некоторое время, мне опять понадобится работать с потоками.
public static class StreamConverter
{
public static Stream ToStream(byte[] bytes)
{
return new MemoryStream(bytes);
}


public static byte[] ToBytes(Stream stream)
{
long initialPosition = stream.Position;
stream.Position = 0;
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
stream.Position = initialPosition;
return bytes;
}
}
Удачного вам программирования!