質問: 0x0219, } protected override void WndProc(ref Message m) { switch ((WINDOW_MESSAGES)m.Msg) { case WINDOW_MESSAGES.WM_DEVICECHANGE: //何かしらの処理 break; } } ``` そもそも、VC#での監視のやり方が間違っているのか、 LPARAMの扱い方が変わっているのか、正直さっぱりです。 どうにかして、VC#でVC++と同様のLPARAMを取得する方法はありませんでしょうか? VC++, VC#共にそこまで経験が長いわけでもなく、久々に扱うので無茶苦茶なことを言っているかも知れませんが、双方の言語に理解が深い方のお力をお貸しください。 よろしくお願い致します。
回答: こんにちは。 WM_DEVICECHANGE メッセージはWindowsからトップレベルのウィンドウへ届くメッセージですので、VC++とVC#で異なるものが届くということはありえません。 ですので、C#側で受け取り損なっている可能がかなり高いです。 > > そもそも、VC#での監視のやり方が間違っているのか、 > > LPARAMの扱い方が変わっているのか、正直さっぱりです。 > > > C#はC++と異なり、原則として生ポインタを扱えませんので、ちょっと特殊な処理が必要になります。C#でリムーバブルメディアの着脱を検知する方法 その1 などが参考になるかも知れません。