Как узнать заголовок окна windows 10

Обновлено: 03.07.2024

Если приложение выполняется в окне рабочего стола, можно настроить заголовки окон с учетом индивидуальных особенностей приложения. API-интерфейсы для настройки заголовка окна позволяют указать цвета элементов заголовка окна или расширить содержимое приложения до области заголовка окна и получить над ним полный контроль.

Степень настройки заголовка окна

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

Для простой настройки цвета можно установить свойствам ApplicationViewTitleBar значения в соответствии с цветами, в которые требуется окрасить элементы заголовка окна. В этом случае система продолжает управлять всеми остальными аспектами заголовка окна, такими как отрисовка названия приложения и определение перетаскиваемых областей.

Другой вариант — скрыть заголовок окна по умолчанию и заменить его собственным содержимым XAML. Например, в области заголовка окна можно разместить текст, кнопки или пользовательские меню. Кроме того, этот вариант следует использовать для расширения акрилового фона до области заголовка окна.

простая настройка цвета доступна для Windows приложений с помощью XAML, DirectX и HTML. полная настройка доступна только для Windows приложений, использующих XAML.

Простая настройка цвета

Если вам требуется настроить только цвета заголовка окна, а не выполнить более сложную задачу (такую как размещение вкладок в заголовке окна), можно настроить свойства цветов в ApplicationViewTitleBar для окна приложения.

В этом примере показано, как получить экземпляр ApplicationViewTitleBar и настроить его свойства цветов.

Этот код можно разместить в методе OnLaunched приложения (App.xaml.cs) после вызова Window.Activate или на первой странице приложения.

Набор средств сообщества Windows предоставляет расширения, которые позволяют задать эти свойства цветов в XAML. Дополнительные сведения см. в документации по набору средств сообщества Windows.

При настройке цветов заголовка окна следует учитывать несколько особенностей.

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

Полная настройка

При выборе полной настройки строки заголовка клиентская область приложения расширяется, чтобы охватить все окно, включая область заголовка окна. Вы несете ответственность за прорисовку и обработку ввода для всего окна, за исключением кнопок заголовка, которые перемещаются поверх холста приложения.

Чтобы скрыть заголовок окна по умолчанию и расширить собственное содержимое до области заголовка окна, задайте свойству CoreApplicationViewTitleBar.ExtendViewIntoTitleBar значение true.

В этом примере показано, как получить CoreApplicationViewTitleBar и задать свойству ExtendViewIntoTitleBar значение true. Это можно сделать в методе OnLaunched приложения (App.xaml.cs) или на первой странице приложения.

Этот параметр сохраняется даже после закрытия и перезапуска приложения. Если в Visual Studio задать для ExtendViewIntoTitleBar значение true, то для возврата к значению по умолчанию следует явным образом задать значение false и запустить приложение, чтобы перезаписать сохраненный параметр.

Перетаскиваемые области

Перетаскиваемый область заголовка окна определяет, где пользователь может щелкнуть и перетащить, чтобы переместить окно вокруг (в отличие от простого перетаскивания содержимого на холст приложения). Чтобы указать перетаскиваемую область, необходимо вызвать метод Window.SetTitleBar и передать UIElement, определяющий перетаскиваемую область. (UIElement часто представляет собой панель, содержащую другие элементы.)

Ниже показано, как установить сетку с содержимым в качестве перетаскиваемой области заголовка окна. Этот код добавляется в код XAML и код программной части для первой страницы приложения. Полный код см. в разделе Пример полной настройки.

По умолчанию некоторые элементы пользовательского интерфейса, такие как Grid, не участвуют в проверке нажатия, если они не имеют фонового набора. Для сетки AppTitleBar в примере ниже, чтобы разрешить перетаскивание, необходимо установить для фона значение Transparent .

Класс UIElement ( AppTitleBar ) входит в состав XAML для приложения. Можно объявить и задать строку заголовка в корневой странице, которая не изменяется, или объявить и задать область заголовка на каждой странице, к которой приложение может перейти. При настройке на каждой странице следует убедиться, что перетаскиваемая область остается согласованной по мере навигации пользователя по приложению.

Можно вызвать SetTitleBar для переключения на новый элемент заголовка окна во время работы приложения. Также можно передать значение null как параметр для метода SetTitleBar, чтобы вернуться к поведению перетаскивания по умолчанию. (Дополнительные сведения см. в разделе "Перетаскиваемая область по умолчанию".)

Указанная перетаскиваемая область должна быть доступной для проверки нажатия, то есть для некоторых элементов может потребоваться настроить прозрачную кисть фона. Дополнительные сведения см. в примечаниях по VisualTreeHelper.FindElementsInHostCoordinates.

Например, если определить сетку как перетаскиваемую область, установите значение Background="Transparent" , чтобы сделать ее перетаскиваемой.

Эта сетка не является перетаскиваемой (но видимые элементы в ней можно перетаскивать): <Grid x:Name="AppTitleBar"> .

Эта сетка выглядит так же, но является полностью перетаскиваемой: <Grid x:Name="AppTitleBar" Background="Transparent"> .

Перетаскиваемая область по умолчанию

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

Если перетаскиваемая область указана, система сжимает перетаскиваемую область по умолчанию до небольшой области размером с кнопку заголовка, расположенную слева от кнопок заголовка (или справа от них, если кнопки заголовка находятся в левой части окна). Таким образом, в окне всегда присутствует согласованная область для перетаскивания.

Системные кнопки заголовка

Размеры и расположение области элементов управления заголовка определяются классом CoreApplicationViewTitleBar, поэтому его можно учитывать в макете пользовательского интерфейса заголовка окна. Ширина зарезервированной области с каждой стороны задается свойствами SystemOverlayLeftInset и SystemOverlayRightInset, а ее высота задается свойством Height.

Под областью элементов управления заголовка, определенной этими свойствами, можно отображать содержимое, например фон приложения, но не следует размещать здесь элементы пользовательского интерфейса, с которыми пользователь должен взаимодействовать. Эта область не принимает входные данные, так как ввод для элементов управления заголовка обрабатывается системой.

Интерактивное содержимое

Интерактивные элементы управления, такие как кнопки, меню или поле поиска, можно разместить в верхней части приложения, чтобы они отображались в строке заголовка. Однако существует несколько правил, которые необходимо выполнить для того, чтобы интерактивные элементы получали входные данные пользователя.

  • Чтобы определить какую-либо область как перетаскиваемую область заголовка окна, необходимо вызвать метод SetTitleBar. Если этого не делать, система устанавливает перетаскиваемый по умолчанию область в верхней части страницы. Затем система будет обрабатывать все входные данные пользователя в этой области и не позволит входным данным достичь элементов управления.
  • Разместите интерактивные элементы управления поверх перетаскиваемой области, определенной вызовом SetTitleBar (с более высоким значением z-порядка). Не делайте своих дочерних элементов управления потомками UIElement, передаваемыми в Сеттитлебар. После передачи элемента методу SetTitleBar система считает его частью системного заголовка окна и направляет весь ввод указателя в этот элемент.

В данном случае элемент TitleBarButton имеет более высокое значение z-порядка, чем AppTitleBar , поэтому он получает ввод пользователя.

Прозрачность кнопок заголовка

Если задать свойству ExtendViewIntoTitleBar значение true, можно сделать фон кнопок заголовка прозрачным, чтобы сквозь него было видно фон приложения. Как правило, для полной прозрачности следует установить для фона значение Colors.Transparent. Для частичной прозрачности настройте альфа-канал для значения Color, заданного свойству.

Следующие свойства ApplicationViewTitleBar могут быть прозрачными:

  • ButtonBackgroundColor
  • ButtonHoverBackgroundColor
  • ButtonPressedBackgroundColor
  • ButtonInactiveBackgroundColor

Цвет фона кнопки не применяется к кнопке "Закрыть" в состояниях наведения и нажатия. В этих состояниях для кнопки "Закрыть" всегда используется определенный системой цвет.

