none
Controlar a Porta PS/2 RRS feed

  • Pergunta

  • Iae galera tudo bem?

    Gostaria de saber como posso controlar a entrada e saída de dados pela porta PS/2 no C#.

    Por exemplo, como posso mandar o computador escrever algo em um bloco de notas (por exemplo a letra 'a'), mas que esse comando (letra 'a') não tenha sido digitado pelo teclado e sim tenha sido enviado pelo programa.

    Tentei utilizar a InpOut32.dll, porém não consegui...

    O meu intuito é capturar um dado da serial e envia-lo pela PS/2 do computador, ou seja, ter um telcado serial.

    Segue meu código.

    using

    System;

    using

    System.Collections.Generic;

    using

    System.ComponentModel;

    using

    System.Data;

    using

    System.Drawing;

    using

    System.Linq;

    using

    System.Text;

    using

    System.Windows.Forms;

    using

    System.IO.Ports;

    using

    System.Threading;

    using

    System.Runtime.InteropServices;

    namespace

    PinTec

    {

     

    public partial class frmPinTec : Form

     

    {

    [

    DllImport("C:\\Documents and Settings\\Emerson\\Desktop\\PinTec\\PinTec\\InpOut32.dll")]

     

    public static extern byte Inp32(short wAddr);

    [

    DllImport("C:\\Documents and Settings\\Emerson\\Desktop\\PinTec\\PinTec\\InpOut32.dll")]

     

    public static extern byte Out32(short wAddr, byte bOut);

     

    public frmPinTec()

    {

    InitializeComponent();

    }

     

    public void sendByte(byte bOut)

    {

     

    while ((Inp32(0x64) && 02) != 0) { } // Espera a porta de teclado ser liberada

    Out32(0x60, bOut);

    // Envia o caractere para a porta 60

    }

     

    public delegate void UpdateTextCallback(string message);

     

    private void UpdateText(string message)

    {

    txtTecla.Text += message;

    sendByte(

    Convert.ToByte(message));

    }

     

     

    private void btnOK_Click(object sender, EventArgs e)

    {

    porta.PortName = cbPorta.Text.ToString();

    // Porta Serial

    porta.BaudRate =

    Int32.Parse(cbVelocidade.Text.ToString()); // Velocidade

    porta.DataBits =

    Int32.Parse(cbBitsDados.Text.ToString()); // Bits

     

    if (cbParidade.Text.CompareTo("Nenhum") == 0)

    {

    porta.Parity = System.IO.Ports.

    Parity.None; // Paridade

    }

     

    else if (cbParidade.Text.CompareTo("Impar") == 0)

    {

    porta.Parity = System.IO.Ports.

    Parity.Odd;

    }

     

    else if (cbParidade.Text.CompareTo("Par") == 0)

    {

    porta.Parity = System.IO.Ports.

    Parity.Even;

    }

     

    else if (cbParidade.Text.CompareTo("Marcado") == 0)

    {

    porta.Parity = System.IO.Ports.

    Parity.Mark;

    }

     

    else if (cbParidade.Text.CompareTo("Espao") == 0)

    {

    porta.Parity = System.IO.Ports.

    Parity.Space;

    }

    porta.StopBits = (System.IO.Ports.

    StopBits)Enum.Parse(typeof(System.IO.Ports.StopBits), cbBitParada.Text.ToString()); // Bits de parada

     

    if (cbControleFluxo.Text.CompareTo("Nenhum") == 0) // Controle de Fluxo

    {

    porta.Handshake = System.IO.Ports.

    Handshake.None;

    }

     

    else

    {

    porta.Handshake = System.IO.Ports.

    Handshake.XOnXOff;

    }

     

    // Abre a porta serial.

    porta.Open();

    }

     

    void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)

    {

     

    String temp = porta.ReadExisting();

    ImprimeCaixa(temp);

     

    // sendByte(Convert.ToByte(temp));

    }

     

    private void ImprimeCaixa(String sLine)

    {

    txtTecla.BeginInvoke(

    new UpdateTextCallback(UpdateText), new object[] { sLine });

    }

     

    private void frmPinTec_Resize(object sender, EventArgs e)

    {

    notifyIcon1.BalloonTipTitle =

    "Pin Tec Gertec";

    notifyIcon1.BalloonTipText =

    "Clique duas vezes para maximizar.";

     

    if (FormWindowState.Minimized == this.WindowState)

    {

    notifyIcon1.Visible =

    true;

    notifyIcon1.ShowBalloonTip(500);

     

    this.Hide();

    }

     

    else if (FormWindowState.Normal == this.WindowState)

    {

    notifyIcon1.Visible =

    false;

    }

    }

     

    private void notifyIcon1_DoubleClick(object sender, EventArgs e)

    {

     

    this.Show();

     

    this.WindowState = FormWindowState.Normal;

    }

    }

    }

    Alguém poderia me ajudar?

    Obrigado,

    Emer Renan

    segunda-feira, 28 de março de 2011 13:05

Respostas

Todas as Respostas