| Empezar con SodelsCot | Lectura texto copiado |
Licencia |
| Menú | Lectura texto teclado |
Enlace DDE |
| Configuración | Editor |
Línea Comandos |
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.

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