Все остальные свойства цвета продолжат игнорировать альфа-канал. Если свойству ExtendViewIntoTitleBar задано значение false, все свойства цвета ApplicationViewTitleBar всегда игнорируют альфа-канал.

Полноэкранный режим и режим планшета

когда приложение запускается в полноэкранном режиме или планшетном режим (только Windows 10), система скрывает панель заголовка и кнопки элемента управления субтитрами. Однако пользователь может вызвать строку заголовка, чтобы она отображалась как наложение поверх пользовательского интерфейса приложения. Можно обработать событие CoreApplicationViewTitleBar.IsVisibleChanged, чтобы получать уведомление при скрытии или вызове заголовка окна и отображать или скрывать пользовательское содержимое заголовка окна по необходимости.

В этом примере показано, как обработать событие IsVisibleChanged, чтобы отобразить или скрыть показанный ранее элемент AppTitleBar .


Я хочу найти заголовок окна, которое в настоящее время активно (с фокусом), используя Window Script Host (WSH), потому что я хочу, чтобы мой WSH-скрипт работал только с Sendkeys, если желаемое окно активно.

Примечание. * Я не в состоянии использовать альтернативу, т.е. активировать желаемое окно перед вызовом sendkeys.

Любая помощь приветствуется.

Короткий ответ: Вы не можете. По крайней мере, без написания COM-оболочки для соответствующих вызовов Windows API.

Разве ты не можешь просто использовать AppActivate и проверить результат?


Длинный ответ: Чтобы получить заголовок активного окна, необходимо вызвать Windows API GetWindowText функция и передать GetForegroundWindow() ручка. VBScript и Windows Script Host не поддерживают вызовы Windows API, поэтому вам нужно написать COM-оболочку для этих функций, которую затем можно будет использовать в своем скрипте. Вот примеры:

Получить текущий заголовок активного окна в C

Вы можете создать COM-объект с помощью GetForegroundWindow и GetWindowText.

Поместите следующие строки в wso.cls и сохраните папку wso на рабочем столе.

Затем создайте файл bat в той же папке с именем wso.bat.

Для использования в vbs после запуска файла bat.

Используемые здесь идентификаторы GUID относятся к этому проекту. Не используйте их для других целей.

Больше информации о том, что мы делаем

Если вам необходимо выполнить установку для каждого пользователя, используйте regasm для создания файла regfile вместо его регистрации. Затем измените все ссылки на HKCR к HKCU\Software\Classes . Затем слейте с regedit /s regfile.reg .

Чтобы переместить файл, вам нужно запустить Regasm в новом месте. См. Команду в файле bat.

Разумеется, будет размещено на сайте MS для точных исторических целей.

Это обновленная версия для использования. Предыдущий ответ минимально необходим для его работы.

Это также заменяет ответ здесь (активировать приложение между несколькими экземплярами Internet Explorer), поскольку он не работал для Windows 7 и более поздних версий из-за того, что sendmail является зарезервированным именем в этих ОС.

Пакетный файл должен работать без ошибок.

Первая команда делает dll из файла cls. Он скажет Компиляция успешно. Он ожидает, что файлы будут в папке с именем wso на вашем рабочем столе.

Вторая команда регистрирует его для каждой машины. Для этого вы должны быть администратором. Если вы не являетесь администратором, вы должны создать файл reg и изменить все HKEY_CURRENT_ROOT на HKEY_CURRENT_USER \ Software \ Classes.

Чтобы сгенерировать рег-файл

После редактирования wso.reg объедините его с

И вам нужно прочитать результаты команд.

Вот запущенный скрипт, показывающий hwnd, PID и заголовок окна (и код ошибки). Обратите внимание на то, что при запуске скрипта нет активного окна около двух секунд (окна ждут, пока ваша программа создаст окно, чтобы оно стало активным. Оно ждет только 2 секунды). Обычно при запуске программы, но также и в другое время на короткое время не будет активного окна. Вы должны поймать это. Вот такой сценарий.

И вот как это выглядит при запуске с CScript в командной строке.

----РЕДАКТИРОВАТЬ----

