Как эмулировать геймпад на клавиатуре

Обновлено: 05.07.2024

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

  • В Windows оверлей Steam подключается к традиционным API ввода геймпада, таким как XInput, DirectInput, RawInput и Windows.Gaming.Input, и внедряет эмулированное устройство контроллера Xbox. В macOS и Linux вход с эмулируемого контроллера обеспечивается драйвером.
  • Контроллер будет отображаться в вашей игре как контроллер Xbox, что означает, что некоторые из контроллеров с дополнительными входами будут дублироваться, например: щелчок трекпада PlayStation и кнопка параметров, сопоставленная с кнопкой «Пуск» XInput.
    < /li>
  • В дополнение к обычному вводу с геймпада можно привязать входы гироскопа Switch, PlayStation и контроллера Steam к эмуляции мыши и обеспечить управление движением. Это работает только в играх с одним локальным игроком, потому что есть только один ввод мыши, а также зависит от того, что игра принимает одновременный ввод мыши и геймпада. Если вас интересуют эти функции без этих предостережений, рассмотрите возможность добавления Steam Input API
  • Вы можете запросить текущий тип контроллера в Steam, чтобы отобразить специальные глифы устройства, но вы ограничены типами, поддерживаемыми вашим текущим SDK Steamworks. Если вас интересует перспективная поддержка глифов, интегрируйте Steam Input API
  • Возможно, игроки используют набор входных данных Steam даже для соответствующих вашими контроллерами, поскольку Steam Remote Play использует систему, чтобы выбрать определенный ввод во время выпуска, а также предоставляет часть пользователей также выбрала входной пароль Steam для перенастройки своих контроллеров в библиотеке Steam. В целом примерно четверть всех сеансов работы с контроллером в Steam в 2020 году использовали ввод Steam, включая почти половину всех сеансов работы с контроллером PlayStation.

Показ иллюстраций для конкретных устройств

Мы поддерживаем несколько способов получения глифов для конкретных устройств с помощью эмуляции геймпада Steam Input — один для игр, которые могут загружать изображения во время выполнения и рассчитаны на будущее (это означает, что при обновлении Steam Input он будет работать без каких-либо обновлений игры). ) и два для игр, которым необходимо запечь изображения в свои активы или использовать те же стилизованные изображения из консольных портов своей игры. Into the Breach использует собственное изображение для контроллеров Xbox/Steam:

intothebreach_xbox.PNG

intothebreach_ps4.PNG

и контроллеры Nintendo Switch:

intothebreach_switchpro.PNG

Обратите внимание.

Отображение иконок Steam с защитой от изменений

// Инициализируйте интерфейс перед использованием отдельных функций - это нужно вызвать только один раз! SteamInput()->Init() // . // SteamAPI_RunCallbacks() будет вызывать функции RunFrame для любых инициализированных интерфейсов, // и большинство игр уже будут вызывать их периодически. Если вы этого не сделаете, // вам потребуется вручную обновить интерфейс ввода Steam SteamInput()->RunFrame(); // . // Замените XInputslot, который вы запрашиваете. Это число находится в диапазоне от 0 до 3 // Если вы используете RawInput для обнаружения устройств, прежде чем решить, какой API использовать, // см. раздел «Использование RawInput для обнаружения устройств».интервал nXinputSlot = 0; // Замените кнопку, которую вы запрашиваете для EXboxOrigin eXboxButtonToGetGlyphFor = k_EXboxOrigin_A; Кнопка EInputActionOriginOrigin = k_EInputActionOrigin_XBoxOne_A; // Если контроллер настроен через Steam Input - переводим кнопку InputHandle_t controller1Handle = SteamInput()->GetControllerForGamepadIndex( nXinputSlot ); if ( controller1Handle > 0 ) < // Допустимые дескрипторы не равны нулю, это контроллер, настроенный через Steam Input // Примечание: контроллеры, использующие Steam Input API, не будут возвращать дескриптор через GetControllerForGamepadIndex() buttonOrigin = SteamInput()- >GetActionOriginFromXboxOrigin(controller1Handle, k_EXboxOrigin_A); > else < // Действительные дескрипторы не равны нулю, это обычный контроллер Xbox // Продолжить использование исходной кнопки >// Значения EInputActionOrigin будут продолжать расти по мере добавления поддержки Steam, но это нормально, // потому что в этом примере мы получим изображения устройств из Steam, которые также могут предоставить новое изображение глифа // Получить изображение из клиента Steam const char *localGlyphPath = SteamInput()->GetGlyphForActionOrigin(buttonOrigin); printf("путь = %s\n", localGlyphPath); // "path = C:\Program Files (x86)\Steam\tenfoot\resource\images\library\controller\api\ps4_button_x.jpg" // Замените это на функцию из игры, которая превращает путь к файлу в полезный glyphTextureID = loadButtonGlyphTextureFromLocalPath(localGlyphPath);

