笔记本连台式机用PS2转接线调试的时候好的(笔记本发送一个按键,台式机接受一个),但笔记本连彩票机(也是PS2转换线)的时候,我发送一个按键,如果没问题的话 彩票机上也应该对应接受一个按键,但不知道为什么 彩票机一直在不停的接受这个按键 无法释放 ... 下面贴主要代码 大神解决public bool Open()
{
DCB dcbCommPort = new DCB();
COMMTIMEOUTS ctoCommPort = new COMMTIMEOUTS();
// 打开串口
hComm = CreateFile("COM3", GENERIC_WRITE | GENERIC_READ , 0, 0, OPEN_EXISTING, 0, 0);
if (hComm == INVALID_HANDLE_VALUE)
{
return false;
}
// 设置通信超时时间
GetCommTimeouts(hComm, ref ctoCommPort);
ctoCommPort.ReadTotalTimeoutConstant = ReadTimeout;
ctoCommPort.ReadTotalTimeoutMultiplier = 100;
ctoCommPort.WriteTotalTimeoutMultiplier = 100;
ctoCommPort.WriteTotalTimeoutConstant = 100;
SetCommTimeouts(hComm, ref ctoCommPort);
//// 设置串口
GetCommState(hComm, ref dcbCommPort);
dcbCommPort.fOutxCtsFlow = 524800;
dcbCommPort.BaudRate = BaudRate;
dcbCommPort.flags = 0;
dcbCommPort.flags |= 1;
if (Parity > 0)
{
dcbCommPort.flags |= 2;
}
dcbCommPort.Parity = Parity;
dcbCommPort.ByteSize = ByteSize;
dcbCommPort.StopBits = StopBits;
dcbCommPort.fOutxCtsFlow = 524800;
if (!SetCommState(hComm, ref dcbCommPort))
{
return false;
}
Opened = true;
return Opened;
} public bool Close()
{
if (hComm != INVALID_HANDLE_VALUE)
{
CloseHandle(hComm);
Opened = false;
return true;
}
return false;
} /// <summary>
/// 清空COM口缓冲区数据
/// </summary>
/// <returns></returns>
public bool ClearPortData()
{
if (hComm != INVALID_HANDLE_VALUE)
{
return PurgeComm(hComm, 1);
}
return false;
} //发送按键信息(16进制)
private void Send()
{
bool isOpen = false;
string getStr = Print(RaffleTicketPlay.快3, textBox1.Text);
string[] strs = getStr.Substring(0, getStr.Length - 1).Split(' ');
for (int i = 0; i < strs.Length; i++)
{
sc = new SerialCom();
isOpen = sc.Open(); //打开串口
if (isOpen)
{
int res = sc.Write(Encoding.UTF8.GetBytes(ToAscii(strs[i]))); //写信息
Thread.Sleep(30);
sc.ClearPortData(); //清楚数据
}
else
{
MessageBox.Show("未连接到串口");
}
sc.Close(); //关闭串口
}
}串口通信apic#
{
DCB dcbCommPort = new DCB();
COMMTIMEOUTS ctoCommPort = new COMMTIMEOUTS();
// 打开串口
hComm = CreateFile("COM3", GENERIC_WRITE | GENERIC_READ , 0, 0, OPEN_EXISTING, 0, 0);
if (hComm == INVALID_HANDLE_VALUE)
{
return false;
}
// 设置通信超时时间
GetCommTimeouts(hComm, ref ctoCommPort);
ctoCommPort.ReadTotalTimeoutConstant = ReadTimeout;
ctoCommPort.ReadTotalTimeoutMultiplier = 100;
ctoCommPort.WriteTotalTimeoutMultiplier = 100;
ctoCommPort.WriteTotalTimeoutConstant = 100;
SetCommTimeouts(hComm, ref ctoCommPort);
//// 设置串口
GetCommState(hComm, ref dcbCommPort);
dcbCommPort.fOutxCtsFlow = 524800;
dcbCommPort.BaudRate = BaudRate;
dcbCommPort.flags = 0;
dcbCommPort.flags |= 1;
if (Parity > 0)
{
dcbCommPort.flags |= 2;
}
dcbCommPort.Parity = Parity;
dcbCommPort.ByteSize = ByteSize;
dcbCommPort.StopBits = StopBits;
dcbCommPort.fOutxCtsFlow = 524800;
if (!SetCommState(hComm, ref dcbCommPort))
{
return false;
}
Opened = true;
return Opened;
} public bool Close()
{
if (hComm != INVALID_HANDLE_VALUE)
{
CloseHandle(hComm);
Opened = false;
return true;
}
return false;
} /// <summary>
/// 清空COM口缓冲区数据
/// </summary>
/// <returns></returns>
public bool ClearPortData()
{
if (hComm != INVALID_HANDLE_VALUE)
{
return PurgeComm(hComm, 1);
}
return false;
} //发送按键信息(16进制)
private void Send()
{
bool isOpen = false;
string getStr = Print(RaffleTicketPlay.快3, textBox1.Text);
string[] strs = getStr.Substring(0, getStr.Length - 1).Split(' ');
for (int i = 0; i < strs.Length; i++)
{
sc = new SerialCom();
isOpen = sc.Open(); //打开串口
if (isOpen)
{
int res = sc.Write(Encoding.UTF8.GetBytes(ToAscii(strs[i]))); //写信息
Thread.Sleep(30);
sc.ClearPortData(); //清楚数据
}
else
{
MessageBox.Show("未连接到串口");
}
sc.Close(); //关闭串口
}
}串口通信apic#
解决方案 »
- 【修改代码】怎样直接获取页面宽和高???
- 请教T-SQL语句能在C#程序里用吗?
- visual studio 中怎么才能把几个Textbox控件命名为一个数组啊,使其成为textbox(1),textbox(2)......这样
- 求助 数据库连接池问题
- 求一个C#鼠标轨迹记录回放的程序,百度悬赏分!
- 关于串口的问题,这串是是什么意思?怎么模拟它?
- 我要不行了,关于DataReader传递参数的问题,3天了,程序都没有进展……
- WPF,XAML中的对象和后台代码哪个先创建对象
- 我用C#,出现了这个问题,怎么解决呢?请大家帮我.
- 小白用C# WPF写了一个PING IP程序为什么运行界面一直卡死
- devexpress的dataNavigator怎么用啊
- 两个窗口传值问题
不知道楼主输入的是什么内容,另外 ToAscii 也没有啊。