Если вы используете блокнот для записи, скопируйте и вставьте в текстовый блокнот, чтобы проверить разрывы строк. Блокнот полностью игнорирует и скрывает символы возврата каретки, но другие программы этого не делают. Блокнот ищет только перевод строки. При копировании из документации на основе браузера, такой как веб-страницы и справочные системы, иногда случайные символы возврата каретки незаметно вставляются в блокнот.

С выходом Windows 10 компания Microsoft вернула понятие окна в его первозданном виде для приложений из Windows Store. Теперь, используя привычные кнопки в правом верхнем углу, можно менять размер, сворачивать/разворачивать и закрывать окно, независимо от типа приложения. Самое интересное, что Microsoft не отказалась от своего изначального направления – ориентации на контент. Эта философия не универсальна, но она хорошо подходит для целого пласта приложений. Согласитесь, если вы делаете игру или читалку, то стандартный заголовок с цветами заданными автоматически может слегка подпортить дизайн приложения. Поэтому новые широкие возможности настройки заголовка в приложениях универсальной платформы Windows (UWP) стали безусловным плюсом.




1. Скрываем заголовок. Как раз для тех случаев, когда в приложении необходимо полное погружение в контент и заголовок не нужен, существует функция сокрытия заголовка и перевода приложения в полноэкранный режим.

Сделать это крайне просто:


Обратите внимание, что функция TryEnterFullScreenMode возвращает значение Boolean, что позволит убедится в успехе перехода в полноэкранный режим, который не всегда гарантирован.

Данный код лучше всего использовать в случае, когда необходимо перевести приложение в полноэкранный режим и обратно в ответ на действия пользователя. В случае, если требуется запуск приложения в полноэкранном режиме, нужно поместить в начале метода OnLaunched приложения следующий код:


Приятное дополнение такого подхода в том, что приложение сразу запустится в полноэкранном режиме, включая экран-заставку, а также запомнит данное правило для последующих запусков.

На заметку: для унификации поведения UWP-приложений и WinRT, при переходе в полноэкранный режим можно увидеть строку заголовка если подвести курсор мыши к верхнему краю окна. Это будет полезно при проектировании приложения.

2. Тонкая настройка. На самом деле, возможность полностью заменить стандартный заголовок на свой без необходимости заботится о стандартном поведении вроде перетаскивания окна за заголовок появилась впервые. По сути это значит, что теперь можно разместить на месте заголовка все, что придет в голову. Данный способ позволяет заменить только ту часть заголовка, которая содержит иконку и наименование приложения. Часть с кнопками управления окном заменить на собственную не получится.

Если погрузиться в этот функционал, слово «замена» не совсем подходит. Скорее мы просим платформу скрыть стандартный заголовок и говорим какой элемент в XAML будет выполнять его функции.

Делается всего двумя строчками кода:


И вот здесь начинается самое интересное. Указанный элемент может не только сильно отличаться от привычного заголовка, но и располагаться в любом месте окна. Вторая строчка кода не поместит его в нужное место и не даст правильных размеров, она всего лишь уведомит платформу о том, что по мнению разработчика является заголовком. Единственное, что получится в итоге – это возможность перетаскивать окно нажатием на данный элемент, без необходимости дополнительных действий в коде.

Все это крайне важно понимать и помнить, что персонализация никогда не должна идти в разрез с привычками пользователя. Помня это нужно позаботится о том, чтобы заголовок был размещен на месте стандартного заголовка и имел соответствующую высоту и цвет.

Как это выглядит в XAML:


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

Во-первых, если сообщить платформе о том, что нужно использовать собственный заголовок, она отдаст ранее не доступную часть окна под макет, а значит все содержимое сдвинется вверх. Учитывая это, нужно позаботиться о том, чтобы в верхней части макета был только элемент заменяющий стандартный заголовок, а также убедиться, что ничто не перекрывается кнопками управления окном. В XAML выше корневой Grid отдает под заголовок одну строку высотой в 32 единицы. Здесь кроется еще один подвох – высота кнопок управления окном зависит от настроек Windows и равна 32 только при стандартных настройках, поэтому уважающий своего пользователя разработчик позаботится об отслеживании изменения настроек и отреагирует на это. В статье MSDN, посвященной методу Window.SetTitleBar можно узнать подробнее о том, как это сделать.

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

