如何使用C#从嵌入式系统(Windows CE 6.0)中的设备接收自定义消息?
我有一个连着指纹传感器的装置。设备正在运行windows CE 6.0。我目前正在使用C#为该设备开发一个应用程序 我的问题是: 我使用pInvoke初始化与传感器的通信。然而,我仍然对如何配置我的应用程序以在触摸传感器时实现感到困惑。换句话说,如何在应用程序中捕获由传感器触发的事件 非常感谢您的建议,谢谢 **更新(尝试在单击“关闭窗口”按钮时自动告诉我的表单要执行的操作)如何使用C#从嵌入式系统(Windows CE 6.0)中的设备接收自定义消息?,c#,embedded,windows-ce,C#,Embedded,Windows Ce,我有一个连着指纹传感器的装置。设备正在运行windows CE 6.0。我目前正在使用C#为该设备开发一个应用程序 我的问题是: 我使用pInvoke初始化与传感器的通信。然而,我仍然对如何配置我的应用程序以在触摸传感器时实现感到困惑。换句话说,如何在应用程序中捕获由传感器触发的事件 非常感谢您的建议,谢谢 **更新(尝试在单击“关闭窗口”按钮时自动告诉我的表单要执行的操作) 公共部分类表单1:表单 { internalMessageWindow msgReceived; 公共表格1() { 初
公共部分类表单1:表单
{
internalMessageWindow msgReceived;
公共表格1()
{
初始化组件();
this.msgReceived=新的internalMessageWindow(this);
}
私有void Form1\u加载(对象发送方、事件参数e)
{
msgReceived.MsgEvntArg+=新事件处理程序(messageWindow_MsgEvntArg);
}
void messageWindow\u MsgEvntArg(对象发送方,MessageGetEvent e)
{
Show(例如message.ToString());
}
}
公共类MessageGetEvent:EventArgs
{
私人消息(private Message);;
public MessageGetEvent(Message msg)
{
_消息=消息;
}
公共信息
{
获取{return\u message;}
}
}
公共类internalMessageWindow:MessageWindow
{
公共常数int WM_CLOSE=0x0010;
表格参考表格;
公共事件事件处理程序MsgEvntArg;
公共内部消息窗口(表单引用表单)
{
this.referedForm=referedForm;
}
受保护的覆盖无效WndProc(参考消息消息消息)
{
if(MsgEvntArg!=null)
MsgEvntArg(这是新的MessageGetEvent(msg));
//开关(msg.msg)
//{
////如果消息是感兴趣的,则调用
////用作回调函数,以执行响应消息的操作。
//案例WM_结束:
//if(MsgEvntArg!=null)
//MsgEvntArg(这是新的MessageGetEvent(msg));
//
//中断;
//}
基本WndProc(参考msg);
}
}
您应该提供更多关于传感器的信息,以及传感器如何连接到主板/处理器。它可能需要一个驱动程序(例如,如果它是通过USB连接的),或者您可能需要了解应该使用哪个接口和驱动程序来交换信息。如果是UART windows CE提供标准API,如果是另一条总线(I2C、SPI等),您可能需要了解如何与总线驱动程序接口(一些公司提供应用程序库来实现这一点)。好的,显然我发现我只需要使用createfile和deviceiocontrol打开设备并与之通信。每当我触摸传感器时,它都会返回一条0x0412的窗口消息,类似于我单击close window(关闭窗口)时,它会生成一条0x0010的消息。我知道我需要重写WndProc函数,以便告诉我的应用程序在收到窗口消息时该怎么做。但我似乎无法将WndProc函数同步到我的应用程序。简言之,我不知道如何将windows消息自动传递到WndProc以进行重写。
public partial class Form1 : Form
{
internalMessageWindow msgReceived;
public Form1()
{
InitializeComponent();
this.msgReceived = new internalMessageWindow(this);
}
private void Form1_Load(object sender, EventArgs e)
{
msgReceived.MsgEvntArg += new EventHandler<MessageGetEvent>(messageWindow_MsgEvntArg);
}
void messageWindow_MsgEvntArg(object sender, MessageGetEvent e)
{
MessageBox.Show(e.message.ToString());
}
}
public class MessageGetEvent : EventArgs
{
private Message _message;
public MessageGetEvent(Message msg)
{
_message = msg;
}
public Message message
{
get { return _message; }
}
}
public class internalMessageWindow : MessageWindow
{
public const int WM_CLOSE = 0x0010;
Form referedForm;
public event EventHandler<MessageGetEvent> MsgEvntArg;
public internalMessageWindow(Form referedForm)
{
this.referedForm = referedForm;
}
protected override void WndProc(ref Message msg)
{
if (MsgEvntArg != null)
MsgEvntArg(this, new MessageGetEvent(msg));
//switch (msg.Msg)
//{
// // If message is of interest, invoke the method on the form that
// // functions as a callback to perform actions in response to the message.
// case WM_CLOSE:
// if (MsgEvntArg != null)
// MsgEvntArg(this, new MessageGetEvent(msg));
//
// break;
//}
base.WndProc(ref msg);
}
}