суббота, 24 октября 2009 г.
Фотоотчет о посещении офиса Microsoft
четверг, 22 октября 2009 г.
WM_APPCOMMAND
Недавно в справочник по функциям Windows API я добавил новый материал - описание сообщения WM_APPCOMMAND. Предлагаю вашему вниманию рассказ об этом интересном сообщении в сжатом виде. Само сообщение объявляется следующим образом:
private const int WM_APPCOMMAND = 0x319;
Сообщение WM_APPCOMMAND уведомляет окно о том, что пользователь создал командное событие прикладной программы, например, щелкнул на кнопке в приложении, используя мышь, или нажал на клавиатуре клавишу управления приложением.
С помощью данного сообщения можно, например, отключить системный микшер, значок которого находится в области уведомлений рядом с часиками.
private const int APPCOMMAND_VOLUME_MUTE = 0x8 * 0x10000;
private void button2_Click(object sender, EventArgs e)
{
// выключаем/включаем микшер
SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_MUTE);
}
Обратите внимание, что микшер включается или выключаетя циклически, т.е. для включения микшера нужно еще раз послать данное сообщение.
Также можно увеличивать или уменьшать уровень громкости микшера(константы APPCOMMAND_VOLUME_DOWN и APPCOMMAND_VOLUME_UP). Кроме того, среди используемых констант можно найти управление микрофоном, браузером или универсальным проигрывателем. Вот как можно поставить на паузу Windows Media Player из своей программы:
private const int APPCOMMAND_MEDIA_PLAY_PAUSE = 0x14 * 0x10000;
SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_MEDIA_PLAY_PAUSE);
Полный список доступных констант вы найдете в справочнике. Хочу обратить ваше внимание, что все значения констант в сообщении WM_APPCOMMAND необходимо умножить на 0x10000, что я и сделал в предыдущих примерах. Используются ли данные константы без умножения в других сообщениях , я не знаю. Кто в курсе - отзовитесь.
Кстати, при изучении документации MSDN, я обнаружил еще одну интересную константу APPCOMMAND_DWM_FLIP3D, который включает режим FLIP 3D в Windows 7 (Кстати, сегодня первый день розничной продажи Windows 7).
Удачного вам программирования!
воскресенье, 23 августа 2009 г.
Кнопка Пуск и панель задач в Windows 7
Также на CodeProject имеется другой пример для работы с кнопкой. Но он также мне ничем не помог.
Сам пример описан в моей книге C#.Советы программистам, поэтому нет смысла его приводить здесь. Просто имейте в виду, что пример с кнопкой Пуск из книги в Windows 7 работать не будет.
суббота, 13 июня 2009 г.
Windows Mobile
На моем сайте также появилось несколько новых материалов. Например, статья о разработке виджетов для Windows Mobile 6.5. На самом деле, эта тема более обширна, чем изложено в статье. Я также написал расширенный вариант для одного журнала. Посмотрим, опубликуют ли статью.
Кроме того, Андрей Коновалов (кстати, один из лучших участников блога о Windows Mobile) на Хабре стал публиковать статьи Криса Крафта, того самого человека, который обещал за тридцать дней написать тридцать приложений. Я сам подумывал о переводах этого цикла, но времени совсем нет. Поэтому я решил использовать с небольшими сокращениями переводы Андрея, внося свои изменения. Вот, например, вы можете прочитать первую статью Обратный отсчёт до полуночи.
Обратите внимание, кстати, что вышел набор разработчика Windows Mobile 6.5 DTK. В этом наборе появилось несколько новых эмуляторов с различными разрешениями. После установки эмуляторов, вы можете использовать их и для старых проектов. Например, для Windows Mobile 6.1 есть модели с разрешением 800х400. Раньше нельзя было посмотреть в эмуляторе, как выглядит ваше приложение на экране с таким разрешением. Теперь это стало возможным. Сам проект не обязательно компилировать под новую платформу, просто запускайте нужный эмулятор.
И последнее. Как вы знаете, в этому году у меня вышла книга Программирование для мобильных устройств под управлением Windows Mobile. Хочу провести небольшую акцию - за 250 рублей вы можете приобрести эту книгу + получите годовую подписку на мой справочник по Windows API для .NET Framework. В эту цену входит и почтовая доставка. Так как количество книг ограничено, то вам сначала нужно написать мне письмо о своем желании (rusproject@mail.ru) и я вам вышлю свой номер кошелька WebMoney (также можно перечислить Яндекс-деньгами). Акция расчитана на жителей России. Заказывайте!
Удачного вам программирования!
среда, 27 мая 2009 г.
Microsoft Visual C# в задачах и примерах
Книга рассчитана для начинающих программистов, которые хотят повысить свою квалификацию. Автор предлагает практичные примеры, взятые из жизни, и понятные для восприятия. Я с удовольствием почитал эту книжку и, даже, нашел для себя что-то новое. Например, описание функции Windows API TaskDialog, которая появилась в Windows Vista/Windows 7 (на момент покупки книги я еще не был близко знаком с библиотекой Windows Vista Bridge Sample Library).
Рекомендую приобрести и почитать книжку всем, кто только начинает программировать на C#.
Счастливого вам чтения!
суббота, 23 мая 2009 г.
Windows Vista Bridge Sample Library
Поэтому я решил написать свой вариант статьи на эту тему. Чтобы не начинать работу с нуля, я взял за основу уже имеющиеся статьи и немного поправил их. Предварительный вариант статьи можно прочитать по адресу http://developer.alexanderklimov.ru/articles/vbsl.php. В дальнейшем я переработаю статью и постараюсь сделать ее более понятной. Если у вас есть вопросы по данной библиотеке, то можете обратиться ко мне. Самый лучший способ поделиться своим вопросом - это воспользоваться специальной формой Оставь свой отзыв, которую можно найти в правой части главной страницы http://developer.alexanderklimov.ru. Также можете задать свой вопрос по электронной почте или в комментариях к этому посту.
Удачного вам программирования!
воскресенье, 26 апреля 2009 г.
ToTitleCase
В .NET Framework есть такой интересный метод как ToTitleCase, когда в заданной строке все первые буквы слов становятся большими, а остальные - маленькими. В MSDN можно найти описание и пример использования этого метода. Прочитав, вы узнаете, что у метода есть одна особенность: если все буквы в слове большие, то с этим словом ничего не происходит. Например, это удобно, когда встречаются такие слова как СССР, МГУ, ЗАГС и т.п. Но тем не менее, иногда, хочется обойти это ограничение. Что для этого нужно сделать. Правильно, сначала перевести все слова в нижний регистр, а затем вызвать метод ToTitleCase.
Именно так поступил программист Jan Schreuder, написав функции-обертки для этого метода (блог http://bloggingabout.net/)
private string ToTitleCase(string text, System.Globalization.CultureInfo culture, bool forceCasing)
{
if (forceCasing)
{
return culture.TextInfo.ToTitleCase(text.ToLower());
}
return culture.TextInfo.ToTitleCase(text);
}
private string ToTitleCase(string text)
{
return ToTitleCase(text, System.Threading.Thread.CurrentThread.CurrentCulture, false);
}
private string ToTitleCase(string text, bool forceCasing)
{
return ToTitleCase(text, System.Threading.Thread.CurrentThread.CurrentCulture, forceCasing);
}
private string ToTitleCase(string text, System.Globalization.CultureInfo culture)
{
return ToTitleCase(text, culture, false);
}
//Вызываем какую-нибудь функцию
label1.Text = ToTitleCase(textBox1.Text, true);
Как видите, в нашем распоряжении четыре перегруженных версий функции. В стандартном случае достаточно вызвать функцию с одним параметром, которая содержит нужную строку. Для других случаев вызываются перегруженные версии.
Вот как будут выглядеть строки после вызова всех вариантов функций.
change this to title case => Change This To Title Case
chanGe This to TITLE case => Change This To TITLE Case
ChanGe This to TITLE case => Change This To TITLE Case
ChanGe This to TITLE case => Change This To Title Case
Возможно, пример покажется не самым полезным в вашей практике, ну, а вдруг пригодится.