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

среда, 12 октября 2011 г.

SetComputerName

Добавил в справочник по функциям Windows API описание для функции SetComputerName. Кстати, я не нашел, как можно эту операцию сделать с помощью управляемого кода. Кто-нибудь знает?

[DllImport("kernel32.dll")]
static extern bool SetComputerName(string lpComputerName);

SetComputerName устанавливает новое имя компьютера пользователя. Имя помещено в строковую переменную lpComputerName. Чтобы изменения вступили в силу, требуется перезагрузка компьютера. Имя компьютера можно изменить также с помощью компонента Панели управления Система.

Параметры

lpComputerName
Строка, достаточно большая для хранения имени компьютера

Пример

' Устанавливаем новое имя компьютера
bool done = SetComputerName("NewName");

if (done)
{
MessageBox.Show("Перезагрузите компьютер, чтобы изменения вступили в силу");
}

Зарегистрированные пользователи скоро получат новую версию электронного справочника.

воскресенье, 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); // "ограничиваем" курсор целым экраном
}

воскресенье, 13 февраля 2011 г.

Microsoft+Nokia: В одну кучку гоп!

В последние дни очень активно обсуждается тема будущего совместного сотрудничества между компаниями Nokia и Microsoft. Мнения по этому поводу разделились диаметрально противоположным образом. Я тоже решил высказать здесь свое мнение, чтобы спустя некоторое время проверить, насколько был прав.
Во-первых, для меня очевидно, что и Nokia и Microsoft переживают трудные времена в области мобильных телефонов. Рынок телефонов сейчас является лакомым кусочком для многих компаний, и поэтому таким гигантам очень обидно проигрывать на этом участке, учитывая их амбиции.
Примечательно, что сами компании вслух отрицают, что дела у них плохо. И стараются делать хорошую мину при плохой игре. Например, просто замалчивают результаты своих продаж, или составляют статистику немного хитрым образом. Но независимые аналитики доказывают, что доля Nokia и Microsoft на рынке падает. А потребитель выбирает iPhone и телефоны на базе Android.
В конце концов Nokia сдалась и призналась, что они стали аутсайдерами в гонке. Это признание сделал новый главный руководитель Nokia в закрытом письме для сотрудников. Позже он подтвердил свое авторство письма, когда оно стало достоянием общественности.
Microsoft пока держится и не делает никаких признаний. Но косвенные улики указывают на плачевное состояние дел. Во-первых, компания упорно не раскрывает статистику продаж. Особенно смешно это выглядит на фоне парадных рапортов о рекордных продажах Windows 7, MS Office, Kinect. Далее стали просачиваться осторожные высказывания некоторых партнеров MS, которые сетуют на то, что они рассчитывали на более высокие продажи, но при этом быстро добавляли, что сама система им очень-очень нравится (правда, правда). Видимо, чтобы не вызвать праведного гнева корпорации.
Я долго ждал, кто же первым произнесет слово Провал в отношении Windows Phone 7. И, наконец-то, дождался. Первым смельчаком оказался известный аналитик Эльдар Муртазин.
Так что же нам ждать от объединения Nokia и Microsoft? А никто не знает. Во-первых, было произнесено слишком много общих слов. Во-вторых, две компании с богатыми потенциальными возможностями не всегда могут составить идеальную пару, даже став союзниками. Лично я скептически отношусь к новообразованному союзу. И вот почему. Nokia собирается переходить на систему Windows Phone 7, которая и так уже ничем не удивила пользователя. Да, число владельцев Windows Phone 7 увеличится, но оно увеличится только за счет уменьшения доли Symbian. А часть поклонников Nokia также перейдут на Android и iPhone.
Но на самом деле, для меня не так важно, какую часть рынка займут телефоны Windows Phone 7. Например, несмотря на растущую популярность Android и iPhone, я до сих пор пользуюсь Windows Mobile 6.5. Причина моего выбора была проста - я мог писать программы для себя на Visual Studio 2008. Но Microsoft сама обрубила сук, на котором сидела. Во-первых, она прекратила без объяснения причин поддержку Windows Mobile в Visual Studio 2010. Во-вторых, она решила полностью скопировать поведение Apple и ввела систему членства и ограничений. Теперь, чтобы написать программу и поделиться с другом, нужно заплатить 99 долларов в год и разместить ее в MarketPlace. Объединение с Nokia ничего не изменит в этой политике. Естественно, на фоне этих событий мне придется переходить на Android с ее более демократичным подходом.
Это очень обидно, так как программировать в Visual Studio для Windows Phone 7 гораздо приятнее, чем в Eclipse для Android. Например, приступая к изучению основ программирования под Windows Phone 7, совершенно не знал Silverlight и XNA. Но вхождение в новые технологии было очень простым и понятным. Для Android все немного сложнее и запутаннее.
Остается маленькая надежда, что в Microsoft будут сделаны кадровые перестановки и придет очень хороший руководитель, который сможет убедить руководство изменить систему в лучшую сторону. То, что мы видим сейчас - это, простите, убожество. Чем дальше я смотрю на дизайн Windows Phone, тем больше в нем разочаровываюсь. Уже все знают о черной полоске со стрелкой на главном окне телефона и несимметричном расположении плиток. Но меня также удивляет и стиль Metro, который выдают за оригинальное дизайнерское решение. Я не дизайнер, и поэтому принимал данное утверждение на веру. А теперь выскажу свое скромное мнение. Посмотрим на эту ситуацию с такой стороны. На сегодняшний день все продающиеся телефоны с Windows Phone 7 можно отнести к дорогой ценовой категории от 500 долларов и выше. А теперь представьте, подобный телефон покупает состоятельный человек, который видит простенький интерфейс Metro без градиентов, округлостей, теней. Но состоятельный человек на метро не катается, зачем ему убогий интерфейс, если он привык к красивым блестящим машинам, ноутбукам, хрустальным бокалам и так далее. Красивые сайты в стиле Web 2.0 тоже еще не потеряли своей привлекательности. Сюда же можно добавить победное распространение HTML5 и CCS3, которые позволяют делать очень симпатичные вещи. На этом фоне интерфейс Windows Phone 7 выглядит шагом назад, а его функциональные возможности сравнимы с первыми моделями iPhone.
Таким образом, мой прогноз относительно будущего Windows Phone 7: в 2011 году будет полный провал по всем фронтам. Далее возможны варианты. Microsoft признает свое поражение и начнет кардинально улучшать систему. Либо компания упорно будет гнуть свою линию и делать косметические изменения, накапливая силы на другой проект, чтобы выстрелить в 2012 году.
Тем не менее, альянсу хочется пожелать удачи. Во-первых, это заставит шевелиться конкурентов, во-вторых у пользователя будет больше выбора, в-третьих, это просто интересно, что получится если скрестить ежа с колючей проволокой (шутка).