Porbando lo que decias, a nivel de Puerto, hice este ensayo:
- Colocando 2 Memos en un form, y haciendo uso de esta dll
http://logix4u.net/Legacy_Ports/Para...000/NT/XP.html
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
procedure Memo1KeyPress(Sender: TObject; var Key: Char);
private
public
end;
var
Form1: TForm1;
implementation
function Inp32(wAddr:word):byte; stdcall; external 'inpout32.dll';
function Out32(wAddr:word;bOut:byte):byte; stdcall; external 'inpout32.dll';
{$R *.dfm}
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
var leido:byte;
begin
leido:=Inp32($060);
Memo1.Text:=(IntToStr(leido));
case leido of 2: begin
memo2.Text:=memo2.Text+IntToStr(leido-1);
end;
3: begin
memo2.Text:=memo2.Text+IntToStr(leido-1);
end;
end;
end;
end.
Me resulta bastante incómodo, por 2 razones. Se mezclan flags de la INT33 (mouse) con el Port 0x060 del teclado PS/2, por lo que un simple clic (Flag Dx) altera el curso del Port 0x060, efecto no deseable pero tratable. Y lo más
molesto, es que si cronometrás el evento en cada KeyPress, el envío del scanner CCD equivale a mantener presionada una tecla, es decir tener un KeyDown siempre en true, aunque visualmente no lo parezca, pero las mediciones manda. Voy a seguir viendo o mejor dicho encontrando una forma de distinguir entre Usuario y Scanner CCD, pienso que el quiz está en el Buffer del teclado, Probaste mantener una tecla presionada o presionarla justo en el mismo momento que el scanner envia el dato?
Saludos