この質問により、現在の状況にたどり着きました 「WM_DEVICECHANGE」という名前は、現在のコンテキストには存在しません
しかし、発生したときに適切なメッセージを検出する際に問題が発生しています。使用しているメッセージ コードが間違っているのか、他の場所で間違いを犯したのかはわかりませんが、オーバーライドされたメソッドを使用して検出する方法を知りたいだけです。 USBの接続または取り外しのみ、またはWM_DEVICECHANGE内の各コードが何であるかを明示的に示すより決定的な記事がどこかにある場合は?
private const int WM_DEVICECHANGE = 0x0219;
private const int DBT_DEVICEARRIVAL = 0x8000; // system detected a new device
private const int DBT_DEVICEREMOVECOMPLETE = 0x8004; //device was removed
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
protected override void WndProc(ref Message m) {
base.WndProc(ref m);
switch (m.Msg) {
case WM_DEVICECHANGE:
if (m.WParam.ToInt64() == DBT_DEVICEARRIVAL)
MessageBox.Show("TEST");
if (m.WParam.ToInt64() == DBT_DEVICEREMOVECOMPLETE)
MessageBox.Show("DETACHED");
break;
}
}
私の問題は、上記の質問の例に従おうとすると、「演算子「==」はタイプ「System.IntPtr」および「int」のオペランドに適用できません」というエラーが表示されることですが、そのままにしておくとサンプルコードに示されているように、WParam の数値が DBT_DEVICEARRIVAL または DBT_DEVICEREMOVECOMPLETE の数値と一致しないため、トリガーされません。