Сайт для программистов
Показаны сообщения с ярлыком API. Показать все сообщения
Показаны сообщения с ярлыком API. Показать все сообщения

воскресенье, 3 апреля 2011 г.

ClipCursor

Недавно редактировал страницы описаний функций Windows API для Visual Basic 6.0 (http://rusproject.narod.ru/api/winapi.htm) и обратил внимание, что не написал аналога функции ClipCursor для другого Справочника по функциям Windows API для .NET Framework. Решил восполнить пробел. Сама функция интересна тем, что с ее помощью можно запереть курсор мыши в замкнутом пространстве. Это дает простор для создания различных шуток и розыгрышей (эх, 1 апреля пропустил). Только учтите, что даже при закрытии приложения мышь будет метаться в заданном вами прямоугольнике! Поэтому необходимо предусмотреть возможность восстановить работоспособность бедной мышки. По секрету скажу, что комбинации клавиш Ctrl+Alt+Del или Alt+Tab позволяют освободить мышь из плена. Теперь сам пример.

// Временно ограничим перемещения курсора областью формы Form1
[DllImport("user32.dll")]
static extern bool ClipCursor(ref RECT lpRect);

[DllImport("user32.dll")]
public static extern int GetWindowRect(IntPtr hwnd, ref RECT lpRect);

[DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
public static extern IntPtr GetDesktopWindow();

[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}

private void button1_Click(object sender, EventArgs e)
{
RECT rc = new RECT(); // прямоугольник ограничения
GetWindowRect(this.Handle, ref rc); // помещаем координаты окна в прямоугольник
ClipCursor(ref rc); // ограничиваем перемещения курсора
}

private void button2_Click(object sender, EventArgs e)
{
//код для "освобождения" курсора.
RECT rc = new RECT(); // прямоугольник ограничения
IntPtr hWind = GetDesktopWindow(); // получаем описатель рабочего стола
GetWindowRect(hWind, ref rc); // помещаем координаты рабочего стола в прямоугольник
ClipCursor(ref rc); // "ограничиваем" курсор целым экраном
}

четверг, 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 Vista Bridge Sample Library

Долгое время у меня не доходили руки до новой библиотеки Windows Vista Bridge Sample Library, которая позволяет использовать новые возможности Windows Vista и Windows 7 в своих программах. Я видел различные публикации как на американских блогах, так и переведенные статьи. И вот, наконец, я решил изучить эту библиотеку. После небольшого изучения я вновь перечитал статьи и ужаснулся. Насколько все поверхностно описано о возможностях библиотеки, как много осталось недосказанного. Статьи расчитаны на опытных программистов, которые могут самостоятельно изучить исходный код библиотеки и понять о чем идет речь в статьях. Но что делать менее опытным программистам, которые тоже хотят приобщиться к новых технологиям?
Поэтому я решил написать свой вариант статьи на эту тему. Чтобы не начинать работу с нуля, я взял за основу уже имеющиеся статьи и немного поправил их. Предварительный вариант статьи можно прочитать по адресу http://developer.alexanderklimov.ru/articles/vbsl.php. В дальнейшем я переработаю статью и постараюсь сделать ее более понятной. Если у вас есть вопросы по данной библиотеке, то можете обратиться ко мне. Самый лучший способ поделиться своим вопросом - это воспользоваться специальной формой Оставь свой отзыв, которую можно найти в правой части главной страницы http://developer.alexanderklimov.ru. Также можете задать свой вопрос по электронной почте или в комментариях к этому посту.
Удачного вам программирования!

воскресенье, 5 апреля 2009 г.

Колокольчик для коровы

Некоторое время назад я начал переводить статью для раздела Windows Mobile, взятую с Codin4Fun. А недавно обнаружил, что эту статью также перевели на русском варианте Coding4Fun. Честно говоря, мне не очень понравился тот перевод, поэтому я все-таки решил выложить на своем сайте свой вариант перевода. Прочитать статью можно здесь.


Удачного вам программирования!

воскресенье, 22 марта 2009 г.

ShellAbout

Сегодня познакомлю вас с простой функцией Windows API ShellAbout.



[DllImport("shell32.dll")]
static extern int ShellAbout(IntPtr hWnd, string szApp, string szOtherStuff, IntPtr hIcon);


ShellAbout выводит стандартное диалоговое окно Windows "О программе". Такое окно, например, вы можете увидеть при выборе меню О программе в Блокноте (notepad.exe). ЭТо окно можно использовать, когда у вас нет времени на разработку своего окна About.



Параметры



hwnd
Описатель родительского окна, вызывающего функцию

szApp
Выводит текст в заголовке диалогового окна и в первой строчке после слова "Microsoft". Если текст содержит разделитель (#), разделяющий текст на две части, то функция выводит первую часть в заголовке, а вторую после слова "Microsoft"

szOtherStuff
Выводит текст после информации о версии и копирайте

hIcon
Значок, выводимый в диалоговом окне. Если параметр равен NULL, функция показывает значок Microsoft Windows


Пример



ShellAbout(this.Handle, "Блокнотик", "Супер-программа Александра Климова", IntPtr.Zero);

Данная функция включена в справочник по функциям Windows API.

воскресенье, 7 декабря 2008 г.

Улучшенные элементы управления Windows Vista

Здравствуйте!


Продолжаем изучать новые возможности Windows Vista. Открываем статью из MSDN Magazine за август 2007 года и внимательно ее читаем. Хотя статья написана для программистов C++, нас это не должно останавливать. Я позволю себе скопировать оттуда часть интересующей нас информации. Итак...


Элементы управления редактирования и поля списка
Windows XP представил возможность показывать текстовую подсказку для элементов управления редактированием при помощи сообщения EM_SETCUEBANNER. Эта подсказка показывает пользователю информацию, которая исчезает при выделении элемента управления. Windows Vista добавил к этому весьма ценное свойство, позволяющее показывать текст подсказки даже тогда, когда элемент управления выделен. Это на первый взгляд незначительное улучшение во многих случаях снимает необходимость статических элементов управления. Просто используйте ранее незадействованный WPARAM и установите для него значение «истина», чтобы воспользоваться этим свойством.
Примерно таким же образом Windows Vista придает это свойство и полям списка при помощи сообщения CB_SETCUEBANNER. Не существует, однако, варианта показа текста подсказки, когда элемент управления выделен, и только поля раскрывающегося списка продолжают показывать текст подсказки до тех пор, пока не сделан выбор.



Теперь чуть подробнее о том, что тут написано. Возьмем, к примеру браузер Internet Explorer. В верхнем правом углу мы видим строку поиска (текстовое поле), в котором находится слово-подсказка Google. Как только мы установим фокус на нем, то поле очистится и мы можем вводить запрос. Насколько я помню, в Firefox также реализована эта функция (под рукой нет этого браузера). Так вот, это легко реализуется при помощи соответствующего сообщения Windows.
Аналогично и для комбинированного окна ComboBox. Надо заметить, что в Windows XP, если ComboBox получает фокус, то подсказка исчезает (не могу проверить, т.к. у меня Виста).
В чем преимущество данных подсказок? У вас появляется возможность сэкономить место на форме, не прибегая к Label, так как подсказки позволяют разместить информацию для пользователя.
Я набросал небольшой пример для демонстрации, можете взглянуть на картинку ниже.





По традиции, код и описание новых сообщений Windows будут доступны зарегистрированным пользователям справочника по функциям Windows API. Остальным придется самостоятельно написать программу. Информацию я вам предоставил.
Счастливого вам программирования!

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

PrintScreen, Codin4Fun и справочник по Visual Studio

Здравствуйте!
Наступило 1 декабря, а на улицах Москвы нет снега. Перейдем к новостям. Сегодня перечитывал журнал MSDN Magazine за ноябрь 2005 года и наткнулся на статью, как отключить клавишу PrintScreen, чтобы пользователь не мог скопировать снимок экрана в буфер. Автор статьи рассказывает о том, что в принципе, помешать чужой программе получить снимок экрана невозможно. Но, тем не менее, если вам все-таки нужно отключить клавишу PrintScreen, то воспользуйтесь функцией Windows API RegisterHotKey с константами IDHOT_SNAPDESKTOP и IDHOT_SNAPWINDOW. Далее в статье приводится пример на C++. Так как в моем справочнике по функциям Windows API уже было описание этой функции, то я решил написать тестовое приложение, чтобы проверить, как это все работает. Результат своих опытов я помещу в справочник в виде отдельной статьи, которая будет доступна зарегистрированным пользователям через несколько месяцев. Остальных приглашаю попробовать самостоятельно написать аналогичную программу.
Также в разделе справочники появился еще один справочник по Visual Studio. В последнее время пополнение справочника идет за счет советов Сары Форд, которые доступны с русскоязычного блога. А сегодня появилась еще одна хорошая новость - был запущен русский Codin4Fun по адресу http://blogs.msdn.com/rucoding4fun. К сожалению, на сайте появятся переводы постов, начиная с февраля 2008 года. Более ранние статьи (а среди них есть очень интересные) останутся без перевода. Если у вас есть желание перевести какие-нибудь старые статьи, то присылайте мне по адресу rusproject@mail.ru. В разделе Статьи я уже опубликовал несколько материалов оттуда.
Присоединяйтесь!
Всем удачного программирования!

понедельник, 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". Я немного растерялся, на миг потерял дар речи. Потом все-таки собрался, показал рукой на другую сторону переулка и сказал, что нечетные номера домов находятся на другой стороне. Она так удивилась...
Удачи вам, блондинки!

воскресенье, 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.

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

вторник, 28 октября 2008 г.

Функция StrFormatByteSize

Сегодня хочу рассказать вам об интересной функции Windows API StrFormatByteSize. Особенность этой функции в том, что вы передаете ей большое число (размер вашего диска), а она автоматически выдает результат в удобном виде, например, 1.4кб или 1.4Гб и т.д. Хочу обратить ваше внимание, что ANSI-версия этой функции может работать до 1.99Гб. Конечно, такое ограничение нас не устроит, если даже флешки уже стали по 32 Гб и выше. Но, не все так плохо. Unicode-функция может возвращать до 7.99 Эбайт. Большинство из вас даже не знают, что такое Эбайт. Эбайт (сокр. от Эксабайт) - это очень огромная цифра. Вы уже слышали, что появились жесткие диски с объемом Терабайт. Так вот, после терабайтов идут петабайты и только потом эксабайты. Трудно представить, что в обозримом будущем появятся накопители такой емкости. Еще одна особенность функции - названия байтов выдается на родном языке. На русском - Кб, Мб, Гб, а английском - kb, gb и т.д.
Вот как выглядит объявление функции на C#
[DllImport("Shlwapi.dll", CharSet = CharSet.Auto)]public static extern long StrFormatByteSize( long dw,[MarshalAs(UnmanagedType.LPTStr)] StringBuilder pszBuf, int cchBuf );

Создаем для нее обертку и выводим результат
public static string FormatByteSize(long fileSize)
{
StringBuilder sbBuffer = new StringBuilder(20);
StrFormatByteSize(fileSize, sbBuffer, 20);
return sbBuffer.ToString();
}
// Выбираем максимальное возможное значение
MessageBox.Show(FormatByteSize(long.MaxValue));

Описание параметров и примеры на Visual Basiс будут доступны в моем справочнике по фунциями Windows API.
Счастливого вам программирования!

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

Устаревшая функция MessageBeep

Если в ваших старых проектах встречается функция Windows API MessageBeep, то можете отказаться от нее, и использовать методы класса System.Media.SystemSounds, который появился в .NET Framework/.NET Compact Framework 3.5. Единственное исключение - это проекты для Windows Mobile 6/6.1, в которых встроена версия CF2.0. Там эту функцию еще приходится использовать. Описание и пример использования функции можете посмотреть на странице устаревших функций Windows API.
Счастливого вам программирования!

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

Функции для Aero Glass

Наверняка, вы слышали, что в Windows Vista имеется схема Aero Glass, поддерживающую полупрозрачность и стеклянный интерфейс. При помощи функций DwmIsCompositionEnabled и DwmEnableComposition можно управлять схемой Aero Glass. Сначала объявим эти функции
[DllImport("dwmapi.dll", PreserveSig = false)]public static extern bool DwmIsCompositionEnabled();

[DllImport("dwmapi.dll", PreserveSig = false)]public static extern void DwmEnableComposition(bool bEnable);

Теперь можно использовать их следующим образом:
// Если компновка рабочего стола доступна (включен Aero Glass)
if (DwmIsCompositionEnabled())
{
MessageBox.Show("Aero Glass включен");
}
else
{
MessageBox.Show("Aero Glass выключен");
}

// Отключаем компоновку рабочего стола (отключаем Aero Glass)
DwmEnableComposition(false);

Описания функций добавлены в Справочник по функциям Windows API для .NET Framework и будут доступны зарегистрированным пользователям в течение ближайших месяцев.
Удачного вам программирования!

вторник, 1 июля 2008 г.

Картинки для TreeView

Если вам приходилось раньше использовать элемент TreeView в своих проектах, то, наверняка, задавались вопросом - как использовать вместо плюсиков-минусов привычные картинки открытой или закрытой папки как в Проводнике или использовать свои собственные картинки. Для решения этой проблемы нужно было использовать системное сообщение Windows TVM_SETIMAGELIST. Готовый пример можно посмотреть например на странице FAQ от GotDotNet. Я также поместил этот пример на страницу устаревших функций Windows API.
Но, начиная с .NET Framework 2.0 у элемента TreeView есть свойства ImageIndex и SelectedImageIndex, которые в сочетании с элементом ImageList, помогут вам обеспечить необходимую функциональность. Пересмотрите свои старые примеры и внесите необходимые изменения.
Удачного вам программирования!

воскресенье, 29 июня 2008 г.

Солянка

Сегодня не будет какой-то конкретной темы. Поговорим понемногу обо всем. Начнем с поисковой системы. Когда-то давно в сети (лет 10 назад) появилась поисковая система, которая искала запросы в исходных кодах. Я в то время увлекался программированием на Visual Basic 5.0/6.0 и тем поисковым сайтом я пользовался достаточно регулярно. К сожалению, уже не помню адрес этого сайта. Сейчас появились другие поисковые системы, которые также ищут ответы в исходных кодах. Но я ими не пользуюсь. Мне хватает обычного Google. Но недавно наткнулся на интересный проект. На этот раз предлагают искать ответы в текстах книг по программированию. Адрес проекта - http://www.codefetch.com.
Выбираем язык программирования, вбиваем запрос и вперед. Понятно, что поиск идет среди англоязычных книг. Возьмите на заметку.
Вторая тема - .NET Compact Framework. Очень интересное предложение сделал в своем блоге программист Крис Крафт. Он обещал в течение месяца написать 30 полезных программ, по одной программе в день. И свое обещание сдержал. На данный момент уже выложено 27 программ. Все программы поставляются в двух вариантах - готовые приложения и исходные коды. Найти это чудо можно по адресу http://www.cjcraft.com/blog/default,month,2008-06.aspx.
Меня поразила схожесть наших интересов. Одна треть этих программ уже имелась в моем арсенале. Вторую треть программ я только собирался написать. Теперь сэкономлю время и изучу готовые примеры. А остальная часть программ - это приложения, которые я хотел бы написать, но не представлял, с чего начинать. Эти примеры меня восхитили больше всего. С удовольствием изучу их, найти бы только время на изучение.
Третья тема - изучение IDE. Недавно стал нажимать на все кнопочки и менюшки в Visual Studio и обнаружил в ней новое окно Document Outline. Честно признаюсь, не знаю, когда это окно появилось в Visual Studio, может оно всегда там было? Окно это можно вызвать через View Other Windows или через Ctrl+Alt+T.
В этом окне как на ладони видны все элементы управления проекта. Их можно перемещать, удалять и добавлять из панели инструментов. Я пока не оценил практическую ценность окна, так как использовал простые проекты для исследования. Но, что-то мне подсказывает, что это полезная вещь в хозяйстве.
Четвертая тема - функции Windows API. Недавно я закончил писать пример выключения компьютера при помощи функции ExitWindowsEx. Чтобы использовать эту функцию в Windows XP/Vista, необходимо также вызывать функции GetCurrentProcess, OpenProcessToken, LookupPrivilegeValue, AdjustTokenPrivileges. Я не стану приводить этот пример здесь. Он будет доступен пользователям, которые приобрели мой справочник по фунциям Windows API. Остальные могут поискать ответ самостоятельно в интернете. Следующими функциями для изучения станут функции Windows Vista, связанные с Aero Glass. Немного об этих функциях было сказано в апрельском номере журнал MSDN Magazine за 2007 год. Надо это дело разобрать по косточкам и поместить в справочник.
Есть еще несколько интересных тем для разговора. Но, я, пожалуй, оставлю их до следующего раза.
Удачного вам программирования!

суббота, 7 июня 2008 г.

Админ ли ты?

Продолжаю читать книжку Защищенный код для Windows Vista. Оказывается, если вы регистрировались в системе как Администратор, то все равно администратором по сути не являетесь. По умолчанию система дает вам права стандартного пользователя. Если вам необходимо выполнить административную задачу, то система предложит вам повысить свои права. Срабатывает механизм UAC (контроль учетных записей пользователей), который так раздражает многих пользователей. Автор книги рекомендует использовать системную функцию IsUserAnAdmin для проверки ваших текущих прав. К счастью, синтаксис этой функции очень прост и мне не составило труда написать объявление этой функции для C# через механизм P/Invoke:
[DllImport("shell32.dll")]
private static extern bool IsUserAnAdmin();

// Является ли пользователь администратором
Console.WriteLine("Вы админ?: {0}", IsUserAnAdmin().ToString());


Если запустите эту программу, то можете убедиться, что вы не являетесь администратором (False). Теперь найдите исполняемый файл проекта в Проводнике, щелкните правой кнопкой для вызова контекстного меню и выберите команду Запуск от имени администратора. Теперь программа будет выводить значение True. Вы повысили себе права до уровня администратора ручным способом.
Существует и другой аспект. Предположим, вы сами хотите реализовать возможность повышения уровня привилегий в своей программе. В таком случае воспользуйтесь следующим кодом:

Process p = new Process();
ProcessStartInfo psi = new ProcessStartInfo(@"cmd.exe");
psi.UseShellExecute = true;
psi.Verb = "runas";
p.StartInfo = psi;
p.Start();


В приведенном примере показано, как можно запускать новый процесс с повышенными привилегиями.

Итак, после прочтения очередных страниц книги, мы познакомились с новой функцией Windows API IsUserAnAdmin, которую я сразу же поместил в свой справочник по функциям Windows API и узнали, как программно повышать права при вызове нового процесса.
Удачного вам программирования!
P.S. Чемпионат Европы по футболу стартовал. Удачного вам боления!

пятница, 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.
Всех с праздником Победы!
И счастливого вам программирования!

воскресенье, 2 марта 2008 г.

Недавно в справочник добавил пример с применением функций SetPowerRequirement и ReleasePowerRequirement. С помощью этих функций можно сделать так, чтобы экран мобильного устройства не выключался, если долго не нажимать на кнопки или не пользоваться пером. Это может пригодиться, например, при просмотре видео. Приведу объявление одной функции на VB:
Declare Function SetPowerRequirement Lib "coredll.dll" (ByVal pvDevice As String, _ ByVal DeviceState As PowerState, _ ByVal DeviceFlags As Integer, _ ByVal pvSystemState As IntPtr, _ ByVal StateFlags As Integer) As IntPtr

Чтобы экран не выключался, нужно сделать так:
' Отключаем автоматическое выключение экрана
Public Sub Activate()
'request full power handle = SetPowerRequirement("BKL1:", CEDEVICE_POWER_STATE.D0, 1, IntPtr.Zero, 0)
End Sub
Более полное описание функций и примеры на C# и Visual Basic можно найти в справочнике по функциям Windows API.
Кстати, новость для тех, кто интересуется программированием для мобильных устройств. Microsoft поменяла главную страницу Windows Mobile Developer Center. Теперь на этой странице в более удобном виде собраны ресурсы для разработчика под платформу Windows Mobile. Рекомендую всем. (А вечером многие страницы Microsoft были недоступны. Надеюсь, это временное явление).

 

суббота, 23 февраля 2008 г.

Сегодня снова поговорим о новинках .NET Framework 2.0. В новом классе DriveInfo есть свойство VolumeLabel, которое позволяет получать или устанавливать метку тома диска. Данное свойство позволяет отказаться от вызова неуправляемых функций Windows API SetVolumeLabel и GetVolumeInformation. Описание свойства мы можете найти в моем справочнике, который можно скачать с моей страницы, а здесь я приведу лишь пример использования этого свойства:
DriveInfo di = new DriveInfo("d");
// Устанавливаем новую метку для диска D:
di.VolumeLabel = "DriveD";
// Получим метку тома
Console.WriteLine(new DriveInfo("d").VolumeLabel);

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

Устаревшие функции Windows API (продолжение)

Продолжаем избавляться от устаревших функций Windows API. Просматривая книгу Программирование КПК и смартфонов на .NET Compact Framework, обнаружил код для работы с реестром. Описание функций заняло около 10 страниц книги. К счастью, в .NET Compact Framework 2.0 появилась поддержка работы с реестром при помощи класса Registry. В качестве примера можете посмотреть устаревшую функцию RegOpenKeyEx на странице Функций Windows API.
Старые функции в топку! Теперь аналогичный пример с использованием управляемого кода займет полстраницы вместо десяти страниц (почувствуйте разницу).
Удачного вам программирования!

четверг, 3 января 2008 г.

Устаревшие функции Windows API

Я сейчас пересматриваю старые проекты для .NET Compact Framework. Теперь в Windows Mobile 6 зашита 2 версия .NET Compact Framework, поэтому некоторые конструкции с применением вызовов функций Windows API выглядят устаревшими. Например, вместо функции GetSystemPowerStatusEx можно воспользоваться свойствами SystemState.PowerBatteryStrength и SystemState.PowerBatteryState пространства имен Microsoft.WindowsMobile.Status.
Если вас интересуют описания устаревших функций Windows API, то можете посетить специальную страничку на моем сайте (http://netsources.narod.ru/oldapi/winapi.html).
Удачного вам программирования!