能力值:
( LV2,RANK:10 )
|
-
-
2 楼
// 函数作用:控制所有光驱开关仓门的线程过程函数
// 函数参数:
// lpParam:自定义的可扩充的通用结构[MYGENERAL]
// 实例:创建一个根据不同的[lpParam]参数控制所有光驱开关仓门的线程
// CloseHandle(CreateThread(NULL, 0, &MyThread_CDROMCtrl, &g_stMyGeneral, 0, &dwThreadId));
DWORD WINAPI MyThread_CDROMCtrl(LPVOID lpParam)
{
CHAR szDriveOne[4], szDriveAll[105];
UINT uDriveStrLen, uIndex;
MCI_OPEN_PARMS stOpenParam;
// 将[操作标记]用[MYWM_OPERATE]消息传给[指定的窗口]
SendMessage(((LPMYGENERAL)lpParam)->hWnd, MYWM_OPERATE, 0, OPERATE_CDROM);
// 初始化取得每个驱动器盘符字串数组的索引
uIndex = 0;
// 取得所有驱动器盘符字串(含终止符)及字串长度(不含终止符)
uDriveStrLen = GetLogicalDriveStrings(104, &szDriveAll[0]);
// 用迭代的方法取得每个驱动器盘符字串(含终止符),并判断是否为光驱
while(uDriveStrLen != 0)
{
lstrcpyn(&szDriveOne[0], &szDriveAll[uIndex++ << 2], 4);
switch(GetDriveType(&szDriveOne[0]))
{
case DRIVE_CDROM:
stOpenParam.lpstrDeviceType = (LPCSTR)MCI_DEVTYPE_CD_AUDIO;
stOpenParam.lpstrElementName = &szDriveOne[0];
stOpenParam.wDeviceID = mciGetDeviceID(stOpenParam.lpstrElementName);
// 对光驱操作前,必须用[MCI_OPEN]命令初始化设备
mciSendCommand(0, MCI_OPEN, FLAG_MCIOPEN, (DWORD_PTR)&stOpenParam);
switch(((LPMYGENERAL)lpParam)->uFlag)
{
// 打开所有光驱仓门
case 0:
mciSendCommand(stOpenParam.wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, NULL);
break;
// 关闭所有光驱仓门
case 1:
mciSendCommand(stOpenParam.wDeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, NULL);
break;
}
// 对光驱操作后,必须用[MCI_CLOSE]命令释放设备
mciSendCommand(stOpenParam.wDeviceID, MCI_CLOSE, 0, NULL);
break;
}
uDriveStrLen -= 4;
}
// 将[操作标记]用[MYWM_OPERATE]消息传给[指定的窗口]
SendMessage(((LPMYGENERAL)lpParam)->hWnd, MYWM_OPERATE, 0, OPERATE_CDROM);
return(0);
}
|
能力值:
( LV10,RANK:170 )
|
-
-
3 楼
收到,感谢
|