Этот вопрос привел меня туда, где я сейчас нахожусь. имя '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.