我得到一个流氓回车,将9个字符返回到我的sendtext中,但仅在某些设备上。
该程序大概从条形码扫描仪读取输入,并且在必要时吃掉该文本,对其进行修改,然后使用sendkey将修改后的文本发送回焦点窗口。它可以在我的电脑上正常工作。在我的工作PC上它可以正常工作。不过,它将在Dell Latitude 7212平板电脑上使用,并且无法在其中使用。仅在这些平板电脑上,我得到一个回车符,将9个字符输入文本。
已验证sendkeys语句使用的输入文本在所有计算机上都相同。在所有计算机上,对sendkey的输入都是相同的。
监视回车的控制台输出。在所有设备中,控制台输出均相同。字符之间没有回车符。
从sendkeys输入中删除了回车以进行故障排除,因为附加的回车已添加到输出中。这并不影响平板电脑中的流氓回车。
验证该代码可在平板电脑上使用的.NET Framework版本上运行。是的正在使用的平板电脑使用与我们的笔记本电脑相同的图像进行成像,可以正常使用。
case 3:
if ((Keys)vkCode == Keys.Enter)
{
Globals.barcodeLength++;
// set the barcode stage back to 0
Globals.activeStage = 0;
// set the barcode type back to 0
Globals.barcodeType = 0;
Globals.sendKeysActive = true;
// format data for applicable program
if (Globals.barcodeFormatStandard != "ProgramX")
{
switch (Globals.barcodeFormatStandard)
{
case "ProgramY":
SendKeys.Send(FormatForProgramY(Globals.barcodeDataString));
break;
case "ProgramZ":
SendKeys.Send(FormatForProgramZ(Globals.barcodeDataString));
break;
}
}
break;
}
一旦进入sendkeys例程,将sendKeysActive布尔值设置为true会使程序允许发送的文本通过而无需进一步处理:
if (Globals.sendKeysActive)
{
if (Globals.barcodeLength == Globals.charactersTransmitted)
{
Globals.barcodeLength = 0;
Globals.charactersTransmitted = 0;
Globals.sendKeysActive = false;
Globals.barcodeDataString = "";
}
按此顺序,程序将退回到默认的文本处理方式,即文本仅传递到活动窗口(当我收集条形码时不会被吸收)
return CallNextHookEx(_hookID, nCode, wParam, lParam);
以下是一些示例输入: '] C1123456789'
sendkeys的输入如下: '#123456789'
发送键输出与除平板电脑外的所有输入都匹配。
在平板电脑上,我收到“#”,后跟1-8个字符,然后在新行上收到“ 9”字符。较长的条目不会创建后续的换行符。在平板电脑上,前9个字符输入到一行,所有后续字符都保留在第二行。
在当前显示的控制台窗口中,我无法检测到该回车。取而代之的是,我只看到了我期望的输出,但是控制台中的输出与窗口的输出不匹配。