Pull to refresh
810
0
Владимир @tangro

Пользователь

Send message

folly::fbvector — улучшенный std::vector от Facebook

Reading time6 min
Views26K
Folly — это открытая С++ библиотека, разрабатываемая Facebook и используемая им во внутренних проектах. С целью оптимизации расходов памяти и процессорных ресурсов библиотека включает собственные реализации некоторых стандартных контейнеров и алгоритмов. Одной из них является folly::fbvector — замена стандартного вектора (std::vector). Реализация от Facebook полностью совместима с оригинальным интерфейсом std::vector, изменения всегда не-негативны, почти всегда измеримы, часто — существенно, а иногда даже грандиозно влияют на производительность и\или расход памяти. Просто включите заголовочный файл folly/FBVector.h и замените std::vector на folly::fbvector для использования его в своём коде.

Пример


folly::fbvector<int> numbers({0, 1, 2, 3});
numbers.reserve(10);
for (int i = 4; i < 10; i++) {
  numbers.push_back(i * 2);
}
assert(numbers[6] == 12);


Мотивация


std::vector — устоявшаяся абстракция, которую многие используют для динамически-аллоцируемых массивов в С++. Также это самый известный и самый часто используемый контейнер. Тем большим сюрпризом оказывается то, что его стандартная реализация оставляет достаточно много возможностей по улучшению эффективности использования вектора. Этот документ объясняет, как реализация folly::fbvector улучшает некоторые аспекты std::vector. Вы можете воспользоваться тестами из folly/test/FBVectorTest.cpp чтобы сравнить производительность std::vector и folly::fbvector.
Читать дальше →
Total votes 55: ↑50 and ↓5+45
Comments50

Почему вам не нужен sshd в Docker-контейнере

Reading time6 min
Views40K
Когда люди запускают своей первый Docker-контейнер, они часто спрашивают: «А как мне попасть внуть контейнера?» и ответ «в лоб» на этот вопрос, конечно: «Так запустите в нём SSH-сервер и приконнектитесь!». Цель этого топика — показать, что на самом деле вам не нужен sshd внутри вашего контейнера (ну, конечно, кроме случая, когда ваш контейнер собственно и предназначен для инкапсуляции SSH-сервера).

Запустить SSH-сервер — заманчивая идея, поскольку это даёт быстрый и простой доступ «внутрь» контейнера. Все умеют пользоваться SSH-клиентами, мы делаем это каждый день, мы знакомы с доступами по паролям и по ключам, перенаправлением портов, ну и вообще доступ по SSH — хорошо знакомая вещь, точно будет работать.

Но давайте подумаем ещё.
Читать дальше →
Total votes 60: ↑53 and ↓7+46
Comments30

Использование Stream Out-стадии для отладки шейдеров в DirectX 10\11

Reading time5 min
Views6K

В начале марта я имел удовольствие посетить команду разработки Direct3D в главном офисе Microsoft в Редмонде. По ходу одной из дискуссий об отладке 3D приложений они посоветовали мне использовать новую возможность DirectX10\11 для отладки шейдеров.

Я использовал эту технику для отладки кода тесселяции под DirectX 11 (этот код приведён ниже), но и DirectX 10 обладает теми же возможностями и портирование будет достаточно тривиальным.

Что мы вообще пытаемся сделать?

Нам интересно получить результаты работы выполняемых на GPU шейдеров (вершинных, геометрических, тесселяции) для последующей обработки этих данных с помощью CPU. При этом мы хотим и видеть результаты просчёта графики на экране, и иметь все координаты в виде буферов и структур в оперативной памяти, откуда мы их уже сможем прочитать, записать в лог, использовать для дальнейших расчётов.
Читать дальше →
Total votes 27: ↑25 and ↓2+23
Comments0

RenderDoc — графический отладчик для DirectX11 от Crytek

Reading time6 min
Views31K
Как вы, возможно, знаете в мире Windows для рисования графики часто используется DirectX. В последних версиях (10, 11.x) библиотека серьёзно шагнула вперёд и именно на них построены движки многих современных игр. Кроме того, DirectX используется не только в играх — сам интерфейс ОС Windows тоже с непомню-какой версии (Vista?) рисуется через него, да и казалось-бы не сильно связанные с графикой программы, желая увеличить производительность и плавность зума\скрола переходят на последние версии DirectX. Так некоторое время назад на DirectX11 перешел рендер Google Chrome (вроде бы с версии 36).

