关于光驱的打开与关闭
本帖最后由 青玄 于 2014-7-29 10:38 编辑.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 ?
.const
musicName db "ring.wav",0
szDevice db " CDAUDIO",0;CDAUDIO
.code
_procPlay proc
local @stMCIOpen:MCI_OPEN_PARMS
LOCAL @stMCIPlay:MCI_PLAY_PARMS
local@stMCIClose:MCI_GENERIC_PARMS
mov @stMCIOpen.lpstrDeviceType,offset szDevice
mov @stMCIOpen.lpstrElementName,offset musicName;musicName应该就是音乐文件名吧。
invoke mciSendCommand,NULL,MCI_OPEN,MCI_OPEN_TYPE,addr @stMCIOpen
;mciSendCommand发送消息给MCI设备
mov eax,@stMCIOpen.wDeviceID
mov hDevice,eax
mov eax,hWinMain
mov @stMCIPlay.dwCallback,eax
invokemciSendCommand,MCI_ALL_DEVICE_ID,MCI_SET,MCI_SET_DOOR_OPEN,addr @stMCIOpen;打开光驱
mov eax,hWinMain
mov @stMCIClose.dwCallback,eax
invoke mciSendCommand, addr hDevice, MCI_CLOSE,NULL, NULL ;关闭光驱
ret
_procPlay endp
start:
call _procPlay
invoke ExitProcess,NULL
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
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
invokeRtlZeroMemory,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
invokemciSendCommand,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 wiliam 发表于 2014-7-29 16:39
青玄兄,问题解决了研究了一晚上,我想 源码贴出来和大家一起分享吧,让大家一起运行试试
.386
.model ...
恩恩! 好的!{:2_27:} 相当不错 厉害啊 厉害 {:5_91:} 看看 看看 楼主真牛逼:lol::lol::lol:
页:
[1]