Вам может показаться, что обойти предыдущее ограничение можно просто убрав строчку кода:


Но, платформа просто скроет стандартный заголовок, а необходимый элемент в качестве заголовка не установит. Тогда можно просто определить участки, за которые окно можно перетаскивать и добавить нужные действия в коде? Но, нет, все не так просто. На самом деле, если не вызвать метод SetTitleBar, то все что находится в макете окна попадет на место бывшего заголовка, потеряет возможность отлавливать ввод и будет вести себя как заголовок. Для чего же тогда нужна эта строчка кода? Она нужна для того, чтобы точно определить места, ведущие себя как заголовок. Если необходимо поместить туда кнопку, то она должна быть за пределами элемента CustomTitleBar.

Перепишем наш XAML следующим образом:


А в коде окна будет написано следующее:


В качестве примера, помещаем в заголовок кнопку разворачивания окна в полноэкранный режим. Несмотря на то, что смысла в такой кнопке не так много, о чем станет понятно ниже, данный пример вполне подходит для осваивания тонкостей работы с заголовком.

Теперь, в тот момент, когда переводим окно в полноэкранный режим, заголовок никуда не исчезает. CustomTitleBar остается на своем месте, но при этом теряет функции заголовка. При наведении курсора мыши в верхнюю часть экрана, сверху появляются кнопки управления окном, которые позволяют вернуться в обычный режим. Если для переходя в полноэкранный режим и скрытия своего заголовка, достаточно отреагировать на событие кнопки, то для того, чтобы узнать, что окно вернулось в обычный режим, придется подписаться на событие изменения размеров окна.

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


3. Смена цвета заголовка. Описанный выше метод крайне интересен и достаточно гибок, но в большинстве сценариев будет излишне создавать свой элемент и усложнять жизнь его правильной настройкой. Намного проще просто перекрасить элементы системного заголовка в цвета приложения. Набор параметров, отвечающих за цвета заголовка, достаточно широк, чтобы достичь гармонии с остальным приложением.

Для сокращения кода можно получить ссылку на текущий TitleBar и далее работать с ней:


Рассмотрим все свойства, отвечающие за цвета элементов заголовка:


Поэкспериментировав с каждым из этих свойств, вы можете добиться гармоничного дизайна и ваше приложение будет успешно отвечать философии ориентации на контент.

Также, возможно использовать свойства, отвечающие за цвета кнопок для адаптации их под ваш персональный заголовок, который можно создать, используя способ, описанный выше.


На этом описание настройки заголовка в приложениях UWP можно завершить. Стоит заметить, что все выше сказанное актуально для приложений, запускаемых на рабочем столе. Если приложение выполняется в режиме планшета или на мобильном устройстве, то заголовок в нем отсутствует.

Что такое окна в Windows 10. Если вы знаете английский язык, то уже давно поняли, что название операционной системы Windows , переводится на русский, как Окна. И это неспроста. Дело в том, что все процессы, которые мы запускаем на компьютере с операционной системой Windows, происходят в графическом интерфейсе в виде окна. Благодаря этому работать во всех программах стало намного легче и удобнее. Достаточно запомнить самые необходимые элементы таких окон, и вы быстро сможете сориентироваться даже в незнакомой для вас программе.

Окна в Windows 10

Урок 14. Окна в Windows 10

Основные элементы окон в Windows 10

Давайте рассмотрим основные элементы окон на примере программы Microsoft Word, которая наверняка есть на компьютере у всех вас.

У всех окон, которые вы открываете на своем компьютере, есть основные элементы:

  1. Строка заголовка
  2. Кнопка «Свернуть»
  3. Кнопка «Развернуть »
  4. Кнопка «Закрыть»
  5. Вертикальная прокрутка
  6. Горизонтальная прокрутка
  7. Строка состояния
  8. Рабочая область программы

Предназначение элементов окон Windows 10

