|
16.12.2008, 07:16
|
#1
|
|
|
|
Капитан
|
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
|
Пример использования MCI.
Простенький пример использования MCI для повелевания CDRom.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Все для RadASM + MASMv9
CDRomEject.asm
Код:
.386
.model flat,stdcall
option casemap:none
include CDRomEject.inc
include winmm.inc
includelib winmm.lib
.data
mMess db "Open CD/DVD device?"
mmS0 db "Set cdaudio door open wait",0
mmS1 db "Set cdaudio door closed wait",0
Abt db "Just a sample of using MCI device by Ivan_32.",0
AbtC db "About",0
.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke GetCommandLine
invoke InitCommonControls
mov CommandLine,eax
invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
invoke ExitProcess,eax
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
mov wc.cbSize,sizeof WNDCLASSEX
mov wc.style,CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc,offset WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,DLGWINDOWEXTRA
push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+1
mov wc.lpszMenuName,0
mov wc.lpszClassName,offset ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx,addr wc
invoke CreateDialogParam,hInstance,IDD_DIALOG,NULL,addr WndProc,NULL
invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd
.while TRUE
invoke GetMessage,addr msg,NULL,0,0
.BREAK .if !eax
invoke TranslateMessage,addr msg
invoke DispatchMessage,addr msg
.endw
mov eax,msg.wParam
ret
WinMain endp
ThreadProcOpen proc lparam:DWORD
invoke mciSendString,addr mmS0,0,0,0
ret
ThreadProcOpen endp
ThreadProcClose proc lparam:DWORD
invoke mciSendString,addr mmS1,0,0,0
ret
ThreadProcClose endp
ThreadProcAbout proc lparam:DWORD
invoke MessageBox,0,addr Abt,addr AbtC,MB_OK
ret
ThreadProcAbout endp
WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL ps:PAINTSTRUCT,hDC:HDC,pRect:RECT
mov eax,uMsg
.if eax==WM_INITDIALOG
push hWin
pop hWnd
invoke SetLayeredWindowAttributes,[hWnd],0,200,LWA_ALPHA
.elseif eax==WM_COMMAND
mov eax,wParam
and eax,0FFFFh
.if eax==IDC_BTN1
invoke CreateThread,0,20,addr ThreadProcOpen,0,0,0
.elseif eax==IDC_BTN2
invoke CreateThread,0,20,addr ThreadProcClose,0,0,0
.endif
.if eax==IDC_BTN3
invoke CreateThread,0,20,addr ThreadProcAbout,0,0,0
.endif
; .elseif eax==WM_SIZE
.elseif eax==WM_LBUTTONDOWN
invoke ReleaseCapture
invoke SendMessage,hWnd,WM_SYSCOMMAND,61458,0
.elseif eax==WM_PAINT
invoke BeginPaint,hWnd,addr ps
invoke GetWindowDC,hWnd
mov hDC,eax
mov pRect.left,0
mov pRect.right,122
mov pRect.top,0
mov pRect.bottom,144
invoke FillRect,hDC,addr pRect,COLOR_WINDOW+5
invoke EndPaint,hWnd,addr ps
.elseif eax==WM_CLOSE
invoke DestroyWindow,hWin
.elseif uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.else
invoke DefWindowProc,hWin,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
WndProc endp
end start
CDRomEject.inc
Код:
include windows.inc
include user32.inc
include kernel32.inc
include shell32.inc
include comctl32.inc
include comdlg32.inc
includelib user32.lib
includelib kernel32.lib
includelib shell32.lib
includelib comctl32.lib
includelib comdlg32.lib
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
IDD_DIALOG equ 1000
IDC_BTN1 equ 1001
IDC_BTN2 equ 1002
IDC_BTN3 equ 1003
.const
ClassName db 'DLGCLASS',0
AppName db 'Dialog as main',0
AboutMsg db 'MASM32 RadASM Dialog as main',13,10,'Copyright © MASM32 2001',0
.data?
hInstance dd ?
CommandLine dd ?
hWnd dd ?
Проект самого диалога был создан автоматикой но самому его запомнить тоже несложно.
Как видно из кода, некому MCI устройству посылаются команнды а именно строки mmS0 и mmS1. Устройство их парсит и делает то что приказано.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 08:27.
|
|