문제

누군가 알고있는 방법을 프로그래밍 방식으로 CD 를 닫 트레이 Windows2000 또는 더 높은?열 CD 트레이 존재하지만,나는 수 없는 것 그것을 가까이에서 W2k.

저는 특별히 찾는 방법을 이렇게서 배치 파일,가능한 경우이지만,API 있는 것입니다.

도움이 되었습니까?

해결책

여기에는 쉬운 방법을 사용하여 Win32API:


[DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi)]
        protected static extern int mciSendString(string lpstrCommand,StringBuilder lpstrReturnString,int uReturnLength,IntPtr hwndCallback);

 public void OpenCloseCD(bool Open)
 {
    if (Open)
    {
        mciSendString("set cdaudio door open", null, 0, IntPtr.Zero);
    }
    else
    {
        mciSendString("set cdaudio door closed", null, 0, IntPtr.Zero);
    }
}

다른 팁

나의 종류는 다음과 같이 사용하 DeviceIOControl 로 그것은 나에게 가능성을 꺼내기 어떠한 종류의 이동식 드라이브(등의 USB 플래시 디스크 뿐만 아니라 CD 쟁반).Da codez 을 제대로 꺼내기 디스크를 사용하여 DeviceIOControl(다만 추가 적절한 오류 처리):

bool ejectDisk(TCHAR driveLetter)
{
  TCHAR tmp[10];
  _stprintf(tmp, _T("\\\\.\\%c:"), driveLetter);
  HANDLE handle = CreateFile(tmp, GENERIC_READ, FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
  DWORD bytes = 0;
  DeviceIoControl(handle, FSCTL_LOCK_VOLUME, 0, 0, 0, 0, &bytes, 0);
  DeviceIoControl(handle, FSCTL_DISMOUNT_VOLUME, 0, 0, 0, 0, &bytes, 0);
  DeviceIoControl(handle, IOCTL_STORAGE_EJECT_MEDIA, 0, 0, 0, 0, &bytes, 0);
  CloseHandle(handle);
  return true;
}

는 것으로 나타났 안드레아스 magnusson 에게 대답지 않은 매우 동일하게 작동으로 탐색기의 꺼내기 버튼을 했습니다.특히,드라이브 없이 회색으로 표시 탐색기에서 사용하는 안드레아스'코드만 사용한 경우에는 꺼내기 명령입니다.그래서 나는 몇 가지 조사하고 있습니다.

I ran API 모니터링 실행하는 동안에는 꺼내기 명령에서 탐색기(윈도우 7SP1 64-bit).또한 좋은 MSKB 문서에 165721 제목 는 방법을 배출이 이동식 미디어에서 윈도우 NT/Windows2000 또는 Windows XP.가장 흥미로운 부분의 MSKB 문서에 인용 below:

  1. 전화 CreateFile 와 GENERIC_READ|는 해당,FILE_SHARE_READ|FILE_SHARE_WRITE 및 OPEN_EXISTING.이 lpFileName 매개 변수해야\.\X:(여기서 X 는 실제 드라이브 문자).다른 모든 매개변수할 수 있습니다.
  2. 잠금 볼륨을 발행하여 FSCTL_LOCK_VOLUME IOCTL 을 통해 DeviceIoControl.는 경우에는 다른 응용 프로그램이나 시스템을 사용하여 볼륨을 이 IOCTL 실패합니다.이 함수는 성공적으로 반환되면 응용 프로그램은 자주 묻는 질문에 대한 답변을 볼륨에 의해 사용되지 않은 다른 것에는 시스템입니다.
  3. 제 볼륨을 발행하여 FSCTL_DISMOUNT_VOLUME IOCTL.이로 인해 파일 시스템을 제거하는 모든 지식의 볼륨 및 내부 정보를 삭제할 수 있는 볼륨에 대한 유지.
  4. 지 확인하는 미디어에 의해 제거 될 수 있는 발행 IOCTL_STORAGE_MEDIA_REMOVAL IOCTL.설정 PreventMediaRemoval 회원의 PREVENT_MEDIA_REMOVAL 구조를 거짓 호출하기 전에 이 IOCTL.이를 중지에서 장치를 제거 방지합니다.
  5. 꺼내기 미디어 IOCTL_STORAGE_EJECT_MEDIA IOCTL.는 경우 이 장치에 허용하지 않는 자동적인 방출,다음 IOCTL_STORAGE_EJECT_MEDIA 건너뛸 수 있고 사용자 지시할 수 있을 제거합니다.
  6. 닫량 손잡이에서 얻은 첫 번째 단계는 문제 FSCTL_UNLOCK_VOLUME IOCTL.이를 통해 드라이브를 사용하여 다른 프로세스입니다.

안드레아스의 응답 MSKB 문서에,그리고 내 API 스니핑의 탐험은 다음과 같이 요약할 수 있습니다:

  1. CreateFile 라는 볼륨을 열고.(모든 방법).
  2. DeviceIoControlFSCTL_LOCK_VOLUME.(모든 방법).
  3. DeviceIoControlFSCTL_DISMOUNT_VOLUME.(안드레아스와 MSKB 방법니다.탐색기에 호출하지 않습니다 이를 위해 몇 가지 이유입니다.이러한 것이 무엇 영향을 미치는지 여부를 드라이브의 회색으로 탐색기에서는 없습니다.을 탐색기에 전화하지 않 이).
  4. DeviceIoControlIOCTL_STORAGE_MEDIA_REMOVALPREVENT_MEDIA_REMOVAL 회원 로 설정 FALSE (MSKB 및 탐색기 방법입니다.이 단계는 누락에서 안드레아스의 답변).
  5. DeviceIoControlIOCTL_STORAGE_EJECT_MEDIA (안드레아스와 MSKB 문서에)또는 IOCTL_DISK_EJECT_MEDIA (탐색기참고 이러했 사용 및 대체로 저장소 IOCTL.지 탐색기 여전히 사용하는 오래된 하나입니다).

을 체결하고,내가 결정을 설명한 절차에 따라에서 MSKB 문서에,그것이 될 듯하는 가장 철저하고 완전한 절차에 백업되는 MSKB 문서에.

Nircmd 은 매우 편리 프리웨어 명령 라인 유틸리티와 다양한 옵션을 포함하여,개폐 CD 트레이입니다.

을 닫 드라이브 트레이지 설명 그러나 사용하는 대신 DeviceIoControl 함께 IOCTL_STORAGE_EJECT_MEDIA 당신이 필요하 DeviceIoControl 함께 IOCTL_STORAGE_LOAD_MEDIA.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top