Строка заголовка есть в большинстве программ. В этой строке обычно пишется название документа (файла), который открыт в данный момент.

Кнопка «Свернуть окно» позволяет быстро свернуть окно в Панель задач. Окно не будет закрыто. Просто оно исчезнет с Рабочего стола, пока вы его не вызовете вновь. Для этого достаточно кликнуть левой кнопкой мыши по иконке этой программы в Панели задач, и окно вновь развернется на весь экран.

Кнопка «Развернуть» позволяет развернуть окно программы на весь экран. Так же развернуть окно можно, дважды кликнув правой кнопкой мыши по строке заголовка. Если это же действие повторить в уже полностью открытом окне, то оно примет тот вид, который был до этого. Если в окне нет кнопки «Развернуть», то такой номер у вас не получится.

Если окно не раскрыто на весь экран, то вы можете раздвигать его границы при помощи мышки. Для этого наведите указатель мыши на любую границу окна, или на любой его уголок, и когда указатель мыши измениться на двунаправленную стрелку, нажмите на левую кнопку мыши , и не отпуская кнопки, перетяните указатель мыши в любом направлении.

Но опять же, такой способ подходит только для тех окон, у которых есть кнопка «Развернуть».

Кнопка «Закрыть» закрывает окно программы, а так же закрывается и сама программа. В программах настройки операционной системы может присутствовать только эта кнопка, т.к. кнопки сворачивания и разворачивания окон там не нужны.

Полоса прокрутки может быть вертикальной или горизонтальной. Они обычно появляются только тогда, когда содержимое окна не умещается на одном экране. Для того, чтобы просмотреть содержимое окна, которое находится за пределами видимости, необходимо захватить левой кнопкой мыши за эту полосу прокрутки и не отпуская переместить в нужном направлении.

Если на вашей мышке есть колесико, то для вертикальной прокрутки лучше воспользоваться для этой цели им. Нужно просто установить курсор мыши в окно и просто вращать колесико в нужном направлении. Такой способ пролистывания страницы называется скроллингом.

Строка состояния носит информативный характер и бывает не у всех окон.

Рабочая область окна у всех программ разная. Обычно в ней находятся инструменты запущенной программы.

Секреты окон Windows 10

И напоследок еще пару секретов с окнами.

  • Окна можно не только сворачивать и разворачивать, но можно их и передвигать. Для того, чтобы переместить окно, необходимо навести курсор мыши на строку заголовка, нажать левую кнопку мыши, и не отпуская ее переместить мышку. Вместе с указателем мыши будет перемещаться и окно. Как только вы отпустите кнопку мыши, так окно и останется в том месте, где вы ее отпустили.
  • Можно открыть несколько окон одной или разных программ, но только то окно, которое находится на переднем плане, будет активным. Для того, чтобы сделать активным другое окно, вам необходимо кликнуть левой кнопкой мыши по любой видимой части другого окна, или кликнуть по иконке другого окна на Панели задач.
  • Если захватить окно за строку заголовка и переместить его к верхней границе экрана, то окно раскроется на весь экран.
  • Если перетащить окно к левому или правому углу экрана, то оно раскроется ровно на половину экрана.
  • Если у вас открыто много окон, а вам необходимо только одно из них, которое в данную минуту активно, т.е. находится поверх всех окон, то захватите мышкой активное окно за строку заголовка, и потрясите его (быстро поводите мышкой из стороны в сторону. Все окна свернуться в Панель задач, а останется только активное окно. Повторное встряхивание вернет все окна в исходное положение.
  • Можно разместить все открытые окна на рабочем столе одновременно. Для этого откройте окна программ или одной программы, затем кликните правой кнопкой мыши внизу рабочего стола на свободном месте Панели задач. Откроется контекстное меню, в котором вы должны кликнуть по ссылке «Расположить окна каскадом», «Расположить окна стопкой», или «Расположить окна рядом». Попробуйте все три варианта и посмотрите, как это будет выглядеть.

Вот такие функции выполняют окна в Windows 10. Почти все то же самое можно проделывать с окнами и в других операционных системах Windows.

Читайте также: