디바이스 열기
[MCI 이 페이지와 연결된 기능은 레거시 기능입니다. MediaPlayer 이로 대체되었습니다. MediaPlayer Windows 10 및 Windows 11에 최적화되었습니다. 가능한 경우 새 코드에서 MCI 대신 MediaPlayer 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
디바이스를 사용하기 전에 열기(MCI_OPEN) 명령을 사용하여 초기화해야 합니다. 이 명령은 드라이버를 메모리에 로드하고(아직 로드되지 않은 경우) 후속 MCI 명령에서 디바이스를 식별하는 데 사용할 디바이스 식별자를 검색합니다. 새 디바이스 식별자를 사용하여 식별자가 유효한지 확인하기 전에 mciSendString 또는 mciSendCommand 함수의 반환 값을 확인해야 합니다. (mciGetDeviceID 함수를 사용하여 디바이스 식별자를 검색할 수도 있습니다.)
모든 MCI 명령 메시지와 마찬가지로 MCI_OPEN 연결된 구조를 갖습니다. 이러한 구조는 매개 변수 블록로 불리기도 합니다. MCI_OPEN 기본 구조는 MCI_OPEN_PARMS. 특정 디바이스(예: 파형 및 오버레이)에는 추가 선택적 매개 변수를 수용하기 위해 확장된 구조(예: MCI_WAVE_OPEN_PARMS 및 MCI_OVLY_OPEN_PARMS)가 있습니다. 이러한 추가 매개 변수를 사용할 필요가 없는 한 MCI 디바이스에서 MCI_OPEN_PARMS 구조를 사용할 수 있습니다.
열 수 있는 디바이스 수는 사용 가능한 메모리 양에 의해서만 제한됩니다.
별칭 사용
디바이스를 열 때 "별칭" 플래그를 사용하여 디바이스에 대한 디바이스 식별자를 지정할 수 있습니다. 이 플래그를 사용하면 파일 이름이 긴 복합 디바이스에 짧은 디바이스 식별자를 할당할 수 있으며 동일한 파일 또는 디바이스의 여러 인스턴스를 열 수 있습니다.
예를 들어 다음 명령은 디바이스 식별자 "birdcall"을 긴 파일 이름 C:\NABIRDS\SOUNDS\MOCKMTNG에 할당합니다. WAV:
mciSendString(
"open c:\nabirds\sounds\mockmtng.wav type waveaudio alias birdcall",
lpszReturnString, lstrlen(lpszReturnString), NULL);
명령 메시지 인터페이스에서 MCI_OPEN_PARMS 구조체의 lpstrAlias 멤버를 사용하여 별칭을 지정합니다.
디바이스 유형 지정
디바이스를 열 때 특정 디바이스 드라이버가 아닌 "형식" 플래그를 사용하여 디바이스 유형을 참조할 수 있습니다. 다음 예제에서는 웨이브폼 오디오 파일 C:\WINDOWS\CHIMES.WAV를 엽니다(“type” 플래그를 사용하여 waveaudio 디바이스 유형을 지정)하고 별칭 “차임”을 할당합니다.
mciSendString(
"open c:\windows\chimes.wav type waveaudio alias chimes",
lpszReturnString, lstrlen(lpszReturnString), NULL);
명령 메시지 인터페이스에서 "type" 플래그의 기능은 MCI_OPEN_PARMS 구조체의 lpstrDeviceType 멤버에 의해 제공됩니다.
단순 및 복합 디바이스
MCI는 디바이스 드라이버를 복합 또는 간단한 분류합니다. 복합 디바이스용 드라이버에는 재생을 위해 데이터 파일의 이름이 필요합니다. 간단한 디바이스용 드라이버는 그렇지 않습니다.
간단한 디바이스에는 cdaudio 및 videodisc 디바이스가 포함됩니다. 간단한 디바이스를 여는 방법에는 두 가지가 있습니다.
레지스트리 또는 SYSTEM.INI 파일에서 장치 이름이 포함된 null로 종료되는 문자열에 대한 포인터를 지정합니다.
예를 들어 다음 명령을 사용하여 videodisc 디바이스를 열 수 있습니다.
mciSendString("open videodisc", lpszReturnString,
lstrlen(lpszReturnString), NULL);
이 경우 "videodisc"는 레지스트리 디바이스 이름 또는 SYSTEM.INI의 [mci] 섹션입니다.
- 디바이스 드라이버의 실제 이름을 지정합니다. 그러나 디바이스 드라이버 파일 이름을 사용하여 디바이스를 열면 애플리케이션 디바이스가 특정하게 되며 시스템 구성이 변경되면 애플리케이션이 실행되지 않도록 할 수 있습니다. 파일 이름을 사용하는 경우 전체 경로나 파일 이름 확장자를 지정할 필요가 없습니다. MCI는 드라이버가 시스템 디렉터리에 있고 .DRV 파일 이름 확장자를 가진다고 가정합니다.
복합 디바이스에는 waveaudio 및 시퀀서 디바이스가 포함됩니다. 복합 디바이스의 데이터를 때때로 디바이스 요소라고도 합니다. 그러나 이 문서는 일반적으로 이 데이터를 파일로 참조하지만 경우에 따라 데이터가 파일로 저장되지 않을 수도 있습니다.
복합 디바이스를 여는 세 가지 방법이 있습니다.
- 디바이스 이름만 지정합니다. 이렇게 하면 파일 이름을 연결하지 않고 복합 디바이스를 열 수 있습니다. 대부분의 복합 디바이스는 기능(MCI_GETDEVCAPS)만 처리하고 이러한 방식으로 열릴 때(MCI_CLOSE) 명령을 닫습니다.
- 파일 이름만 지정합니다. 디바이스 이름은 레지스트리의 연결에서 결정됩니다.
- 파일 이름 및 디바이스 이름을 지정합니다. MCI는 레지스트리의 항목을 무시하고 지정된 디바이스 이름을 엽니다.
데이터 파일을 특정 디바이스와 연결하려면 파일 이름 및 디바이스 이름을 지정할 수 있습니다. 예를 들어 다음 명령은 파일 이름 MYVOICE.SND를 사용하여 waveaudio 장치를 엽니다.
mciSendString("open myvoice.snd type waveaudio", lpszReturnString,
lstrlen(lpszReturnString), NULL);
명령 문자열 인터페이스에서는 열린 명령과 함께 설명된 대로 대체 느낌표 형식을 사용하여 디바이스 이름 사양을 약식으로 지정할 수도 있습니다.
파일 이름 확장자를 사용하여 디바이스 열기
open(MCI_OPEN) 명령이 파일 이름만 지정하는 경우 MCI는 파일 이름 확장명을 사용하여 레지스트리의 목록 또는 시스템의 [mci 확장] 섹션에서 적절한 디바이스를 선택합니다. INI 파일. [mci 확장] 섹션의 항목은 다음 형식을 사용합니다.
filename_extension = device_name
MCI는 확장을 찾은 경우와 열린 명령에 디바이스 이름이 지정되지 않은 경우 device_name 암시적으로 사용합니다.
다음 예제에서는 일반적인 [mci 확장] 섹션을 보여 줍니다.
[mci extensions]
wav=waveaudio
mid=sequencer
rmi=sequencer
MCI는 이러한 정의를 사용하여 다음 명령이 실행되는 경우 waveaudio 디바이스를 엽니다.
mciSendString("open train.wav", lpszReturnString,
lstrlen(lpszReturnString), NULL);
새 데이터 파일
새 데이터 파일을 만들려면 빈 파일 이름을 지정하기만 하면 됩니다. MCI는 저장(MCI_SAVE) 명령을 사용하여 저장할 때까지 새 파일을 저장하지 않습니다. 새 파일을 만들 때 열린(MCI_OPEN) 명령을 사용하여 디바이스 별칭을 포함해야 합니다.
다음 예제에서는 새 waveaudio 파일을 열고, 기록을 시작하고 중지한 다음, 파일을 저장하고 닫습니다.
mciSendString("open new type waveaudio alias capture", lpszReturnString,
lstrlen(lpszReturnString), NULL);
mciSendString("record capture", lpszReturnString,
lstrlen(lpszReturnString), NULL);
mciSendString("stop capture", lpszReturnString,
lstrlen(lpszReturnString), NULL);
mciSendString("save capture orca.wav", lpszReturnString,
lstrlen(lpszReturnString), NULL);
mciSendString("close capture", lpszReturnString,
lstrlen(lpszReturnString), NULL);
공유 가능한 디바이스
열린(MCI_OPEN) 명령의 "공유 가능"(MCI_OPEN_SHAREABLE) 플래그를 사용하면 여러 애플리케이션이 동일한 디바이스(또는 파일) 및 디바이스 인스턴스에 동시에 액세스할 수 있습니다. 애플리케이션이 공유 가능한 디바이스 또는 파일을 여는 경우 다른 애플리케이션도 공유 가능한 디바이스로 열어 액세스할 수 있습니다. 공유 디바이스 또는 파일은 각 애플리케이션에 해당 운영 상태를 제어하는 매개 변수를 변경할 수 있는 기능을 제공합니다. 디바이스 또는 파일이 공유 가능으로 열릴 때마다 MCI는 식별자가 동일한 인스턴스를 참조하더라도 고유한 디바이스 식별자를 반환합니다.
애플리케이션이 공유 가능 여부를 지정하지 않고 디바이스 또는 파일을 여는 경우 애플리케이션이 디바이스를 닫을 때까지 다른 애플리케이션에서 액세스할 수 없습니다. 디바이스가 하나의 열린 인스턴스만 지원하는 경우, 공유 가능 플래그를 설정하면 열린 명령이 실패합니다.
애플리케이션이 디바이스를 열고 공유 가능으로 지정하는 경우 애플리케이션은 이 디바이스의 상태를 가정해서는 안 됩니다. 애플리케이션은 디바이스에 액세스하는 다른 애플리케이션의 변경 내용을 보정해야 할 수 있습니다.
대부분의 복합 파일은 공유할 수 없습니다. 그러나 여러 파일을 열거나 단일 파일을 여러 번 열 수 있습니다. 단일 파일을 여러 번 열면 MCI는 각각에 대해 독립적인 인스턴스를 만들고 각 인스턴스는 고유한 운영 상태를 갖습니다.
파일의 여러 인스턴스를 여는 경우 각각에 고유한 디바이스 식별자를 할당해야 합니다. 다음 섹션에 설명된 대로 별칭을 사용하여 각 파일에 고유한 이름을 할당할 수 있습니다.