你确定你应该发送这个代码吗?我一直认为代码以 ESC 为前缀,即 0x1b 十六进制......对于现金抽屉......
"\x1bA"
有趣的是使用了双“A”......哦,好吧...... :)
编辑:考虑到这一点后,我意识到还有另一种方法,请继续阅读...我已经修改了您的原始 BASIC 代码,并进行了一些防弹...保存到opendrawer.bas
子 OpenDrawer()
抽屉ComPort = "COM1"
为输出访问打开抽屉ComPort 写为 #1
REM 添加错误处理
ON ERROR GOTO ErrHandler
打印 #1, Chr$(65); “一个”;
关闭 #1
打印“抽屉好”
OpenDrawer_Exit:
出错时转到 0
退出子
错误处理程序:
打印“糟糕,写入失败”
转到 OpenDrawer_Exit
结束子
REM 主要....
打开抽屉
下载旧的 QB4.5 MS-Quick Basic 编译器,并将其编译为可执行文件,进入opendrawer.exe
,可以在此处找到 QB4.5 。现在,你有责任做到这一点,即如果写入 COM1 失败会发生什么,发出一条消息,就像我修改的示例 BASIC 代码一样
然后你可以使用System.Diagnostics.Process
隐藏窗口
公共类TestDrawer
{
私有 StringBuilder sbRedirectedOutput = new StringBuilder();
公共字符串输出数据
{
得到 { 返回 this.sbRedirectedOutput.ToString(); }
}
公共无效运行()
{
System.Diagnostics.ProcessStartInfo ps = new System.Diagnostics.ProcessStartInfo();
ps.FileName = "打开抽屉";
ps.ErrorDialog = 假;
ps.CreateNoWindow = true;
ps.UseShellExecute = 假;
ps.RedirectStandardOutput = true;
ps.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
使用(System.Diagnostics.Process proc = new System.Diagnostics.Process())
{
proc.StartInfo = ps;
proc.Exited += new EventHandler(proc_Exited);
proc.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_OutputDataReceived);
proc.Start();
proc.WaitForExit();
proc.BeginOutputReadLine();
而 (!proc.HasExited) ;
}
}
void proc_Exited(对象发送者,EventArgs e)
{
System.Diagnostics.Debug.WriteLine("proc_Exited: Process Ended");
if (this.sbRedirectedOutput.ToString().IndexOf("糟糕,写入失败") > -1){
MessageBox.Show(this, "打开钱箱时出错");
}
if (this.sbRedirectedOutput.ToString().IndexOf("Drawer Ok") > -1){
MessageBox.Show(this, "Drawer Ok");
}
}
void proc_OutputDataReceived(对象发送者,System.Diagnostics.DataReceivedEventArgs e)
{
if (e.Data != null) this.sbRedirectedOutput.Append(e.Data + Environment.NewLine);
//System.Diagnostics.Debug.WriteLine("proc_OutputDataReceived: Data:" + e.Data);
}
该过程将退出到一个隐藏窗口,并且所有输出都在事件处理程序中重定向和处理......这应该可以解决问题。请注意,重定向的输出如何进入sbRedirectedOutput
(一个 StringBuilder 实例)。在proc_ProcExited
事件处理程序中,它检查sbRedirectedOutput
将从 QB4.5 程序发出的消息“Oops Write failed”。
请注意,您可能需要在同一目录中包含 QB4.5 的运行时库...不是 100% 确定...这是几年...
你怎么看?
希望这会有所帮助,最好的问候,汤姆。