Cuma, Ocak 07, 2005

Casio IT-500 çözümleri.

Bir kaç haftadır CASIO IT-500 ün M30CR modeli ile uygulama geliştiriyorum, gerek internetteki kaynak yetersizliği, gerekse çözüm üretenlerin az olmazı sebebiyle oldukça zorlandım. Compact framework ile ilgili gerekli dökümanların yetersiz olması sebebiyle özellikle kamera ve Barkod okuma ile ilgili bilgi bulmak zor. Ayrıca kendi örneklerinde EVC++ 4.0 örnekleri mevcut.
Kamera kullanımında en önemli ayrıntı FormHandle işlemiyle ilgili , C++ örneklerinde kamera önizlemesinin yapılacağı formun handle 'ı nın kullanmak gerektiği gözüküyor.

case WM_INITDIALOG:
// trying to center the About dialog
if (GetWindowRect(hDlg, &rt1)) {
GetClientRect(GetParent(hDlg), &rt);
DlgWidth = rt1.right - rt1.left;
DlgHeight = rt1.bottom - rt1.top ;
NewPosX = (rt.right - rt.left - DlgWidth)/2;
NewPosY = (rt.bottom - rt.top - DlgHeight)/2;
// if the About box is larger than the physical screen
if (NewPosX < 0) NewPosX = 0;
if (NewPosY < 0) NewPosY = 0;
SetWindowPos(hDlg, 0, NewPosX, NewPosY, 0, 0, SWP_NOZORDER SWP_NOSIZE);
CAMOpen();
CAMStartPreview(hDlg,12,75,CAM_1PER9VGA);
}

Ancak burada C# implemantosyonu olan
[DllImport("CoreDll")] public static extern IntPtr FindWindow( string className, string WindowsName);
fonksiyon doğru handle ı döndürmüyor. Halbuki dökümanlarda FindWindow ve GetActiveWindow, GetDesktopWindow, GetForegroundWindow fonksiyonlarının doğru HWND değerini dödürdüğü yazıyor.
Casio da kullanılacak gerçek fonksiyonu
[DllImport("coredll.dll")] public static extern IntPtr GetForegroundWindow();
Olarak değiştirince kamera sağlıklı biçimde kullanılıyor.

Benzer şekilde Barkod okuma içinde kaynak çok sınırlı.
Form KeyDown event inde
iRet = LCUDRV.OBRGets(buff,ref Barcode,ref dwLeng);
ile okuyucu buffer ı alınarak ,
Encoding.ASCII.GetString(buff,0,buff.Length);
kullanılarak okunan bilgi alınıyor. burada buffer[1024] boyutlarında.

Genel olarak Cihaz iyi çalışıyor ve isteklere iyi cevap veriyor. Daha detaylı bilgi almka isteyen benimle irtibata geçebilir.

Hiç yorum yok: