usb barkod okuyucudan gelen veri (çözüldü)
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
usb barkod okuyucudan gelen veri (çözüldü)
Arkadaşlar merhaba, birkaç gündür konuyu araştırıyorum fakat bir sonuca ulaşamadım. Elimde usb barkod okuyucu var. zebex marka. Amacım, form aktif değilken bu barkod okuyucudan gelen bilgileri almak. Bir ton dosya indirdim denedim fakat bir türlü sonuca ulaşamadım. en son HIDComponente diye bir komponent paketi indirip denedim, demolarında cihazın bilgileri geliyor (vendor ve product id) fakat form arka planda yada aşağıda iken gelen okutmayı bir türlü alamadım. Konu hakkında bilgisi olan arkadaşlardan yardım bekliyorum.
En son esistem tarafından 03 Eki 2014 11:19 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Re: usb barkod okuyucudan gelen veri
Sizin istediğiniz yöntem seri port mantığında var.
Zebex okuyucuların yeni modellerinde USB-COM desteği mevcut.
Bu yöntemde cihaz USB den bilgisayara takılı fakat Seri port mantığı ile çalışıyor.
Konu ile ilgili http://www.bilkur.com.tr de ürün sayfasına bakın veya Bilkur ile görüşebilirsiniz.
Zebex okuyucuların yeni modellerinde USB-COM desteği mevcut.
Bu yöntemde cihaz USB den bilgisayara takılı fakat Seri port mantığı ile çalışıyor.
Konu ile ilgili http://www.bilkur.com.tr de ürün sayfasına bakın veya Bilkur ile görüşebilirsiniz.
Re: usb barkod okuyucudan gelen veri (çözüldü)
Tekrar selam arkadaşlar.
Yoğun araştırma sonucu sorunu çözdüm (ufak bir pürüz dışında). Bilgisayara bağlı klavye, mouse, HID cihaz (usb barkod okuyucu) vs.vs. hepsinden gelen veriyi alıp, hangi cihazdan geldiğini bulup, ona göre işlem yaptırıyorum, fakat şöyle bir sorun oluştu;
Bende usb barkod okuyucu var, okuttuğum zaman gelen veriyi alıp işleyebiliyorum ama mesela kullanıcı excel dosyası açmış onda çalışıyor, ben programdan arka planda gelen veriyi alıyorum ama kullanıcı excelde hangi hücrede ise gidip okutulan veriyi orayada basıyor. Bu konuda yardımcı olabilirseniz ne mutlu bana.
Kodu aşağıda veriyorum ihtiyacı olan arkadaşlar kullanabilirler.
Yoğun araştırma sonucu sorunu çözdüm (ufak bir pürüz dışında). Bilgisayara bağlı klavye, mouse, HID cihaz (usb barkod okuyucu) vs.vs. hepsinden gelen veriyi alıp, hangi cihazdan geldiğini bulup, ona göre işlem yaptırıyorum, fakat şöyle bir sorun oluştu;
Bende usb barkod okuyucu var, okuttuğum zaman gelen veriyi alıp işleyebiliyorum ama mesela kullanıcı excel dosyası açmış onda çalışıyor, ben programdan arka planda gelen veriyi alıyorum ama kullanıcı excelde hangi hücrede ise gidip okutulan veriyi orayada basıyor. Bu konuda yardımcı olabilirseniz ne mutlu bana.
Kodu aşağıda veriyorum ihtiyacı olan arkadaşlar kullanabilirler.
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, AppEvnts;
////////////////////////////////////////////////////////////////////////////////
type
USHORT = Word;
////////////////////////////////////////////////////////////////////////////////
const
RI_NUM_DEVICE = 2;
const
WM_INPUT = $00FF;
const
RIDEV_REMOVE = $00000001;
RIDEV_EXCLUDE = $00000010;
RIDEV_PAGEONLY = $00000020;
RIDEV_NOLEGACY = $00000030;
RIDEV_INPUTSINK = $00000100;
RIDEV_CAPTUREMOUSE = $00000200;
RIDEV_NOHOTKEYS = $00000200;
RIDEV_APPKEYS = $00000400;
RIM_TYPEMOUSE = $00000000;
RIM_TYPEKEYBOARD = $00000001;
RIM_TYPEHID = $00000002;
RID_INPUT = $10000003;
RID_HEADER = $10000005;
RIDI_PREPARSEDDATA = $20000005;
RIDI_DEVICENAME = $20000007;
RIDI_DEVICEINFO = $2000000b;
////////////////////////////////////////////////////////////////////////////////
type
TRAWINPUTDEVICE = packed record
usUsagePage : WORD;
usUsage : WORD;
dwFlags : DWORD;
hwndTarget : HWND;
end;
PRAWINPUTDEVICE = ^TRAWINPUTDEVICE;
TRAWINPUTHEADER = packed record
dwType : DWORD;
dwSize : DWORD;
hDevice : THANDLE;
wParam : WPARAM;
end;
PRAWINPUTHEADER = ^TRAWINPUTHEADER;
TRMBUTTONS = packed record
case Integer of
0:(ulButtons: ULONG);
1:(
usButtonFlags : SHORT;
usButtonData : SHORT;
);
end;
TRAWMOUSE = packed record
usFlags : SHORT;
RMButtons : TRMBUTTONS;
ulRawButtons : ULONG;
lLastX : LongInt;
lLastY : LongInt;
ulExtraInformation : ULONG;
end;
PRAWMOUSE = ^TRAWMOUSE;
TRAWKEYBOARD = packed record
MakeCode : SHORT;
Flags : SHORT;
Reserved : SHORT;
VKey : SHORT;
Mess : UINT;
ExtraInformation : ULONG;
end;
PRAWKEYBOARD = ^TRAWKEYBOARD;
TRAWHID = packed record
dwSizeHid : DWORD;
dwCount : DWORD;
bRawData : BYTE;
end;
PTRAWHID = ^TRAWHID;
TRAWINPUTDATA = packed record
case Integer of
0:(mouse : TRAWMOUSE );
1:(keyboard : TRAWKEYBOARD);
2:(hid : TRAWHID );
end;
TRAWINPUT = packed record
header : TRAWINPUTHEADER;
data : TRAWINPUTDATA;
end;
PRAWINPUT = ^TRAWINPUT;
TRID_DEVICE_INFO_MOUSE = packed record
dwId : DWORD;
dwNumberOfButtons : DWORD;
dwSampleRate : DWORD;
end;
PRID_DEVICE_INFO_MOUSE = ^TRID_DEVICE_INFO_MOUSE;
TRID_DEVICE_INFO_KEYBOARD = packed record
dwType : DWORD;
dwSubType : DWORD;
dwKeyboardMode : DWORD;
dwNumberOfFunctionKeys : DWORD;
dwNumberOfIndicators : DWORD;
dwNumberOfKeysTotal : DWORD;
end;
PRID_DEVICE_INFO_KEYBOARD = ^TRID_DEVICE_INFO_KEYBOARD;
TRID_DEVICE_INFO_HID = packed record
dwVendorId : DWORD;
dwProductId : DWORD;
dwVersionNumber : DWORD;
usUsagePage : USHORT;
usUsage : USHORT;
end;
PRID_DEVICE_INFO_HID = ^TRID_DEVICE_INFO_HID;
TRID_DEVICE_INFO = packed record
cbSize : DWORD;
dwType : DWORD;
case Integer of
0:(mouse : TRID_DEVICE_INFO_MOUSE );
1:(keyboard : TRID_DEVICE_INFO_KEYBOARD);
2:(hid : TRID_DEVICE_INFO_HID );
end;
PRID_DEVICE_INFO = ^TRID_DEVICE_INFO;
////////////////////////////////////////////////////////////////////////////////
function RegisterRawInputDevices(pRawInputDevices: Pointer;uiNumDevices,cbSize: UINT): Boolean; stdcall; external 'user32.dll';
function GetRawInputData(hRawInput: Pointer; uiCommand:UINT; pData: Pointer; pcbSize: Pointer; cbSizeHeader: UINT): UINT; stdcall; external 'user32.dll';
function GetRawInputDeviceInfoA(hDevice: THandle; uiCommand:UINT; pData: Pointer; pcbSize: Pointer): UINT; stdcall; external 'user32.dll';
////////////////////////////////////////////////////////////////////////////////
type
TForm1 = class(TForm)
Label1: TLabel;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private }
Rid: packed array [0..RI_NUM_DEVICE-1] of TRAWInputDevice;
procedure WmInput(var Mess: TMessage); message WM_INPUT;
public
{ Public }
end;
var
Form1: TForm1;
strOut, labelout: String;
const
MY_MESSAGE = WM_USER + 4242;
implementation
{$R *.dfm}
////////////////////////////////////////////////////////////////////////////////
procedure TForm1.FormCreate(Sender: TObject);
begin
//
Rid[0].usUsagePage := $0001;
Rid[0].usUsage := $02;
Rid[0].dwFlags := RIDEV_INPUTSINK; //0;
Rid[0].hwndTarget := Self.Handle;
//
Rid[1].usUsagePage := $0001;
Rid[1].usUsage := $06;
Rid[1].dwFlags := RIDEV_INPUTSINK;
Rid[1].hwndTarget := Self.Handle;
strout := '';
RegisterRawInputDevices(@Rid, RI_NUM_DEVICE, SizeOf(TRAWInputDevice));
end;
procedure TForm1.WmInput(var Mess: TMessage);
var
RI: PRAWINPUT;
dwSize: UINT;
lpb: PBYTE;
DataSize: DWORD;
begin
GetRawInputData(PRAWINPUT(Mess.LParam), RID_INPUT, nil, @dwSize,SizeOf(TRAWINPUTHEADER));
if dwSize = 0 then Exit;
DataSize := SizeOf(BYTE) * dwSize;
GetMem(lpb,DataSize);
try
GetRawInputData(PRAWINPUT(Mess.LParam), RID_INPUT, lpb, @dwSize, SizeOf(TRAWINPUTHEADER));
RI := PRAWINPUT(lpb);
labelout := 'RAWINPUT.header.hDevice: ' + IntToStr(RI.header.hDevice) + #13;
case RI.header.dwType of
RIM_TYPEKEYBOARD:
begin
{
if (RI.Data.keyboard.Mess=257) then // keyup
memo1.Lines.Add( IntToStr(RI.header.hDevice) + ' - ' +
inttostr(RI.Data.keyboard.VKey) + ' - ' +
Chr(RI.Data.keyboard.VKey) );
}
//if (RI.header.hDevice = 12255843) then begin // usb barcode scanner
if (RI.Data.keyboard.Mess = 257) then begin // keyup
if (RI.Data.keyboard.VKey<>13) then begin // send key not enter
strout := strout + Chr(RI.Data.keyboard.VKey);
end else begin // send key enter
memo1.Lines.Add(strout);
strout := '';
end; // send key enter
end;
// end; // usb barcode scanner
end;
end;
finally
FreeMem(lpb,DataSize);
end;
Label1.Caption := labelout;
end;
end.
Re: usb barkod okuyucudan gelen veri (çözüldü)
@esistem Yıllar sonra geldim kodu kullandım. Yardımın için teşekkür ederim.