Sintetizador de voz - texto a voz
Lector de pantalla SodelsCot
Empezar con SodelsCot Lectura texto copiado
Licencia
Menú Lectura texto teclado
Enlace DDE
Configuración Editor
Línea Comandos

Enlace DDE (programación)


Esta funcionalidad está pensada para desarrolladores que quieren que sus aplicaciones puedan comunicarse con SodelsCot para realizar lecturas de textos sin necesidad de modificar el Portapapeles de Microsoft Windows.

Cuando una aplicación externa envía un texto o un fichero mediante DDE (Dynamic Data Exchange) para que SodelsCot lo lea, éste lo hará con todos los parámetros especificados en la ventana de configuración. Existen dos comandos en la comunicación DDE, SPEAK y FILETXT. El primero hace que SodelsCot lea el texto que le sigue y el segundo hace que lea el fichero especificado. Después del comando es necesario dejar un espacio en blanco.

Sintaxis

SPEAK <texto> Lee el texto especificado. Ejemplo: SPEAK Prueba de lectura DDE

FILETXT <fichero> Lee el fichero indicado. Ejemplo: FILETXT C:\Mis archivos\documento.pdf



Ejemplo VBA

El siguiente código es un sencillo ejemplo de una macro en Excel para leer la celda A1.

Sub Main()
  canal = DDEInitiate("SodelsCot Empresarial", "Voice")
  DDEExecute canal, "SPEAK " & Range("A1") ' lee la celda A1
  DDETerminate canal
End Sub

Para la edición Profesional habría que especificar "SodelsCot Profesional" en DDEInitiate


Ejemplo C#

Se puede establecer una comunicación desde C# utilizando APIs de Windows. El siguiente fragmento muestra una función con los comándos mínimos para enviar un texto a SodelsCot.

private void button1_Click(object sender, EventArgs e)
{
  int instanceId = 0;

  DdeInitialize(ref instanceId, 0, 0, 0);
  IntPtr serviceHandle = DdeCreateStringHandle(instanceId, "SodelsCot Empresarial", CP_WINANSI);
  IntPtr topicHandle = DdeCreateStringHandle(instanceId, "Voice" , CP_WINANSI);
  IntPtr handle = DdeConnect(instanceId, serviceHandle, topicHandle, IntPtr.Zero);
  DdeFreeStringHandle(instanceId, topicHandle);
  DdeFreeStringHandle(instanceId, serviceHandle);

  byte[] data = System.Text.Encoding.Unicode.GetBytes("SPEAK Prueba desde C#" + "\0");
  int returnFlags = 0;
  IntPtr result =   DdeClientTransaction(
    data,
    data.Length,
    handle,
    IntPtr.Zero,
    CF_TEXT,
    XTYP_EXECUTE,
    1000,
    ref returnFlags);

  DdeDisconnect(handle);
  DdeUninitialize(instanceId);
}

La clase DDECliente.cs muestra un ejemplo más completo de comunicación por DDE en C#.


Ejemplo Visual Basic 6

El siguiente ejemplo muestra un sencillo programa en Visual Basic que realiza la comunicación con SodelsCot.

Formulario 

Contiene dos OptionButton para indicar la edición de SodelsCot con la que se va a comunicar, un TextBox que será modificado cuando SodelsCot termine la lectura y dos Button para enviar el texto o el fichero especificado.

Enlace DDE

Código fuente

Utiliza el TextBox Vinculo para enlazar con SodelsCot y envía el texto precedido del comando "SPEAK" o "FILETXT" dependiendo del botón pulsado. El cambio de la propiedad Text de Vinculo a "StopSpeaking" indica el final de la lectura de SodelsCot.

' establece el vínculo DDE con SodelsCot y le envía el texto para leer

Private Sub EnviarTxt_Click()

   On Error GoTo Err_EnviarTxt_Click

   With Vinculo

      .LinkMode = vbLinkNone

      .LinkTopic = "SodelsCot " & IIf(Empresarial.Value, "Empresarial", "Profesional") & "|Voice"

      .LinkItem = "DDELink"

      .LinkMode = vbLinkAutomatic

     

      ' envía el texto a SodelsCot

      .LinkExecute "SPEAK " & Texto.Text

   End With

   Exit Sub

Err_EnviarTxt_Click:

   MsgBox Err.Description, vbCritical

End Sub

 

' establece el vínculo DDE con SodelsCot y le envía el texto para leer

Private Sub EnviarFich_Click()

   On Error GoTo Err_EnviarFich_Click

   With Vinculo

      .LinkMode = vbLinkNone

      .LinkTopic = "SodelsCot " & IIf(Empresarial.Value, "Empresarial", "Profesional") & "|Voice"

      .LinkItem = "DDELink"

      .LinkMode = vbLinkAutomatic

     

      ' envía el fichero a SodelsCot

      .LinkExecute "FILETXT " & NomFich.Text

   End With

   Exit Sub

Err_EnviarFich_Click:

   MsgBox Err.Description, vbCritical

End Sub

 

 

' detecta la final de la lectura de SodelsCot

Private Sub Vinculo_Change()

   If Vinculo.Text = "StopSpeaking" Then

      MsgBox "Final lectura"

   End If

End Sub

 

© Sodels Factory S.L. Todos los derechos reservados.