PDA

View Full Version : پیام اضافه شدن یا کم شدن یک درایو به ویندوز



hossien
پنج شنبه 22 فروردین 1387, 12:59 عصر
سلام
لطفا اگر کسی درمورد اینکه چگونه می توان از ویندوز این رخداد که درایوی( سی دی، یو اس بی، مموری استیک یا ...) اضافه یا کم شده دریافت کرد، اطلاعاتی دارد مطرح کند.
ممنون

Nima_NF
پنج شنبه 22 فروردین 1387, 15:17 عصر
در این گونه موارد پیام WM_DEVICECHANGE ارسال می شود که می توانید از آن استفاده کنید ،

مثلا در این پیام دریافت DBT_DEVICEARRIVAL اضافه شدن رسانه یا وسیله ای را نشان می دهد و DBT_DEVICEREMOVECOMPLETE حذف شدن یا خارج شدن آن را نشان می دهد.

موفق باشید

A_Salimi
پنج شنبه 22 فروردین 1387, 16:36 عصر
به این لینکها مراجعه کنید :




http://support.microsoft.com/kb/163503

http://69.10.233.10/KB/system/Message_Spy.aspx

http://www.eggheadcafe.com/forumarchives/vcmfc/Oct2005/post24541804.asp

hossien
پنج شنبه 22 فروردین 1387, 19:00 عصر
سلام
ممنون از جوابتون، ولی همانطور که گفتم من می خواهم از اضافه شدن یک "درایو" با اطلاع بشم، حالا این درایو به هر صورت که به ویندوز اضافه شده مهم نیست( من در مورد CD یا USB این کار را کرده ام ولی می خواهم این پیام وقتی به برنامه من بیاید که یک درایو یعنی یک وسیله ذخیره سازی داده ها( Storage ) مثلا یک دوربین حافظه دار یا هر نوع دیگر، به سیستم اضافه شود، وقتی ویندوز با چنین حالتی روبرو می شود یک پنجره می آورد که فکر کنم پنجره Auto read باشد) ،
ممنون

hossien
شنبه 24 فروردین 1387, 18:33 عصر
سلام
من 2 روز صبر کردم، ولی مثل اینکه کسی جواب این سوال رو نمی دونه!!!
من توی جستجو هام به این مطلب رسیدم که برای اینکه رخدادی به برنامه من ارسال شود در مود یوزر باید تابع RegisterDeviceNotification یا در مود درایور باید تابع IoRegisterPlugPlayNotification رو فراخوانی کنم، و این دو تابع هیچ فرقی در این کاربرد باهم ندارند، ولی برای بکار بردن تابع RegisterDeviceNotification نیاز به کلاسهای GUID برای تمام این درایوها است که من نمی تونم اونا رو پیدا کنم، کسی میتونه به من در این زمینه کمک کنه؟
ممنون

Nima_NF
شنبه 24 فروردین 1387, 22:05 عصر
در صفحه زیر از سمت چپ می توانید class guid برخی دیگر از ابزار مانند disk و .. را نیز بیابید:
http://msdn2.microsoft.com/en-us/library/bb663102.aspx

توابع زیر را نیز برای شمارش و دریافت guid ها بررسی کنید:
SetupDiEnumDeviceInfo
SetupDiGetDeviceInterfaceDetail
SetupDiEnumDeviceInterfaces

دو صفحه زیر را برای نمونه ها کمک می کند:
http://groups.google.com/group/microsoft.public.de... (http://groups.google.com/group/microsoft.public.development.device.drivers/browse_thread/thread/bf758e3bcfcbffbb/6f7e637023006253)
http://groups.google.com/group/microso... (http://groups.google.com/group/microsoft.public.development.device.drivers/browse_thread/thread/47322a079ae87adc/09e0c366cacda5c0?q=%22How%2Bto%2Bmatch%2Bbetween%2 Bphysical%2Busb%2Bdevice%2Band%2Bits%2Bdrive%2Blet ter%22&_done=%2Fgroups%3Fas_q%3D%22Ho)

hossien
سه شنبه 27 فروردین 1387, 06:43 صبح
سلام
با تشکر از جواب شما، از این روش( SetupDiXXXX ) هم استفاده کردم ولی موثر نبود،
از DirectoryNotifyChange هم استفاده کردم ولی متاسفانه آن هم موثر نبود،
در این حالت من کارت حافظه را از داخل حافظه خوان خارج می کنم و سپس دوباره آن را در داخل حافظه خوان جاسازی می کنم، ویندوز متوجه می شود( با نمایش پنجره "What do you want Windows to do" ) ولی در هیچ یک از این عملیات برنامه من متوجه نمی شود.
متشکرم