Показ собственного рисунка – палитра глифов

// Инициализируйте интерфейс перед использованием отдельных функций - это нужно вызвать только один раз! SteamInput()->Init() // . // SteamAPI_RunCallbacks() будет вызывать функции RunFrame для любых инициализированных интерфейсов, // и большинство игр уже будут вызывать их периодически. Если вы этого не сделаете, // вам потребуется вручную обновить интерфейс ввода Steam SteamInput()->RunFrame(); // . // Замените слотом XInput, который вы запрашиваете. Это число находится в диапазоне от 0 до 3 // Если вы используете RawInput для обнаружения устройств, прежде чем решить, какой API использовать, // см. раздел «Использование RawInput для обнаружения устройств». интервал nXinputSlotIndex = 0; InputHandle_t inputHandle = SteamInput()->GetControllerForGamepadIndex( nXinputSlotIndex ); if ( inputHandle == 0 ) < // Действительные дескрипторы ввода не равны нулю, это обычный контроллер Xbox. >else < // Steam всегда будет возвращать значение перечисления, допустимое для вашей версии SDK. ESteamInputType inputType = SteamInput()->GetInputTypeForHandle(inputHandle); switch( inputType ) < case k_ESteamInputType_Unknown: printf("unknown!\n"); перерыв; case k_ESteamInputType_SteamController: printf("Контроллер Steam!\n"); перерыв; case k_ESteamInputType_XBox360Controller: printf("Контроллер Xbox 360!\n"); перерыв; case k_ESteamInputType_XBoxOneController: printf("Контроллер Xbox One!\n"); перерыв; case k_ESteamInputType_GenericXInput: printf("Универсальный XInput!\n"); перерыв; case k_ESteamInputType_PS4Controller: printf("Контроллер PS4!\n"); перерыв; >>

Демонстрация собственного рисунка — для каждой кнопки

// Инициализируйте интерфейс перед использованием отдельных функций - это нужно вызвать только один раз! SteamInput()->Init() // . // SteamAPI_RunCallbacks() будет вызывать функции RunFrame для любых инициализированных интерфейсов, // и большинство игр уже будут вызывать их периодически. Если вы этого не сделаете, // вам потребуется вручную обновить интерфейс ввода Steam SteamInput()->RunFrame(); // . // Замените слотом XInput, который вы запрашиваете. Это число находится в диапазоне от 0 до 3 // Если вы используете RawInput для обнаружения устройств, прежде чем решить, какой API использовать, // см. раздел «Использование RawInput для обнаружения устройств». интервал nXinputSlot = 0; // Замените кнопку, которую вы запрашиваете для EXboxOrigin eXboxButtonToGetGlyphFor = k_EXboxOrigin_A; Кнопка EInputActionOriginOrigin = k_EInputActionOrigin_XBoxOne_A; // Если контроллер настроен через Steam Input - переводим кнопку InputHandle_t controller1Handle = SteamInput()->GetControllerForGamepadIndex( nXinputSlot ); if ( controller1Handle > 0 ) < // Допустимые дескрипторы не равны нулю, это контроллер, настроенный через Steam Input // Примечание: контроллеры, использующие Steam Input API, не будут возвращать дескриптор через GetControllerForGamepadIndex() buttonOrigin = SteamInput()- >GetActionOriginFromXboxOrigin(controller1Handle, k_EXboxOrigin_A); //т. е. k_EInputActionOrigin_PS4_X > else < // Допустимые дескрипторы не равны нулю, это обычный контроллер Xbox // Продолжить использование исходной кнопки >// Steam продолжит добавлять источники действий, и будущие контроллеры превысят текущий диапазон // Если вы хотите проверить, вы можете сымитировать, что контроллеры Switch/PS5 не существуют, и изменить это на: // if (buttonOrigin >= k_EInputActionOrigin_XBox360_Reserved10) if (buttonOrigin >= k_EInputActionOrigin_Count) < // игра для этого происхождения! Я думаю, Steam добавил поддержку // нового контроллера.Давайте получим ближайшее значение, поддерживаемое SDK, который мы создали для buttonOrigin = SteamInput()->TranslateActionOrigin(k_ESteamInputType_Unknown, buttonOrigin); > // Замените это функцией из игры, которая возвращает ваше изображение для кнопки int glyphTextureID = getHardCodedButtonGlyphTexture( buttonOrigin );

