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

пятница, 2 октября 2015 г.

Покой нам только снится

Первая версия статьи Hello World была написана ещё в 2012 году, когда все пользовались устройствами Android 2.3 и средой разработки Eclipse.
Затем статья много раз переписывалась. Менялся внешний вид экранов приложения, шаблоны, код, версии устройств. Приходилось делать новые скриншоты и делать новые пояснения по коду. После пришла очередь Androd Studio - и всё по новой.
Но и студия не стояла на месте. Постоянно в новых версиях появлялись и исчезали различные прибамбасы.
Буквально вчера я запустил новый проект под версией Android Studio 1.4. И опять многое поменялось. Появились новые шаблоны с использованием Material Design. Кстати, простейший шаблон теперь называется Empty Activity и вдобавок из него убрали код для меню.
А в шаблоне с старым названием Blank Activity теперь используется плавающая кнопка Floating Action Button из библиотеки Android Design Support Library.
Вот так и живём. Сегодня очередной раз отредактировал урок Hello World.
В ближайшие дни надо пробежаться по другим статьям и посмотреть, нужно ли что-то там менять. А то новички завалят письмами, почему у них выходит совсем другое.

Воскрешение

Меняемся...
Раньше блог имел название Русский .NET Framework
показывая моё старое увлечение .Net-платформой.
Блог четыре года назад был заброшен, 
так как я полностью перешёл на разработку под Android.
Соответственно, поменял адрес сайта (раньше был rusnetframework.blogspot.com)
 и его описание.
Здесь я буду выкладывать небольшие заметки, размышления и прочие мысли, 
которые не подходят по формату для сайта Освой программирование играючи


среда, 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 году.
Тем не менее, альянсу хочется пожелать удачи. Во-первых, это заставит шевелиться конкурентов, во-вторых у пользователя будет больше выбора, в-третьих, это просто интересно, что получится если скрестить ежа с колючей проволокой (шутка).

воскресенье, 31 октября 2010 г.

ExtractAssociatedIcon

C помощью системной функции Windows API ExtractAssociatedIcon можно извлечь значок, ассоциированный с файлом. Значки возвращаются с размером 32х32.

[C#]
[DllImport("shell32.dll")]
static extern IntPtr ExtractAssociatedIcon(IntPtr hInst, StringBuilder lpIconPath,
out ushort lpiIcon);

или

[DllImport("shell32.dll")]
static extern IntPtr ExtractIcon(IntPtr hInst, string lpszExeFileName, int nIconIndex);


Пример



// Отобразим значок какого-нибудь файла
// Добавим в проект элемент OpenFileDialog, кнопку и PictureBox

openFileDialog1.ShowDialog();

ushort uicon;
StringBuilder strB = new StringBuilder(openFileDialog1.FileName);
IntPtr handle = ExtractAssociatedIcon(this.Handle, strB, out uicon);
Icon ico = Icon.FromHandle(handle);

pictureBox1.Image = ico.ToBitmap();


Запустите проект и выберите любой файл на диске. На форме в PictureBox отобразится значок, который используется для выбранного файла (как это мы видим в Проводники).

Описание функции и ее параметров добавлено в справочник по функциям Windows API для .NET Framework.

К слову сказать, совсем не обязательно использовать неуправлямый код. В .NET Framework есть метод Icon.ExtractAssociatedIcon пространства имен System.Drawing, который делает ту же работу.



Добавьте в проект еще одну кнопку и напишите следующий код:

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
Icon icon = Icon.ExtractAssociatedIcon(openFileDialog1.FileName);
this.Icon = icon;
pictureBox1.Image = icon.ToBitmap();
}


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

суббота, 30 октября 2010 г.

Разлочка эмулятора Windows Phone 7

Эмулятор Windows Phone 7, который входит в состав Windows Phone Developer Tools, какой-то обрезанный. Непонятно, зачем Микрософт пошла на такой шаг. Доступен только Internet Explorer и собственные приложения, создаваемые в Visual Studio. К счастью, нашлись умельцы, которые сумели разлочить эмулятор, отредактировав его файл. Файл можно найти в интернете по слову WM70C1.en-US.unlocked. Я скачивал отсюда.
Скачайте файл и перенесите его в папку %programfiles%\Microsoft SDKs\Windows Phone\v7.0\Emulation\Images\. В этой папке вы найдет образ оригинального эмулятора (файл WM70C1.en-US.bin). Далее переименуйте оригинальный файл эмулятора и сохраните его на всякий случай. Теперь переименуйте ваш скачанный файл, чтобы он имел нужное имя. Запустите какой-нибуль проект на Visual Studio. Ваше приложение запустится в новом эмуляторе.
Закройте свое приложение и просмотрите новый вид разлоченного эмулятора. Небо и земля. Естественно, вы все делаете на свой страх и риск. Я никаких сбоев не заметил, все работает.

Скриншоты






Видео




Пользуйтесь на здоровье.