PDA

View Full Version : سوال: Eject کردن درايو CD-ROM يا DVD-ROM



A_Salimi
دوشنبه 10 فروردین 1388, 20:30 عصر
لطفا يک راه ساده و سريع براي Eject کردن درايو CD-ROM يا DVD-ROM بگيد.

من چند تا تابع ديدم که نتونستم درست ازشون استفاده کنم :

مثل :

mciSendString
و استفاده از اکتيوايکس کنترل MCI

Nima_NF
سه شنبه 11 فروردین 1388, 02:24 صبح
مثلا به این شکل:



TCHAR returnString[1024];

myError = mciSendString (TEXT("set cdaudio door open wait"), returnString,
sizeof (returnString) / sizeof (TCHAR), hwnd) ;

برای بستن، به جای door open از door closed استفاده کنید.
ضمنا فایل Winmm.lib را به لینکر اضافه کنید

A_Salimi
سه شنبه 11 فروردین 1388, 14:24 عصر
با تشکر


دو تا سوال :

1-در پارامتر آخر hwndCallback دقیقا هندل یه چه چیزیه؟

Handle to a callback window if the "notify" flag was specified in the command string.


2-سوال دوم اینه که اگه بیش از یک درایو داشته باشیم این دستور کدوم رو باز میکنه؟من قصد دارم درایو مورد نظرم را باز کنم اما همیشه اولین درایو باز میشود.

Nima_NF
چهارشنبه 12 فروردین 1388, 00:16 صبح
1- شما هندل آخر را همیشه NULL قرار دهید.
مگر زمانی که فلگ Notify را انتخاب کرده اید، فقط در آن صورت یک تابع callback می نویسید که پیام های مربروطه در آن پردازش شود. که شما نیاز ندارید.
من اشتباها hwnd نوشتم.

2- اولین درایور CD را.

اگر می خواهید خودتان درایو خاصی را باز کنید باید از تابع mciSendCommand و فلگ MCI_OPEN استفاده کنید، سپس در ساختار مربروطه نام یا درایو دستگاه مورد نظر را وارد کنید تا همان را باز کند.
اگر می خواهید اتومات در سیستم جستجو کند و یکی را باز کند باید به نحوی از رجیستری device driver های موجود در سیستم را بدست بیاورید (باید بررسی کنید تا بفهمید از کجای رجیستری) و سپس با توجه به آن lpstrDeviceType و lpstrElementName را تعیین کنید:



UINT wDeviceID;
DWORD dwReturn;
MCI_OPEN_PARMS mciOpenParms;

mciOpenParms.lpstrDeviceType = "cdaudio"; // or constant identifier of you CD-rom ...
mciOpenParms.lpstrElementName = "F:";

if (dwReturn = mciSendCommand(NULL, MCI_OPEN ,
MCI_OPEN_TYPE | MCI_OPEN_ELEMENT | MCI_OPEN_SHAREABLE,
(DWORD)(LPVOID) &mciOpenParms))
{
//error
}


سپس با کد زیر آن را Eject می کنیم:



dwReturn = mciSendCommand(mciOpenParms.wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, 0);



برای مثال دیگر از این لینک استفاده کنید. (http://www.codeproject.com/KB/system/eject_cdrom.aspx) (با استفاده از MCI_SET_DOOR_OPEN)