Selamlar
Klavye emulasyonlu bir barkod okuyucu takılı olduğunda barkod okutulunca formun Keydown özelliği tetikleniyor.
Fakat Gelen verinin klavyedenmi yoksa barkod okuyucudanmı geldiğini ayırt etme şansım varmıdır.
Teşekkürer
USB Barkod Okuyucular Hakında
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
USB Barkod Okuyucular Hakında
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Re: USB Barkod Okuyucular Hakında
Gelen veriyi string bir değişkene al ve bu değişkenin ilk karakterini oku. Sana nereden geldiğini söyleyecek.
Re: USB Barkod Okuyucular Hakında
Standart barkod okuyucularda KeyDown değil, KeyPress in tetiklenmesi gerekiyor.
Barkod okuyucuda özel bir ayar yapılmamışsa barkod verisi + CRLF şeklinde çalışır.
Bağlantı şekli USB ise taranan veri klavye portuna aktarılır.
Barkod okuyucular programlanabilen cihazlardır.
Bu tarz bir ayrımı barkod okuyucuyu programlayarak yapabilirsiniz.
Önerim ilgili barkod okuyucuda okunan barkodun başına özel bir veya birden fazla karekter ekleyin.
ve mrmarman arkadaşında bahsettiği yöntemde gelen verinin başındaki karekterden veri tipini çözümleyin.
Karekter ekleme işlemini barkod okuyucunun kullanım/programlama kılavuzundan yapabilirsiniz.
Barkod okuyucuda özel bir ayar yapılmamışsa barkod verisi + CRLF şeklinde çalışır.
Bağlantı şekli USB ise taranan veri klavye portuna aktarılır.
Barkod okuyucular programlanabilen cihazlardır.
Bu tarz bir ayrımı barkod okuyucuyu programlayarak yapabilirsiniz.
Önerim ilgili barkod okuyucuda okunan barkodun başına özel bir veya birden fazla karekter ekleyin.
ve mrmarman arkadaşında bahsettiği yöntemde gelen verinin başındaki karekterden veri tipini çözümleyin.
Karekter ekleme işlemini barkod okuyucunun kullanım/programlama kılavuzundan yapabilirsiniz.
Re: USB Barkod Okuyucular Hakında
Bir ek bilgi, aynı bilgisayara bağlı birden fazla barcode cihazı varsa ( mesela biri sabit birisi kablolu el tipi vs. ) HID cihaz tespiti ve mesaj takibi ile hangisinden geldiğini de anlayabiliyoruz. Bu metod ile de tek adet olsa da takip mümkün.
Bu HID takibi şekilde herhangi bir input kutusu olmaksızın veya barcode oku vs. Butonu gibi ön hazırlığa gerek duyulmadan anlık barcode algılamak mümkün.
Bu HID takibi şekilde herhangi bir input kutusu olmaksızın veya barcode oku vs. Butonu gibi ön hazırlığa gerek duyulmadan anlık barcode algılamak mümkün.
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
Re: USB Barkod Okuyucular Hakında
merhabalar
alidirik
test ettiğimde klavyede usb den gelen veridede keydown, keypress ve keyup tetikleniyor buradan çözemedim
mrmarman
ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
içerisinde Msg kontrolleri yaptığımda klavye ile usb yi ayıracak bir mesaj farkı göremedim muhtemelen Msg başka birşey ile daha kontrol edilerek
bulunması lazım fakat tam olarak işin içinden çıkamadım
Forumları araştırırken rawinput olarak bir işlemden bahsediliyor ve bu yolla devicelar ayrılabiliyor deniyor
şu andada bunu araştırıyorum konu hakkında bilgisi olan varsa yardımcı olabilirmi.
Teşekkürler
alidirik
test ettiğimde klavyede usb den gelen veridede keydown, keypress ve keyup tetikleniyor buradan çözemedim
mrmarman
ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
içerisinde Msg kontrolleri yaptığımda klavye ile usb yi ayıracak bir mesaj farkı göremedim muhtemelen Msg başka birşey ile daha kontrol edilerek
bulunması lazım fakat tam olarak işin içinden çıkamadım
Forumları araştırırken rawinput olarak bir işlemden bahsediliyor ve bu yolla devicelar ayrılabiliyor deniyor
şu andada bunu araştırıyorum konu hakkında bilgisi olan varsa yardımcı olabilirmi.
Teşekkürler
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
Re: USB Barkod Okuyucular Hakında
Bir örnek üzerinden test yapıyorum fakat bende klavye veriside barkod veriside keybord olarak geliyor
acaba usb barkod okuyucu olan ve zamanı olan bir arkadaş varsa zahmet olmazsa test etmesi mümkünmü
acaba bendeki barkod okuyucumu bunu yapamıyor.
Teşekkürler
acaba usb barkod okuyucu olan ve zamanı olan bir arkadaş varsa zahmet olmazsa test etmesi mümkünmü
acaba bendeki barkod okuyucumu bunu yapamıyor.
Teşekkürler
Kod: Tümünü seç
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
////////////////////////////////////////////////////////////////////////////////
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;
procedure FormCreate(Sender: TObject);
private
{ Private 錾 }
Rid: packed array [0..RI_NUM_DEVICE-1] of TRAWInputDevice;
procedure WmInput(var Mess: TMessage); message WM_INPUT;
function IntToBit(Value: Integer): String;
public
{ Public 錾 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
////////////////////////////////////////////////////////////////////////////////
function TForm1.IntToBit(Value: Integer): String;
var
i: integer;
begin
for i:=31 downto 0 do
if (Value shr i) = 1 then
Result := Result + '1'
else
Result := Result + '0';
end;
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;
RegisterRawInputDevices(@Rid, RI_NUM_DEVICE, SizeOf(TRAWInputDevice));
end;
procedure TForm1.WmInput(var Mess: TMessage);
var
i,l: Integer;
RI: PRAWINPUT;
dwSize: UINT;
lpb: PBYTE;
DataSize: DWORD;
HID_DATA:array [0..15] of DWORD;
P:PByte;
tmpX,tmpY: Integer;
pData: Pointer;
DevName: PChar;
NameSize: Integer;
DevInfo: TRID_DEVICE_INFO;
MouInfo: TRID_DEVICE_INFO_MOUSE;
RIMou: PRAWINPUT;
strOut: String;
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);
strOut := 'RAWINPUT.header.hDevice: ' + IntToStr(RI.header.hDevice) + ' Device Type : ' + IntToStr(DevInfo.dwType) + ' ---- ';
case RI.header.dwType of
RIM_TYPEMOUSE:
begin
strOut := strOut + #13 + '-----';
tmpX := RI.Data.mouse.lLastX;
if tmpX > 0 then
begin
tmpX := tmpX shr 16;
end
else
begin
tmpX := -(($FFFF - tmpX) shr 16);
end;
tmpY := RI.Data.mouse.lLastY;
if tmpY > 0 then
begin
tmpY := tmpY shr 16;
end
else
begin
tmpY := -(($FFFF - tmpY) shr 16);
end;
strOut := strOut + #13 + format(' MOUSE --- X: %d, Y: %d', [Tmpx, Tmpy]);
{
GetRawInputDeviceInfoA(RI.header.hDevice, RIDI_DEVICENAME, nil, @dwSize);
NameSize := dwSize;
GetMem(DevName,dwSize);
GetRawInputDeviceInfoA(RI.header.hDevice, RIDI_DEVICENAME, Pointer(DevName), @dwSize);
DevInfo.cbSize := SizeOf(TRID_DEVICE_INFO);
dwSize := SizeOf(TRID_DEVICE_INFO);
GetRawInputDeviceInfoA(RI.header.hDevice, RIDI_DEVICEINFO, @DevInfo, @dwSize);
MouInfo := TRID_DEVICE_INFO_MOUSE(DevInfo.mouse);
GetRawInputData(PRAWINPUT(Mess.LParam), RID_HEADER, nil, @dwSize, SizeOf(TRAWINPUTHEADER));
DataSize := SizeOf(BYTE) * dwSize;
GetMem(pData,DataSize);
GetRawInputData(PRAWINPUT(Mess.LParam), RID_HEADER, pData, @dwSize, SizeOf(TRAWINPUTHEADER));
RIMou := PRAWINPUT(pData);
strOut := strOut + #13 + 'usFlags: ' + IntToBit(RIMou.Data.mouse.usFlags) + #13
+ 'RMButtons.ulButtons: ' + IntToBit(RI.Data.mouse.RMButtons.ulButtons) + #13
+ 'RMButtons.usButtonFlags: ' + IntToBit(RIMou.Data.mouse.RMButtons.usButtonFlags) + #13
+ 'RMButtons.usButtonData: ' + IntToBit(RI.Data.mouse.RMButtons.usButtonData) + #13
+ 'ulRawButtons: ' + IntToBit(RI.Data.mouse.ulRawButtons) + #13
+ 'lLastX: ' + IntToStr(tmpX) + #13
+ 'lLastY: ' + IntToStr(tmpY) + #13
+ 'ulExtraInformation: ' + IntToBit(RI.Data.mouse.ulExtraInformation) + #13
+ 'RIDI_DEVICENAME: ' + ' CharacterCount: ' +IntToStr(NameSize) + ' Name: ' + WideCharToString(DevName) + #13
+ 'DevInfo.dwType: ' +IntToStr(DevInfo.dwType) + #13
+ 'MouInfo.dwId: ' +IntToStr(MouInfo.dwId) + #13
+ 'MouInfo.dwNumberOfButtons: ' +IntToStr(MouInfo.dwNumberOfButtons) + #13
+ 'MouInfo.dwSampleRate: ' +IntToStr(MouInfo.dwSampleRate) + #13;
}
end;
RIM_TYPEKEYBOARD:
begin
strOut := strOut + #13 + ' KEYBOARD ---';
strOut := strOut + #13 + Format('KeyBoard : %.2x',[RI.Data.keyboard.VKey]);
end;
RIM_TYPEHID:
begin
strOut := strOut + #13 + ' USB --- ';
P := @RI.Data.hid.bRawData;
for i:=0 to RI.Data.hid.dwCount-1 do
begin
HID_DATA[i] := 0;
for l:=1 to RI.Data.hid.dwSizeHid do
begin
HID_DATA[i] := (HID_DATA[i] shl 8) + P^;
Inc(P);
end;
end;
for i:=0 to RI.Data.hid.dwCount-1 do
strOut := strOut + #13 + Format('HID[%d] : %x',[i+1,HID_DATA[i]]);
end;
end;
finally
FreeMem(lpb,DataSize);
end;
Label1.Caption := strOut;
end;
end.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Re: USB Barkod Okuyucular Hakında
Arkadaşlar merhaba. Acaba bu konuyu çözebilen oldumu?.
Banada şimdi aynı olay gerekli. Usb barkod okuyucum var barkod okutulunca imlecin nerede olduğuna bakmadan istediğim değişkene veya textbox'a barkod içeriğinin gönderilmesini istiyorum. Verinin barkod'danmı klavyedenmi geldiğini de anlamam lazım.
Banada şimdi aynı olay gerekli. Usb barkod okuyucum var barkod okutulunca imlecin nerede olduğuna bakmadan istediğim değişkene veya textbox'a barkod içeriğinin gönderilmesini istiyorum. Verinin barkod'danmı klavyedenmi geldiğini de anlamam lazım.