En una ocasion tenia que realizar un proyecto de puerto paralelo y flash, flash en realidad no puede, tuve que insertar el flash en un Winform y la comunicacion la hice con c# con Fscommands
Para mandar o recibir datos a traves del puerto paralelo utilice una dll que se llama inpout32.dll a continuacion un ejemplo con c#, basicamente lee un dato de una pagina PHP (el dato esta guardado en mysql db), dicho dato lo manda por el puerto paralelo,este dato lo esta leyendo periodicamente, con un componente timer.
En esta pagina hay un simulador de puerto paralelo muy bueno, para ver que esta entrando y saliendo a traves de el
http://www.geekhideout.com/parmon.shtml
C# Form1.cs
Código :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Runtime.InteropServices;
namespace WindowsApplication2
{
public partial class Form1 : Form
{
[DllImport("inpout32.dll", EntryPoint = "Out32")]
public static extern void Output(int adress, int value);
[DllImport("inpout32.dll", EntryPoint = "Inp32")]
public static extern int Input(int adress);
public int tmintervalo;
public int intervalo;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
timer2.Enabled = true;
//Output(0x378, tmintervalo);
}
private void timer1_Tick(object sender, EventArgs e)
{
string strinp = Input(0x378).ToString();
string binaryText = Convert.ToString(Convert.ToInt32(strinp), 2);
label1.Text = strinp + ", " + binaryText;
}
private void button2_Click(object sender, EventArgs e)
{
}
private string LeerPagina(string pagina) {
HttpWebRequest webRequest;
string cadena = "";
webRequest = (HttpWebRequest)WebRequest.Create(pagina);
webRequest.Timeout = 20000;
webRequest.KeepAlive = false;
webRequest.Method = "GET";
webRequest.Headers.Add("Cache-Control", "no-cache");
webRequest.Headers.Add("Pragma", "no-cache");
webRequest.Credentials = CredentialCache.DefaultCredentials;
using (HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse())
{
Stream rs = response.GetResponseStream();
StreamReader reader = new StreamReader(rs);
cadena = reader.ReadToEnd();
response.Close();
webRequest.Abort();
}
return cadena;
}
private void timer2_Tick(object sender, EventArgs e)
{
string strCadena = LeerPagina("http://127.0.0.1:4001/salida.php");
strCadena = Regex.Replace(strCadena, "[^0-9]*", "", RegexOptions.IgnoreCase);
strCadena = strCadena.Trim();
Console.WriteLine(strCadena);
int binNum = Convert.ToInt32(strCadena);
Output(0x378, binNum);
}
}
}
Podemos cambiar esto, y hacer que flash mande un dato a c# y c# al puerto paralelo, para comunicar flash y c# podemos utilizar fscommandos, a continuacion un fragmento de publique en un post pasado
David Jacob Jarquin R. escribió:
Crea un nuevo proyecto en VStudio.NET, depués donde esta la barra de herramientas (textbox, Radiobutton, etc), selecciona "Add/Remove Items", después selecciona "COM Components", buscas "Shockwave Flash Object".
Español - en el "Cuadro de Herramientas" haz click derecho y haz click en "Agregar o Quitar Elementos". Luego de eso ve a la solapa que dice Objetos COM y selecciona el que dice Shockwave Flash Object, una ves que se importe lo arrastras a tu forma de c#
Aparecera el "Shockwave Flash object" en tu barra de herramientas y arrastralo a tu WinForm como cualquier otro componente
NOTA: En las versiones nuevas de visualStudio puede haber un problema al hacer este proceso, "The type or namespace name 'AxShockwaveFlashObjects' could not be
found (are you missing a using directive or an assembly reference?)", creo que la solucion está en copiar DLL anteriores en la carpeta "obj\Debug" del proyecto (Interop.ShockwaveFlashObjects.dll y AxInterop.ShockwaveFlashObjects.dll, así como en la de "bin\Debug" reemplazando la que generó el pryecto al intentar hacer los pasos anteriores
si tu componente se llama "axShockwaveFlash1" en el evento Load del form ponemos lo siguiente:
EN C#
Código :
private void Form1_Load(object sender, EventArgs e)
{
this.axShockwaveFlash1.Movie = "Path_Completo_de_tu_swf.swf";
this.axShockwaveFlash1.FSCommand += new AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEventHandler(this.axShockwaveFlash1_FSCommand);
}
//Agregamos el evento que se ejecuta en el FSCommand
//Este evento se dispara cada que hacemos Fscommand
private void axShockwaveFlash1_FSCommand(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent e)
{
switch (e.command)
{
case "enviaDatoParalelo:"
EnviarDatoPorParalelo(e.args);
//ACCIONES A EJECUTAR CON C#
break;
}
}
Desde flash, en este caso solo un ejemplo:
Código :
on (release) {
fscommand("enviaDatoParalelo","120");
}