Когда-то во времена Windows 95 и Pentium II была такая шутка, что чем медленнее компьютер — тем лучше можно понять работу операционной системы — невооруженным глазом видно в каком порядке прорисовываются элементы окон, обрабатываются события. Сегодня для подобных целей относительно DirectX есть отдельные инструменты — графические отладчики, позволяющие понять, как именно рисуется каждый пиксель каждого кадра, какие операции выполняет движок DirectX, какие ресурсы он использует, насколько быстро и правильно всё работает. Один из таких инструментов — RenderDoc от компании Crytek мы сегодня и рассмотрим. А в качестве примера разберём уже упомянутый выше новый рендер Google Chrome.



Читать дальше →
Total votes 47: ↑46 and ↓1+45
Comments21

Атрибут deprecated в С++14

Reading time3 min
Views22K
Нормальным развитием любого кода является устаревание отдельных его частей (функций, классов и т.д.) и планомерное удаление их из проекта для снижения сложности и повышения безопасности кода. Просто убрать что-то обычно является плохой идеей — это может резко сломать какой-нибудь компонент, использующий удаляемую сущность. Хорошей практикой является пометка устаревшего кода каким-либо способом, который даст возможность использующим его программистам узнать о том, что он запланирован к удалению. (Прим. переводчика — Microsoft для этого изобрела свой велосипед, а ещё люди иногда пользовались #pragma message).

Новый стандарт С++14 вводит атрибут deprecated для пометки устаревших сущностей, планируемых к удалению в дальнейшем. Компилятор может выводить предупреждения при любой попытке их использования. Синтаксис принципиально новый для С++: атрибуты предполагается писать в виде списка через запятую, внутри двойных квадратных скобок. Вот так выглядит функция, помеченная как deprecated:

[[deprecated]]
void foo() {}

int main() {
	foo(); // в этом месте компилятор выведет предупреждение
}

Читать дальше →
Total votes 44: ↑41 and ↓3+38
Comments29

Домашняя библиотека современного ребёнка

Reading time7 min
Views69K
В моём детстве огромную роль играли книги. У моих родителей (тогда ещё молодых инженеров) было много книг — приключенческие романы, детективы, фантастика, техническая и научная литература. У отца была подшивка журналов «Юный техник» и «Изобретатель и рационализатор» за полтора десятилетия. Книга или журнал в нашем доме всегда были чем-то очень важным. Дело было даже не столько в том, что в 80-90-ых их было не так легко достать, как во внимании, с которым мои родители их читали, обсуждали, что-то пересказывали мне. А ребёнок ведь в любом случае наследует поведение родителей, их интересы. И я зачитывал до дыр технические журналы, легко «глотал» детскую фантастику Булычева и Гаррисона, чуть поднапрягшись — и более серьёзных Брэдбери и Шекли. Городская библиотека, откровенно презираемая большинством моих сверстников, видела меня 2-3 раза в неделю почти десятилетие. Во многом мой жизненный путь, интерес к науке и технике, был определён уже тогда. Думаю, если бы в моём книжном шкафу 20 лет назад не стояли «Аэлита» Толстого, «Машина времени» Уэллса и «Я, робот» Азимова, я не писал бы сейчас на Хабре эту статью (и сотню предыдущих), а протирал бы штаны где-нибудь на должности «менеджера среднего звена по перекладыванию из пустого в порожнее».

Сегодня на дворе 2014 год и вот уже мой ребёнок учится читать по слогам. Завтра он протянет руку к книжному шкафу. Что же он возьмёт — бумажную книгу или электронную? Что это будет за книга?
Читать дальше →
Total votes 123: ↑116 and ↓7+109
Comments87

Почему Ваза утонул, а С++ всё ещё на плаву

Reading time6 min
Views82K
Эта статья — краткий пересказ невероятно интересного доклада Скотта Майерса для тех, у кого нет 70 минут на весь доклад, но есть 7 минут на основные тезисы.

Некоторые люди, которые не пишут на С++, а лишь слышали об этом языке, задаются вопросом: «Почему вообще кто-то пишет на C++?». Но есть люди, которые используют С++ каждый день, и вот эти люди задаются вопросом: «А действительно, почему я пишу на этом языке?».

Но ведь действительно, должна быть какая-то причина, по которой люди пишут программы на С++. Давайте вернемся в начало 90-ых, когда проходила стандартизация С++. Была предложена масса идей. Предложений было столько и они были настолько разные, что мне запомнилась цитата Джима Вальдо, который тогда работал в комитете по стандартизации: «Каждый, предлагающий добавить что-то в С++ должен приложить к заявке свою почку. Тогда никто не предложит больше двух идей, а к выбору этих двух он подойдёт невероятно ответственно.»

Язык, который был бы получен в результате принятия всех предложений, выходил слишком сложным и тогда Бьёрн Страуструп сказал «А помните Ваза?». Никто, кроме людей из Швеции, не понял о чём речь. Ваза был огромным боевым кораблём, построенным в Швеции в 1625 году. Основным принципом постройки корабля было «А почему бы нам не добавить сюда ещё и вот такую фичу?». Многие из идей исходили непосредственно от короля, в частности он лично утверждал размеры корабля. Также на Ваза по указаниям свыше требовалось нацепить огромное количество элементов украшения, резьбы, большое количество пушек и т.д. А королю ведь не откажешь. Итог был закономерным — из-за ошибок в конструировании Ваза затонул в первом же рейсе, едва выйдя из бухты.
Читать дальше →
Total votes 176: ↑153 and ↓23+130
Comments261

Шпаргалка по HTTP-библиотекам для С++

Reading time12 min
Views107K
К сожалению, в стандартной библиотеке языка С++ нет никаких средств для работы с протоколом HTTP. Возможно, в будущем появятся, но на данный момент каждый раз при необходимости дёрнуть какой-нибудь REST-сервис, пропарсить веб-страничку, написать простенького бота или краулера приходится задаваться вопросами «А какую же библиотеку взять, так чтобы побыстрее и попроще?». Иногда проект уже использует какой-то фреймворк (а иногда даже несколько) и тогда приходится вспоминать «А как же сделать HTTP-запрос имеющимися средствами?». Чтобы не путаться я решил написать для себя шпаргалку с примерами HTTP-запросов на С++ с применением разных библиотек. А самое удобное место для хранения подобных шпаргалок — Хабр: и сам не потеряешь, и другим может пригодиться.

Будут рассмотрены:
  • WinInet
  • WinHttp
  • Casablanca
  • Qt
  • POCO
  • wxWidgets
  • Boost.Asio
  • libcurl
  • neon
  • .NET (С++/CLI)
  • IXMLHTTPRequest
  • HappyHttp
  • cpp-netlib


Читать дальше →
Total votes 96: ↑89 and ↓7+82
Comments38

Сравнение сервисов очередей Azure Queues и Service Bus Queues

Reading time13 min
Views7.8K
Microsoft Azure поддерживает два типа механизмов очередей: Azure Queues и Service Bus Queues.

Azure Queues, является частью инфраструктуры Azure storage, предоставляя простой REST-ориентированный Get/Put/Peek интерфейс для надёжной, гарантированной доставки сообщений внутри сервиса или между несколькими сервисами.

Service Bus Queues — это часть инфраструктуры Azure messaging, которая занимается очередями, публикацией/подпиской, веб-сервисами и паттернами интеграции (больше об этом — Overview of Service Bus Messaging Patterns).

Сервисы работают параллельно, Azure Queues появился раньше, как отдельный механизм очередей, построенный поверх сервисов хранения данных Azure.
Service Bus Queues построены поверх инфраструктуры «брокеров сообщений», разработанной для связи приложений или компонентов приложения, которые могут требовать поддержки различных протоколов, работать в разных доменах или сетевых окружениях.

Данная статья сравнивает две этих системы очередей, акцентируя внимание на различиях в их поведении и реализации. Также статья даёт советы по выбору типа очереди, которая лучше подойдёт вашему приложению.
Читать дальше →
Total votes 24: ↑19 and ↓5+14
Comments0

Проблема чистого листа

Reading time3 min
Views54K


Одна из часто встречающихся проблем среди писателей, журналистов и прочих «работников пера» — это проблема «чистого листа». Это когда тебе нужно что-то написать, но всё, что на данный момент имеется — пустая страница. На которой нужно начать что-то писать. Мысли, вроде бы, есть, и время тоже есть, но написать первое слово, предложение — трудно. Кажется, что именно они определят весь последующий текст, сразу и напрямую повлияют на качество результата. И поэтому написать их — страшно.

Для программистов проблема «чистого листа» выглядит по-своему. Вот приходишь ты с утра на работу. Вчера был сложный, насыщенный день. Ты многое сделал, с последним багом разбирался полтора часа уже после окончания официального рабочего дня — но это нужно было сделать! Ведь ваш продукт делается по качественным современным процессам, у него есть обязательные ночные сборки и было очень важно исправить баг вовремя, чтобы сегодня тестировщики уже могли работать с новой версией продукта. Ты вчера успел, ты молодец, сборка прошла успешно — и это самое важное. Ведь запоротая по твоей вине сборка — это позор.

Но вот сегодня утром — всё как-бы спокойно. Вчерашний баг закрыт, продукт собирается нормально. Ты включаешь компьютер, логинишься — и перед тобой «чистый лист». Да, задач ещё много, но в данный момент ты ещё не приступил ни к одной. Тянет почитать почту, проверить новости. Ты ещё не «в контексте» работы. Вот уж когда начнёшь работать — тогда только держись! Но ещё ведь не начал. Ну и дальше стандартное «Хабр, новости, друг скинул ссылку на смешное видео, надо попить чаю, ой уже скоро обед» и т.д.

Что же делать?
Читать дальше →
Total votes 122: ↑110 and ↓12+98
Comments59

Почему нам необходима рефлексия в C++1y

Reading time4 min
Views17K
Программам необходимы данные. Программы выдают лишь настолько хороший результат работы, насколько полны и валидны были входные данные. Для некоторых программ входными данными являются обычные файлы или полученная из сети информация (пример — ваш браузер). Другие программы оперируют исходными кодами. Эти вторые «мета-программы» тоже нуждаются в данных. Чем они будут качественнее — тем качественнее будет и результат.

Что же за данные мы «скармливаем» таким программам? Ну, в С++ более важным чем «что?» является вопрос «когда?» (помните Морфеуса?). Программа на С++ это всего-лишь последовательность битов, которые компилятор пытается прочитать и понять. И вот в процессе этого «понимания» компилятор преобразует код на С++ в машинные инструкции и (что особенно интересно!) выполняет некоторую часть кода вашей программы. Да, мы говорим о мета-программировании на этапе компиляции.

Возвращаемся к вопросу «что?». Мы хотим иметь доступ ко всем сущностям, которые только теоретически могут быть доступны на этапе компиляции: типы, члены классов, функции, аргументы, пространства имён, номера строк кода, имена файлов — и всё это хорошо бы иметь в «чистом виде», без каких-либо странных препроцессорных хаков или использования сторонних утилит. Кроме того, хорошо бы получить и менее очевидные вещи: информацию о конвертируемости одних типов в другие, отношениям наследования и агрегации, дружественных классах и функциях и т.д.

Компилятор языка С++ уже имеет всю эту информацию! Но, к сожалению, не в доступной для мета-программирования форме. Получается странная такая ситуация — мы можем выполнить кое-какой код на этапе компиляции — но вот большинства данных у нас нет. Ну и здесь было бы логично задаться вопросом «А как же мы можем эти данные получить?».
Читать дальше →
Total votes 37: ↑31 and ↓6+25
Comments73

Интервью с Джеффри Рихтером на конференции Microsoft SWIT 2014

Reading time11 min
Views11K


27-28 марта в Киеве прошла конференция Microsoft SWIT 2014. В течение двух дней разработчики и ИТ-менеджеры могли увидеть и услышать большое количество выступлений от докладчиков со всего мира.

Самое главное внимание, конечно же, привлекли доклады Джеффри Рихтера. Джеффри – большой авторитет для многих разработчиков, эксперт в технологии .NET и владелец компании Wintellect. У меня состоялось интервью с ним, часть вопросов в котором была задана читателями Хабра. Проговорили мы почти час, кому интересно — добро пожаловать под кат.

(Если вам кажется, что вы этот топик где-то уже видели раньше, то нет, то было одно интервью, а это — другое).
Читать дальше →
Total votes 37: ↑36 and ↓1+35
Comments22

Плагин к Sublime Text для публикации статей на Хабр

Reading time6 min
Views14K


Для написания статей на Хабр я пользуюсь текстовым редактором Sublime Text. Почему это хороший редактор на Хабре уже много раз писали (например тут). Есть, однако, при написании статьи момент, когда её нужно переносить для публикации на Хабр, ну, знаете: Хабр->Добавить пост->Название, хабы, текст (Ctrl+C/Ctrl+V), метки, предпосмотр. В этот момент оказывается, что как-то текст с картинками сверстался на Хабре некрасиво, начинаются правки. Править в браузере? Неудобно и небезопасно. Править в Sublime и постоянно копипастить? Неудобно и надоедает.

Поэтому я сделал для себя небольшой плагин к Sublime, который умеет взаимодействовать с Хромом и Хабром, перекидывая по хоткею в Sublime написанный текст в редактор на странице создания нового топика с автоматическим нажиманием кнопки «Предпросмотр». Это позволяет писать статью в Sublime и в одно нажатие видеть результат её отображения на Хабре.

Под катом мы научимся писать плагины к Sublime и разберёмся как из питоновского кода взаимодействовать с Хромом, используя его протокол удалённой отладки. Полный код плагина на GitHub прилагается.
Читать дальше →
Total votes 69: ↑66 and ↓3+63
Comments20

Вопросы Джеффри Рихтеру

Reading time1 min
Views11K
27-28 марта в Киеве пройдёт конференция Microsoft Swit. 2 дня технических докладов, несколько десятков спикеров, мастер-классы и практические сессии для разработчиков.

imageОдним из самых интересных докладчиков будет Джеффри Рихтер — автор популярных книг «CLR via C#. Программирование на платформе Microsoft .NET Framework на языке C#», «Windows для профессионалов. Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows.» и других. Джеффри — соучредитель компании Wintellect, архитектор, консультант компаний Intel и Microsoft, автор колонки .NET в журнале MSDN.

На конференции он выступает с двумя докладами:
  • Windows Store Apps Process Model
  • Performing Asynchronous I/O Bound Operations

В перерывах между докладами у меня запланировано интервью с Джеффри, поэтому я предлагаю читателям Хабра задавать в комментариях к этому топику интересующие их вопросы и голосовать за вопросы друг друга. Вопросы, набравшие максимум голосов, непременно будут заданы Рихтеру. Ответы — отдельной статьей на Хабре.
Читать дальше →
Total votes 34: ↑26 and ↓8+18
Comments19

Баги реализации стандарта С++11 в Visual Studio 2012, которые были исправлены в Visual Studio 2013

Reading time9 min
Views21K

В этой статье будет рассмотрен ряд багов в реализации стандарта С++11, которые имелись в Visual Studio 2012 и были исправлены в Visual Studio 2013. Таким образом мы теперь можем использовать С++11 так, как в теории предполагается его использовать. Если для обхода багов VS2012 вам пришлось понаписывать «костылей» — теперь их можно убрать.

К сожалению, не все баги были исправлены, кое-что мигрировало из VS2012 в VS2013, а также появились новые баги. Под катом вы найдёте детальный разбор текущего состояния дел.
Читать дальше →
Total votes 66: ↑60 and ↓6+54
Comments20

Хуки — это просто (часть 2)

Reading time4 min
Views19K
image

Некоторое время назад я писал вводную статью о хуках (что это, зачем нужно, Hello world). Статья задумывалась простой, минималистичной и, вроде бы, такой и получилась. Единственный упрёк, который я услышал в комментариях — «Зачем же брать библиотеку Microsoft Detours, которая для коммерческого использования стоит 10 000$ ?». Замечание справедливое. В этой статье я приведу тот же пример с использованием другой библиотеки ценой примерно в 20 раз меньше (что уже вполне себе в рамках разумного) — madCodeHook.

Для лучшего понимания данной статьи рекомендуется сначала прочитать первую часть.
Читать дальше →
Total votes 25: ↑23 and ↓2+21
Comments12

Шпаргалка по С++11 для печати на кружке

Reading time1 min
Views47K


Вот захотелось мне такое сделать и я сделал.
Картинка под спойлером


Полноразмерная картинка (на случай если Хабр пережмёт картинку под спойлером). Подходит для печати на стандартной кружке, площадь поверхности 20 х 8.8 см, 300 dpi (ребята в магазине сувениров сказали, что это стандарт).
Шпаргалка, послужившая основой

P.S. Да, я в курсе, что у меня не вышло вместить 1300-cтраничный стандарт на одну кружку. В следующий раз точно получится, я уверен.
Total votes 133: ↑119 and ↓14+105
Comments42

Главное — доверие

Reading time2 min
Views135K
Сегодня утром в курилке я слышал очередной спор о биткоине. Ну, знаете, как обычно:
— Это деньги!
— Нет, фикция!
— Экономика будущего!
— Пирамида!
— Посмотри на курс!
— Ничего не стоят!
и т.д. Сам уже не вмешивался, просто слушал. Рассуждают люди, спорят. Ну, ок.

А потом я пошел в банк. В настоящий банк. Там где на входе настоящие охранники, в окошках — настоящие кассиры, которые принимают и выдают настоящие деньги. Мне нужно было снять деньги с депозита. Примерно в размере моей полугодовой зарплаты. Знаете, что для этого понадобилось? Может быть мой пасспорт? Кодовое слово? Карта банка? Пин-код к ней? Пароль на онлайн банкинг? Смс с подтверждением операции? Нет. Произошел вот такой диалог:
— Ваш номер телефона?
— ХХХХХХХХХ
— У Вас на счету N лежит сумма M. Вы её всю хотите снять?
— Да
— Вот квитанция, проходите в кассу

В кассе мне выдали деньги, опять таки без всяких требований удостоверить личность. Да, попросили расписаться на чеке, но подпись ни с чем не сверяли. Я вышел из банка с деньгами в руках. Но ощущение было такое, как-будто вышел без них.
Читать дальше →
Total votes 242: ↑158 and ↓84+74
Comments212

Нужно ли читать код используемых библиотек?

Reading time4 min
Views20K
В какое прекрасное время мы живём! Вот пишешь ты программу и понадобилась тебе библиотека для чего-нибудь — она точно найдется! Многие библиотеки лежат в opensource и даже распространяются по приятным лицензиям типа LGPL, взял — и решил проблему. Делов-то: способ подключения описан в readme, библиотека предоставляет красивые интерфейсы, демка есть (она даже компилируется и работает). Вообще ООП со всеми его идеями абстракций, интерфейсов, инкапсуляции внутренних данных — мощнейшая штука (тут без иронии).

Но давайте подумаем, где и когда начинается «абстракция». Вот, например, есть у меня автомобиль, на котором я раз в неделю езжу в супермаркет. В этом случае он для меня вполне себе абстракция уровня «руль, три педали и пара рычажков», предоставляющая нужный мне функционал. Причём я могу пользоваться им долгие годы, не особо задумываясь что там под капотом — двигатель или волшебные гномы, зачем-то пьющие бензин и крутящие колёса. Но если я работаю автомехаником, конструктором автомобилей ну или попросту профессиональным водителем — я уже не могу позволить себе смотреть на машину столь «свысока», знать её внутреннее устройство — это моя работа. Покупатель молока в магазине может вообще ни разу в жизни не видеть живую корову, но вот фермер, который эту корову выращивает, просто обязан знать всё о её здоровье\содержании\питании\уходе\дойке. Ну и т.д. Есть чёткое разделение на «пользователей» продукта и его «создателей». Первые могут позволить себе не задумываться о деталях, вторые — нет.


Если вы дочитали аж до этого места, с большой долей вероятности вы — программист. Ещё раз, вы — человек, который профессионально занимается созданием компьютерных программ. Который, наверное, отвечает за свой труд и, возможно, считает себя неплохим специалистом. И вы считаете возможным взять чужую библиотеку и, ознакомившись с ней на уровне её интерфейса, использовать в своём продукте?
Читать дальше →
Total votes 66: ↑55 and ↓11+44
Comments41

Доступ к контенту Modern-приложения на HTML\JS из Desktop-приложения под Windows 8

Reading time4 min
Views6.5K
Иногда бывает нужно из одной программы добраться до содержимого другой программы. Ну, например, получить из неё какой-нибудь контент, или автоматизировать действия. В случае классических приложений Windows эта проблема решается весьма просто — находим родительское окно через FindWindow, далее, зная его HWND, можем перечислить дочерние окна и элементы управления на них. А тут уже полная свобода — можем получить текст, написанный на этих элементах, изменить их размеры и положение, отправить сообщения для эмуляции клика мышью или набора текста с клавиатуры, даже удалить имеющиеся элементы и создать новые.

Но для Modern-приложений всё иначе. Давайте возьмём, к примеру, приложение «Погода» из стандартного набора Windows8. Допустим, мы открыли его в боковой панели и хотим как-то узнать из нашего обычного (Desktop) приложения, а какую же оно показывает температуру. Если посмотреть на окно «Погоды» с помощью Spy++ мы увидим родительское окно типа Windows.UI.Core.CoreWindow и вложенное в него окно Web Platform Embedding. А значит перед нами Modern-приложение написанное на HTML\Js и живущее внутри встроенного компонента браузера. То есть вышеописанные манипуляции с Windows-контролами не имеют смысла — их в этом окне попросту нет, поскольку всё его содержимое рендерится целиком.

Но давайте же всё-таки попробуем вытащить из него текущую температуру.
Читать дальше →
Total votes 20: ↑15 and ↓5+10
Comments4

Information

Rating
Does not participate
Location
Украина
Registered
Activity