Дополнение NVDA Control Ex предоставляет интерфейс именованного канала (\\.\pipe\NVDAControlPipe) для внешних приложений, позволяющий отправлять команды в NVDA. Эти команды могут управлять речевым выводом, брайлевским дисплеем и другими функциями NVDA.
Обмен данными через именованный канал:
\\.\pipe\NVDAControlPipe) для получения команд от внешних приложений.Поддерживаемые команды:
speak: Озвучивает предоставленный текст.speakSpelling: Произносит текст по буквам.speakSsml: Озвучивает контент в формате SSML (Speech Synthesis Markup Language).pauseSpeech: Приостанавливает или возобновляет речевой вывод.cancelSpeech: Отменяет текущий речевой вывод.braille: Отображает предоставленный текст на брайлевском дисплее.active: Отвечает “NVDA” для подтверждения активности дополнения.Многопоточная архитектура:
NVDAControlEx из репозитория GitHub.\\.\pipe\NVDAControlPipe).command_name arg1 arg2 ...
speak "Привет, мир!" 0 -1
| Команда | Аргументы | Описание |
|---|---|---|
speak |
text, reason (unused), symbolLevel |
Озвучивает предоставленный текст. |
speakSpelling |
text, locale, useCharacterDescriptions |
Произносит текст по буквам. |
speakSsml |
ssml, markCallback (unused), symbolLevel |
Озвучивает контент в формате SSML. |
pauseSpeech |
switch |
Приостанавливает или возобновляет речевой вывод. |
cancelSpeech |
None | Отменяет текущий речевой вывод. |
braille |
text |
Отображает предоставленный текст на брайлевском дисплее. |
active |
None | Отвечает “NVDA” для подтверждения активности дополнения. |
Для отправки команды в NVDA можно использовать любой язык программирования, поддерживающий именованные каналы Windows. Ниже приведён пример на языке C:
Я использую интерфейс из этого репозитория
Эти файлы можно найти в директории Dep: nvdacontrol.h и nvdacontrol.c.
#include <nvda_control.h>
int main() {
// Шаг 1: Подключение к именованному каналу NVDA
if (nvda_connect() != 0) {
fprintf(stderr, "Failed to connect to NVDA.\n");
return -1;
}
// Шаг 2: Отправка команды для озвучивания текста
const char* textToSpeak = "Hello, this is a test of the NVDA control interface.";
int symbolLevel = NVDA_SYMBOL_LEVEL_ALL; // Использовать всю пунктуацию
if (nvda_speak(textToSpeak, symbolLevel) != 0) {
fprintf(stderr, "Failed to send speak command to NVDA.\n");
nvda_disconnect();
return -1;
}
// Опционально: Приостановка речевого вывода для демонстрации
if (nvda_pause_speech(1) != 0) {
fprintf(stderr, "Failed to pause speech.\n");
}
// Ожидание несколько секунд (для демонстрации)
Sleep(3000); // Ожидание 3 секунды
// Возобновление речевого вывода
if (nvda_pause_speech(0) != 0) {
fprintf(stderr, "Failed to unpause speech.\n");
}
// Шаг 3: Отключение от NVDA
nvda_disconnect();
return 0;
}
```
Дополнение не отвечает:
NVDAControlEx установлено и включено в NVDA.Проблемы с подключением к именованному каналу:
Ошибки выполнения команд: