读书人

C#扫码枪读值,该怎么解决

发布时间: 2013-12-04 17:21:02 作者: rapoo

C#扫码枪读值
现在遇到问题:C#扫码枪如何读值?
求C#扫码枪读值的实例!谢谢!
邮箱1007109573@163.com C#?扫码枪?读值
[解决办法]
你说的是条码扫描设备吧,其实它就是一个键盘输入,你把它当键盘输入即可
[解决办法]
读取一个字符串的问题
[解决办法]
方法:
1,把做入,剩下就做入考;
2,找到你所用的提供的API,用相API取,可能涉及到WIN32的相API。
[解决办法]


/*
Device的都是PDA提供的API函
Win32的就是Win32相API
是WIN CE 5.0系
*/
public class DecodeEventArgs : EventArgs
{
private string barcode;
private byte type;

public DecodeEventArgs(string barcodeData, byte typeData)
{
barcode = barcodeData;
type = typeData;
}

public string Barcode
{
get { return barcode; }
set { barcode = value; }
}

public byte Type
{
get { return type; }
set { type = value; }
}

}

class Scanner
{
public event EventHandler<DecodeEventArgs> DecodeEvent;

private bool needClose = false;

private IntPtr[] hEvent = new IntPtr[2];
private IntPtr hNotify = IntPtr.Zero;

private Thread scanThread;

private bool isContinuousMode;
public bool IsContinuousMode
{
get { return isContinuousMode; }
set { isContinuousMode = value; }
}

public bool Start()
{

if (Device.SCA_GetPowerStatus() == 0)
{
Device.SCA_EnableModule();
needClose = true;
}

Win32.MSGQUEUEOPTIONS options = new Win32.MSGQUEUEOPTIONS();
options.dwSize = 20;
options.dwFlags = 2;
options.dwMaxMessages = 3;
options.cbMaxMessage = 252;
options.bReadAccess = true;

IntPtr hMsgQ = Win32.CreateMsgQueue(null, options);
if (hMsgQ == IntPtr.Zero)


{
return false;
}

hNotify = Device.SCA_RegisterNotification(hMsgQ);
if (hNotify == IntPtr.Zero)
{
return false;
}

hEvent[0] = Win32.CreateEvent(IntPtr.Zero, false, false, null);
hEvent[1] = hMsgQ;

scanThread = new Thread(new ThreadStart(this.ScanThreadPorc));
scanThread.Start();

return true;

}

public void Stop()
{
try
{
Win32.EventModify(hEvent[0], Win32.EVENT_SET);
if (!scanThread.Join(3000))
{
scanThread.Abort();
}
}
catch (Exception ex)
{
}
Win32.CloseHandle(hEvent[0]);

Device.SCA_UnRegisterNotification(hNotify);
Win32.CloseHandle(hEvent[1]);

if (needClose)
{
Device.SCA_DisableModule();
}
else if (isContinuousMode)
{
Device.SCA_SetTriggerMode(Device.TriggerMode.Normal);
}

}

private void ScanThreadPorc()
{
while (true)
{
uint evt = Win32.WaitForMultipleObjects(2, hEvent, false, Win32.INFINITE);
switch (evt)
{
case 0://return thread
return;
case 1://disable network
uint bytesRead;
uint flags;

byte[] buf = new byte[256];

if (Win32.ReadMsgQueue(hEvent[1], buf, 256, out bytesRead, Win32.INFINITE, out flags))


{
EventHandler<DecodeEventArgs> temp = DecodeEvent;
if (temp != null)
{
temp(this, new DecodeEventArgs(Encoding.Default.GetString(buf, 2, (int)bytesRead), buf[1]));
}
}
break;
}
}
}

}


public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Scanner scanner = new Scanner();
private void Form1_Load(object sender, EventArgs e)
{
//判描是否打,是用的PDA的API函
if (Device.SCA_GetPowerStatus() == 0)
{
Device.SCA_EnableModule();
}
txtBarCode.Focus();
scanner.DecodeEvent += new EventHandler<DecodeEventArgs>(scanner_DecodeEvent);
scanner.Start();
}
void scanner_DecodeEvent(object sender, DecodeEventArgs e)
{
this.BeginInvoke((Action<string>)delegate(string barcode)
{
txtBarCode.Text = barcode;
txtBarCode.Focus();
Win32.Keybd_event(0x0D, 0, 0, 0); //模入一回
}, e.Barcode);
}

private void Form1_Closed(object sender, EventArgs e)
{
if (Device.SCA_GetPowerStatus() == 1)
{
Device.SCA_DisableModule();
}
scanner.Stop();
}
}


[解决办法]
1.要知道条码枪通过什么接口传输数据;
2.要知道条码枪厂商的传输数据的通信协议。
[解决办法]
C#扫码枪读值,该怎么解决
现在的扫码枪99%都不用什么接口驱动了。直挡可以接建盘口或USB口,扫完自动在光标处输出文本了。
现在还有那么奇特的要自己程序实现。。。。
[解决办法]

现在的扫码枪99%都不用什么接口驱动了。直挡可以接建盘口或USB口,扫完自动在光标处输出文本了。
现在还有那么奇特的要自己程序实现。。。。

做入有很多不方便的地方...
[解决办法]
引用:
Quote: 引用:


C#扫码枪读值,该怎么解决
现在的扫码枪99%都不用什么接口驱动了。直挡可以接建盘口或USB口,扫完自动在光标处输出文本了。
现在还有那么奇特的要自己程序实现。。。。


做入有很多不方便的地方...


不会呀,我们都是用这个。弄个双口的PS2转接口。一个口接建盘一个口接扫描枪
还有一种是接USB的扫描枪,也是不用驱什么的,直接插上就可以用了。
[解决办法]

现在的扫码枪99%都不用什么接口驱动了。直挡可以接建盘口或USB口,扫完自动在光标处输出文本了。
现在还有那么奇特的要自己程序实现。。。。

做入有很多不方便的地方...

不会呀,我们都是用这个。弄个双口的PS2转接口。一个口接建盘一个口接扫描枪
还有一种是接USB的扫描枪,也是不用驱什么的,直接插上就可以用了。

还有很多手持带内存的扫描仪。

读书人网 >C#

热点推荐