아래는 Zebra scanner를 Application에 등록하는 코드이다.
try
{
cCoreScannerClass = new CCoreScannerClass();
short[] scannerTypes = new short[1];
scannerTypes[0] = 1;
short numberOfScannerTypes = 1;
int status;
cCoreScannerClass.Open(0, scannerTypes, numberOfScannerTypes, out status);
cCoreScannerClass.BarcodeEvent += new_ICoreScannerEvents_BarcodeEventEventHandler(OnBarcodeEvent);
int opcode = 1001;
string outXML;
string inXML = "<inArgs>" +
"<cmdArgs>" +
"<arg-int>1</arg-int>" +
"<arg-int>1</arg-int>" +
"</cmdArgs>" +
"</inArgs>";
cCoreScannerClass.ExecCommand(opcode, ref inXML, out outXML, out status);
Console.WriteLine(outXML);
}
catch (Exception exp)
{
Console.WriteLine("Something wrong please check... " + exp.Message);
}
void OnBarcodeEvent(short eventType, ref string pscanData)
{
string barcode = pscanData;
this.Invoke((MethodInvoker)delegate { textBox1.Text = barcode; });
}
다음은 XML로 표시된 데이터를 추출하는 방법이다.
16진수로 표시되어서 10진수로 바꾸는 코드도 추가했다.
static void Main(string[] args)
{
string xmlData = @"<outArgs>
<scannerID>1</scannerID>
<arg-xml>
<scandata>
<modelnumber>DS6707-SR20001ZZR</modelnumber>
<serialnumber>7114000503308</serialnumber>
<GUID>9008A01BB72BA34BB519806B63701AAA</GUID>
<datatype>11</datatype>
<datalabel>0x39 0x37 0x38 0x30 0x32 0x30 0x31 0x34</datalabel>
<rawdata>0x39 0x37 0x38 0x30 0x32 0x30 0x31 0x34</rawdata>
</scandata>
</arg-xml>
</outArgs>";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlData);
XmlNode modelnumber = xmlDoc.SelectSingleNode(".//rawdata");
string modelnumberText = modelnumber.InnerText;
string[] hexValueArray = modelnumberText.Split(' ');
string decimalValues = "";
foreach (string hexValue in hexValueArray)
{
if (hexValue.StartsWith("0x")) // 16진수 값인지 확인
{
int decimalValue = Convert.ToInt32(hexValue, 16); // 16진수를 10진수로 변환
decimalValues += decimalValue.ToString(); // 변환된 값을 문자열에 추가
}
}
decimalValues.Trim();
Console.WriteLine(decimalValues);
}
}