Использование RawInput для обнаружения устройств

Настройка параметров Steamworks

Первый шаг — указать, какие контроллеры будут использовать Steam Input, в разделе «Подтверждение участия» в настройках Steamworks в меню «Приложение» -> «Steam Input». Для стандартной игры с поддержкой контроллера Xbox мы рекомендуем установить все флажки, кроме Xbox:

steamworks_steam_input_optin_settings.jpg

Если в вашей игре есть поддержка джойстика или гоночного руля, снимите флажок для контроллеров Generic/DirectInput, поскольку Steam не поддерживает переназначение этих устройств.

Выбор конфигурации

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

Выбор шаблона

  • Геймпад — эмулирует контроллер Xbox, правый трекпад превращается в необработанный эмулированный джойстик. Идеально подходит для игр с двумя джойстиками, платформеров или спортивных игр.
  • Геймпад с высокоточной камерой/прицеливанием. Эта конфигурация идеальна для шутера от первого лица или любой игры, в которой используется управление камерой. Убедитесь, что ваша игра поддерживает одновременную работу геймпада и мыши, прежде чем выбрать этот параметр, включая все вспомогательные экраны, такие как экраны инвентаря или карты.
  • Геймпад с элементами управления камерой. В этой конфигурации ввод с трекпада в стиле мыши преобразуется в движения эмулированного джойстика. Если в вашей игре можно настроить очень высокую чувствительность джойстика, отсутствие мертвых зон и линейную кривую ускорения, эта конфигурация может работать хорошо, в противном случае рассмотрите возможность использования конфигурации мыши/клавиатуры.

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

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

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

Примечание. Если вы планируете использовать специальные функции устройства, такие как управление движением, вам также понадобится один из них для контроллеров PlayStation 4 или Nintendo Switch.

Ввод текста

Ввод текста на экране технически не является частью ISteamInput (Steam Input), но вместо этого находится в ISteamUtils. В настоящее время это реализовано только тогда, когда игрок запускает игру в режиме большого изображения.


Недавно я начал пробовать PS Now (на ПК), и, похоже, он работает довольно хорошо! Одна вещь, которую я хотел бы уметь делать, это играть с клавиатурой/мышью, когда дело доходит до игр, требующих точного прицеливания.

Кто-нибудь знает хороший способ эмулировать ввод контроллера с помощью мыши и клавиатуры?

Изучив его, я обнаружил, что единственный метод — использовать комбинацию

vJoy — создать виртуальный контроллер

UJR — сопоставить мышь/клавиатуру с этим виртуальным контроллером

x360ce — сопоставление виртуального контроллера со стандартным контроллером xinput/xbox

Проблема, с которой я столкнулся, заключается в том, что UJR просто падает, прежде чем я успеваю что-то сделать. У кого-нибудь успешно работала такая установка?


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

Итак, вы используете это с ПК?

Кроме того, я не против заплатить, но я проверил цену и обнаружил, что 125 долларов – это довольно дорого! 0_o Я ожидал около 30 долларов, ха-ха.

Мой приятель использовал XIM3 для Halo на Xbox и почти каждый раунд убирал дом. Это даже нечестно, но весело.

Привет. Есть ли способ играть в ps сейчас с помощью джойстика. Если да, может кто-нибудь сказать мне, как? Это не соединяется. Я могу играть в Mortal Kombat XL с помощью джойстика, но Ps не подключается к джойстику

Я пытался заставить что-то подобное работать, потому что я использую logitech g13 с аналоговым джойстиком. Я использую x360ce для эмуляции xinput для осей X и Y, что заставляет игру думать, что это контроллер 360. Но в некоторых играх можно использовать только любой контроллер или m+kb. Мне нужно, чтобы клавиши клавиатуры на игровой доске отображались как кнопки контроллера, но я никогда не мог этого сделать.

UJR звучит смутно знакомо, поэтому, возможно, я уже пробовал его, но попробую еще раз и посмотрю, получу ли я другие результаты. Какая у вас версия Windows?


С появлением нового игрового оборудования каждый день вычислительные возможности наших ПК и ноутбуков вышли на новый уровень. Таким образом, возможности игровой графики увеличились, и это помогает играть в консольные игры на компьютере. Теперь не все из нас используют геймпад/джойстик для игр, и поэтому нам нужен метод для эмуляции ввода с джойстика через клавиатуру. Следовательно, в этом руководстве мы расскажем, как играть в игры с джойстиком или геймпадом с клавиатурой в Windows 10, 7 и 8.1 [32-разрядная и 64-разрядная версия]

Учебное пособие по игре в игры с джойстиком и клавиатурой на компьютере –

Шаг . 1 – Установка программного обеспечения эмулятора джойстика и виртуального джойстика/геймпада

Нажмите < бр />

  • Мы будем использовать программное обеспечение с открытым исходным кодом под названием «vJoy», чтобы сопоставить ввод с клавиатуры с вводом с джойстика в соответствии с требованиями игры.
  • Пожалуйста, загрузите и установите приложение vJoy по ссылке, указанной ниже.
    Нажмите здесь, чтобы загрузить эмулятор джойстика vJoy для Windows 10 / 7 / 8.1 [32-разрядная и 64-разрядная версии]
  • Теперь нам нужно установить программное обеспечение. Обратите внимание, что он может запросить у вас разрешения на установку драйверов, как показано на рисунке ниже. Нажмите «Установить», чтобы установить эмулятор виртуального джойстика


Шаг . 2 – Включение виртуального джойстика

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

Теперь, после открытия приложения vJoy, вы можете увидеть все элементы управления геймпада или джойстика, которые могут быть эмулированы vJoy, как показано на снимке экрана ниже. Здесь «отметьте» включенную опцию, чтобы запустить эмуляцию vjoy.

Проверьте включенную опцию для запуска виртуального джойстика

Отметьте включенную опцию для запуска виртуального джойстика

Шаг . 3 – Сопоставление ввода джойстика с клавишами клавиатуры –

Нажмите кнопку ., чтобы назначить клавишу клавиатуры

  • Теперь нам нужно сопоставить клавиши клавиатуры с входами джойстика, необходимыми для игры, такими как аналоговые и цифровые элементы управления, кнопки x, a, b , y , o.
  • Для этого нажмите значок с тремя точками «…» рядом с вводом, который вы хотите эмулировать, как показано ниже. Нажмите кнопку …, чтобы назначить клавишу клавиатуры

Теперь вам будет предложено нажать любую клавишу на клавиатуре, здесь нажмите кнопку на мыши или клавиатуре, чтобы назначить функцию

Нажмите любую клавишу на клавиатуре или мыши, чтобы эмулировать ввод с помощью джойстика

Нажмите любую клавишу на клавиатуре или мыши, чтобы эмулировать ввод с помощью джойстика

Теперь, как только вы нажмете клавишу, она заменит «Нет» на нажатую клавишу. Повторяйте этот шаг, пока не будут выполнены все элементы управления, которые вы хотите эмулировать —

Все элементы управления джойстиком сопоставлены с вводом с клавиатуры

Все элементы управления джойстиком сопоставлены с вводом с клавиатуры

Шаг . 4 – Проверка ввода в Панели управления – Игровые контроллеры

Выберите свойства устройства vJoy

  • Теперь, когда вы настроили виртуальный джойстик. Давайте проверим входные данные на панели управления Свойства контроллера геймпада.
  • Перейдите в «Панель управления» -> «Настройка USB-контроллера» ->, а затем выберите вход vjoy и выберите параметр «Свойства», как показано на рисунке ниже. Выберите «Свойства устройства vJoy».

Теперь просто введите или нажмите сопоставленные клавиши на клавиатуре и проверьте, мигают ли кнопки на вкладке «тест», как показано ниже –

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

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

Программа для управления устройством vJoy / vXbox с помощью клавиатуры, мыши, джойстика.

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

Поддерживаемые виртуальные устройства ввода:
vJoy (виртуальный универсальный джойстик)
vXbox (виртуальный геймпад Xbox 360)
vKeyboard (симуляция клавиатуры)
vMouse (имитация мыши)

Поддерживаемые физические устройства ввода:
Клавиатура
Мышь
Джойстик

Примечания.
В Windows 7 для правильной работы виртуального геймпада Xbox 360 необходимо установить следующие компоненты: аксессуары Microsoft Xbox 360, рекомендации Microsoft по безопасности 3033929

Возможности

  • Доступные устройства вывода: vJoy, vXbox, vKeyboard, vMouse.
  • Доступные устройства ввода: клавиатура, мышь, джойстик.
  • Поддержка нескольких клавиатур и мыши
  • Создание настраиваемых элементов управления
  • Поддержка клавиатуры и блокировки мыши
  • Поддержка сети (TCP, UDP)

Примеры проектов

 MainMenu
EditBind
Options.Input
Options.vXbox
О программе
Binds1

Активность проекта

