Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#从嵌入式系统(Windows CE 6.0)中的设备接收自定义消息?_C#_Embedded_Windows Ce - Fatal编程技术网

如何使用C#从嵌入式系统(Windows CE 6.0)中的设备接收自定义消息?

如何使用C#从嵌入式系统(Windows CE 6.0)中的设备接收自定义消息?,c#,embedded,windows-ce,C#,Embedded,Windows Ce,我有一个连着指纹传感器的装置。设备正在运行windows CE 6.0。我目前正在使用C#为该设备开发一个应用程序 我的问题是: 我使用pInvoke初始化与传感器的通信。然而,我仍然对如何配置我的应用程序以在触摸传感器时实现感到困惑。换句话说,如何在应用程序中捕获由传感器触发的事件 非常感谢您的建议,谢谢 **更新(尝试在单击“关闭窗口”按钮时自动告诉我的表单要执行的操作) 公共部分类表单1:表单 { internalMessageWindow msgReceived; 公共表格1() { 初

我有一个连着指纹传感器的装置。设备正在运行windows CE 6.0。我目前正在使用C#为该设备开发一个应用程序

我的问题是:

我使用pInvoke初始化与传感器的通信。然而,我仍然对如何配置我的应用程序以在触摸传感器时实现感到困惑。换句话说,如何在应用程序中捕获由传感器触发的事件

非常感谢您的建议,谢谢

**更新(尝试在单击“关闭窗口”按钮时自动告诉我的表单要执行的操作)

公共部分类表单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);

    }
}