[Программа] Пример использования MCI. - Zhyk.Ru Forums
Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация
Навигация
Zhyk.Ru LIVE! Реклама на Zhyk.Ru Доска почета top.zhyk.ru (beta) Премиум-аккаунт

Ответ
 
Опции темы Опции просмотра
Старый 16.12.2008, 07:16   #1
Заблокирован
 Капитан
Аватар для Ivan_32
 
Ivan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компанииIvan_32 душа компании
Регистрация: 14.05.2008
Сообщений: 253
Популярность: 1015
Сказал(а) спасибо: 666
Поблагодарили 451 раз(а) в 173 сообщениях
Отправить сообщение для Ivan_32 с помощью ICQ Отправить сообщение для Ivan_32 с помощью AIM Отправить сообщение для Ivan_32 с помощью Skype™
 
По умолчанию Пример использования 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. Устройство их парсит и делает то что приказано.
  Ответить с цитированием
Ответ

Метки
использования, пример, mci.

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
использования спелов героев для обмана и кила maxxx Архив Warcraft 3 14 07.11.2009 21:15

www.webmoney.ru
Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 15:09.

Пишите нам: forum@zhyk.ru
Copyright © 2019 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net