鱼C论坛

 找回密码
 立即注册
查看: 3327|回复: 6

关于光驱的打开与关闭

[复制链接]
发表于 2014-7-29 10:31:57 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 青玄 于 2014-7-29 10:38 编辑
  1.                                                                                                                 .386
  2.                                                                                                                 .model flat,stdcall
  3.                                                                                                                 option casemap:none
  4. include windows.inc
  5. include winmm.inc
  6. includelib winmm.lib;
  7. include gdi32.inc
  8. includelib gdi32.lib
  9. include kernel32.inc
  10. includelib kernel32.lib
  11. include user32.inc
  12. includelib user32.lib
  13. include gdi32.inc
  14. includelib gdi32.lib
  15. include comctl32.inc
  16. includelib comctl32.lib
  17. DLG_MAIN equ   1000h
  18. ICO_MAIN equ   2000h
  19.    .data?
  20. hInstance dd ?;定义模块句柄
  21. dwReSize dd ?
  22. hDevice   dd ?
  23. hWinMain dd ?
  24.                                                                                                         .const
  25. musicName db "ring.wav",0
  26. szDevice db " CDAUDIO",0;CDAUDIO
  27.                                                                                                         .code
  28. _procPlay proc
  29.    local @stMCIOpen:MCI_OPEN_PARMS
  30.    LOCAL   @stMCIPlay:MCI_PLAY_PARMS
  31.    local  @stMCIClose:MCI_GENERIC_PARMS
  32.    mov @stMCIOpen.lpstrDeviceType,offset szDevice
  33.    mov @stMCIOpen.lpstrElementName,offset musicName  ;musicName应该就是音乐文件名吧。
  34.    invoke mciSendCommand,NULL,MCI_OPEN,MCI_OPEN_TYPE,addr @stMCIOpen
  35.    ;mciSendCommand发送消息给MCI设备
  36.    mov eax,@stMCIOpen.wDeviceID
  37.    mov hDevice,eax
  38.     mov eax,hWinMain
  39.    mov @stMCIPlay.dwCallback,eax
  40.    invoke  mciSendCommand,MCI_ALL_DEVICE_ID,MCI_SET,MCI_SET_DOOR_OPEN,addr @stMCIOpen  ;打开光驱
  41.    
  42.     mov eax,hWinMain
  43.    mov @stMCIClose.dwCallback,eax
  44.    
  45.    invoke mciSendCommand, addr hDevice, MCI_CLOSE,NULL, NULL                ;关闭光驱
  46.    ret
  47. _procPlay endp
  48. start:
  49. call _procPlay
  50. invoke ExitProcess,NULL
  51. end start
复制代码
大神们! 这个程序执行后只能打开光驱,却不能关闭光驱啊! 但是我明明调用了关闭的函数啊! 这是怎么回事儿啊!还请大神指教指教!

最佳答案

查看完整内容

青玄兄,问题解决了研究了一晚上,我想 源码贴出来和大家一起分享吧,让大家一起运行试试 .386 .model flat,stdcall option casemap:none include windows.inc include winmm.inc includelib winmm.lib; include gdi32.inc includelib gdi32.lib include kernel32.inc includelib kernel32.lib include user32.inc includelib user32.lib include gdi32.inc includelib gdi32.lib include comctl32.inc incl ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-29 10:31:58 | 显示全部楼层
青玄兄,问题解决了研究了一晚上,我想 源码贴出来和大家一起分享吧,让大家一起运行试试
.386
   .model flat,stdcall
   option casemap:none
include windows.inc
include winmm.inc
includelib winmm.lib;
include gdi32.inc
includelib gdi32.lib
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
include gdi32.inc
includelib gdi32.lib
include comctl32.inc
includelib comctl32.lib
DLG_MAIN equ   1000h
ICO_MAIN equ   2000h
   .data?
hInstance dd ?;定义模块句柄
dwReSize dd ?
hDevice   dd ?
hWinMain dd ?
DeviceIDC dd ?
   .const
szDevice db " CDAUDIO",0;CDAUDIO
   .code
_procPlay proc
   local @stMCIOpen:MCI_OPEN_PARMS
   LOCAL   @stMCIPlay:MCI_PLAY_PARMS
   invoke  RtlZeroMemory,addr @stMCIOpen,sizeof @stMCIOpen
   mov @stMCIOpen.lpstrDeviceType,offset szDevice
   invoke mciSendCommand,NULL,MCI_OPEN,MCI_OPEN_TYPE,addr @stMCIOpen
   ;mciSendCommand发送消息给MCI设备
  mov eax,@stMCIOpen.wDeviceID;;*******mov返回的设备名称
  push eax
  pop DeviceIDC;*****传给DeviceIDC
   invoke  mciSendCommand,MCI_ALL_DEVICE_ID,MCI_SET,MCI_SET_DOOR_OPEN,NULL
   call _CloseMP3
   ret
_procPlay endp
;************************************************* 关闭CD部分
_CloseMP3 proc _hwnd
local  @stMCIClose:MCI_GENERIC_PARMS
invoke RtlZeroMemory ,addr @stMCIClose,sizeof @stMCIClose
mov @stMCIClose.dwCallback,NULL
invoke mciSendCommand, DeviceIDC ,MCI_SET,MCI_SET_DOOR_CLOSED,0
invoke mciSendCommand,DeviceIDC ,MCI_CLOSE,MCI_WAIT,0
ret
_CloseMP3 endp
;*********************************
;***********主程序部分*********
start:
call _procPlay
invoke ExitProcess,NULL
end start

点评

恩恩! 好的!  详情 回复 发表于 2014-7-29 17:01
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-29 17:01:19 | 显示全部楼层
wiliam 发表于 2014-7-29 16:39
青玄兄,问题解决了研究了一晚上,我想 源码贴出来和大家一起分享吧,让大家一起运行试试
.386
   .model ...

恩恩! 好的!{:2_27:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-1 01:11:37 | 显示全部楼层
相当不错   厉害啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-3 09:56:24 | 显示全部楼层
厉害
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-4 02:32:28 | 显示全部楼层
看看 看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-4 11:13:19 | 显示全部楼层
楼主真牛逼:lol::lol::lol:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-7 21:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表