Категории

Подписаться на виртуальный контроллер

Контроль времени – это многофункциональное программное обеспечение для составления расписаний

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

Оценки пользователей

Отзывы пользователей

Очень ценю это замечательное приложение. Спасибо за использование этого приложения, я могу автоматически поворачивать камеру вне поля зрения в MSFS 2020.

Это потрясающий инструмент! Полностью мощная программа; можно создать много хороших вещей. Задача состоит в том, чтобы понять и настроить себя на «технику программирования событий» (особенно если у вас нет опыта программирования, но это можно решить, добавив больше фрагментов кода или помощников для демонстрации крутых преобразований). С этим программным обеспечением вы можете использовать дешевое и обычное оборудование для человеческого интерфейса, чтобы эмулировать высокотехнологичные и дорогие устройства (например, их очень трудно достать в моей стране. Найдите «Hotas Warthog 15cm extension» на YouTube.) Я фанат авиасимуляторов. и я выяснил, как перевести движение мыши в высокоточный виртуальный джойстик (я предполагаю, что аналогичный ответ на Warthog с расширением 20 см). Создавайте сдвинутые функции, например, получайте мышью 4 пары аналоговых осей, комбинируйте вводы с разных устройств (джойстик + мышь) или получайте 32 кнопки джойстика из 8 реальных, а также создавайте чередование 2 или более кнопок нажатием одной. Все, что вам нужно, чтобы получить комфорт и быстрый отклик, чтобы насладиться любимой игрой.

Обзоры на английском и португальском языках: ------------------------------------------------------- Полная чушь . Программа не знает, чтобы решить в одиночку, является ли система x86 или x64. После завершения установки программного обеспечения мы думаем, что программа готова к использованию, но нет. Программное обеспечение по-прежнему устанавливает драйвер полностью халтурным методом. И поскольку это «независимая установка», это оставит следы мусора при удалении.В дальнейшем можно удалить основную программу (через деинсталляцию), но драйвер придется удалять вручную. Программа сбивает с толку, а интерфейс сложный и утомительный, поскольку каждое связывание клавиш должно быть настроено с использованием списка, что было бы намного проще, если бы мы могли использовать ввод напрямую. В Windows 7 драйвер, установленный этой программой, приведет к сбою вашей машины, если вы уже подключили физический (реальный) элемент управления x360. Кажется, что они конфликтуют, во всяком случае, я не могу точно сказать, что происходит. Просто знайте, что он полностью дает сбой, что делает обязательным перезапуск компьютера. ---------------------------------------- Мм absoluto lixo. Começar pela instalação. O programa não sabe decidir sozinho se o sistema operacional é x86 ou x64. Após о término да instalação сделать программное обеспечение, pensamos Que о programa já está pronto пункт usar, mas, não. Программное обеспечение может установить драйвер, используя метод полного доступа (linha de comando com o devcon). E, por esta tratar-se de uma instalação Independente, isso deixará resquícios de lixo na desinstalação. No futuro, você poderá desinstalar или programa main (através do "deinstall"), mas o driver terá de ser remove manualmente. O programa é confuso e a interface é dificultosa e cansativa, pois cada "bind" de tecla tem que ser configurado utilizando-se uma lista, o que seria muito mais fácil se pudéssemos utilizar o input diretamente. Нет Windows 7, или драйвер, установленный для программы, может быть установлен на x360. Parece дие entram em conflito, enfim, não sei Dizer. Só sei que trava completamente, tornando obrigatoria a reicialização do pc.

Дополнительная информация о проекте

Языки

Предполагаемая аудитория

Язык программирования

Зарегистрировано

Играйте в свои любимые игры прямо из облака. Amazon Luna позволяет вам играть в ваши любимые игры на устройствах, которые у вас уже есть. Луна доступна на; ПК с Windows, Mac, Fire TV, планшеты Fire, Chromebook, iPhone, iPad и телефоны Android. Когда Luna Controller общается напрямую с облаком, нет.

Откройте для себя открытый, масштабируемый и модульный виртуальный симулятор вождения, который позволяет тестировать различные задачи и требования к производительности. Симулятор вождения Ansys VRXPERIENCE на базе SCANeR™ позволяет создавать сценарии, тестировать программное обеспечение, учитывать динамику автомобиля и опыт.

Симулятор MIMIC создает реальную лабораторную среду со 100 000 устройств за небольшую часть стоимости физического оборудования. Он представляет собой интерактивное практическое занятие по контролю качества, разработке, презентации, оценке, развертыванию и обучению работе с приложениями для управления предприятием.

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