How to receive Plug & Play device notifications without a windows form

前端 未结 3 1874
星月不相逢
星月不相逢 2020-11-27 14:35

I am trying to write a class library that can catch the windows messages to notify me if a device has been attached or removed. Normally, in a windows forms app I would just

3条回答
  •  挽巷
    挽巷 (楼主)
    2020-11-27 15:03

    In Windows CE / Windows Mobile / SmartDevice projects, the standard Form does not provide an override to the WndProc method, but this can be accomplished by making a class based on Microsoft.WindowsCE.Forms.MessageWindow, creating a constructor that takes a form, hold that form in a local variable so that a method on that form can be called whenever the message is detected. Here's a scaled down sample to illustrate. Hope this is helpful to someone in the CE / Windows Mobile world.

      public class MsgWindow : Microsoft.WindowsCE.Forms.MessageWindow {
    
        public const int WM_SER = 0x500;
        public const int WM_SER_SCANDONE = WM_SER + 0;
    
        frmMain msgform { get; set; }
    
        public MsgWindow(frmMain msgform) {
          this.msgform = msgform;
        }
    
        protected override void WndProc(ref Microsoft.WindowsCE.Forms.Message m) {
          switch (m.Msg) {
            case WM_SER_SCANDONE:
              this.msgform.RespondToMessage(WM_SER_SCANDONE);
              break;
            default:
              break;
          }
          base.WndProc(ref m);
        }
    
      }
    
      public partial class frmMain : Form {
    
        public frmMain() {
          InitializeComponent();
        }
    
        public void RespondToMessage(int nMsg) {
          try {
            switch (nMsg) {
              case MsgWindow.WM_SER_SCANDONE:
                // do something here based on the message
                break;
              default:
                break;
            }
          } catch (Exception ex) {
            MessageBox.Show(string.Format("{0} - {1}", ex.Message, ex.ToString()), "RespondToMessage() Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            // throw;
          }
        }
    
      }
    

提交回复
热议问题