这两天做一个关于读取串口信息的程序,这个程序的两个关键点在于,读取串口中的信息,把信息写到当前光标所在的的位置。
读取串口信息的方法,这个容易,现循环获得当前有几个串口,添加到一个下拉框中
string [] ports=SerialPort.GetPortNames();
foreach(string port in ports)
{
cmbComSelect.Items.Add(port);
}
把读到的信息写到当前光标所在,我第一个想到的是SendMessage
int hwnd = WindowFromPoint(MousePosition.X, MousePosition.Y);//获取当前光标所在的窗口位置。
if (hwnd != 0 )
{
SendMessage(hwnd, WM_GETTEXT, sb.Length, sb);//读取当前光标所在的信息
sb.AppendLine(this.txtIn.Text);//在信息后面追加内容
SendMessage(hwnd, WM_SETTEXT, 0, sb);//把信息传递到光标所在
}
但这个方法有一个弊端,那就是WindowFromPoint(),限定于只能用于窗口,而且是一级窗体才行,比如说文本文档,在更具体的
文档里面就不行了,像Excel,word,IE里面都是不支持的。
因为根据方案是必须能在浏览器中支持的,so第一种方案就杯具了。
第二种方法是SendKeys,模拟键盘输入
sb.Append(serialPort.ReadExisting());//获取串口信息
int index = sb.ToString().Length;//计算有多少位需要传递
if (index > 0)
{
try
{
System.Windows.Forms.SendKeys.SendWait(sb.ToString(0, index));//传递内容
}
finally
{ }
}
这种方法也有一个弊端,那就是不支持IE浏览器,传递的内容和显示的内容不符,会出现数字的重复,但是在其他浏览器上测试没有问题。
可能是微软出的有冲突,呵呵。