Hi I want to do something when a memory stick attached to PC. Now I use a timer and check it in every tick whether any memory stick is plugged(use DriveInfo or with querying WMI) Is there any event driven model available to do? for example i use an event in my program that raise whenever a memory stick is plugged in to computer?
+1
A:
You want to handle the WM_DEVICECHANGE message in your wndproc. When you handle that, you can also call RegisterDeviceNotification
to get notification that the stick is being cleanly ejected.
When you recieve a WM_DEVICECHANGE
, you want to check the wParam - DBT_DEVICEARRIVAL
(0x800) is what you're looking for.
In C++, you should have no trouble with the wndproc. In c#, you'll want to override your main form's WndProc method and check m.Msg == 0x219
and m.WParam == 0x800
. Note that not ALL of these will be a memory stick - but you can use this to notify you to check for drive insertion rather than a timer.
Philip Rieck
2010-10-05 12:43:27
I don't know why when i do this, as I plug memory stick to PC, it raises more than 3 times ! following code is in C# : if (m.Msg == 0x219 }
dr_csharp
2010-10-05 13:40:21
It will raise multiple times as the device type is recognized and refined.
Philip Rieck
2010-10-05 13:50:40
This work properly : when m.Msg==0x219 and m.WParam==32768 it means "Plugged In" and when m.WParam=32772 it means "Plugged out"
dr_csharp
2010-10-05 14:01:52