CD- Laufwerk bei MCI wechseln



  • Hallo Leute,

    Ich probiere gerade etwas mit der MCI herum. Mit dieser kann ich ja auch CDs wiedergeben. Nun hat mein Rechner aber zwei Laufwerke und daraus ergibt sich meine Frage: Wie kann ich einstellen, dass statt der CD in Laufwerk F:\ die CD in Laufwerk G:\ abgespielt wird?

    Zudem wäre ich sehr erfreut, wenn ihr mir vielleicht einen Link zu einem gut verständlichen Tutorial zur MCI geben könntet!!!

    Vielen Dank für eure Hilfe,
    Euer Entertainer



  • #include "stdafx.h"
    
    void ejectmedia(char *laufwerksbuchstabe, int openDrive);
    
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    	ejectmedia("f:",1);	// Laufwerksklappe öffnen
    	ejectmedia("f:",0);	// ...und wieder schließen
    
    	return 0;
    }
    
    void ejectmedia(char *laufwerksbuchstabe, int openDrive)
    {
    	char mciS[500];
    
    	// Laufwerk 'laufwerksbuchstabe' als cdaudio-Gerät mit dem Alias 'cdlw' öffnen:
    	wsprintf(mciS,"open %s type cdaudio alias cdlw",laufwerksbuchstabe);
    	mciSendString(mciS,NULL,0,NULL);
    
    	if (openDrive>0)
    	{
    		mciSendString("set cdlw door open",NULL,0,NULL);
    	}
    	else
    	{
    		mciSendString("set cdlw door closed",NULL,0,NULL);
    	}
    
    	return;
    }
    

    ...prinzipiell also das laufwerk einfach mit einem alias-namen öffnen und dann bei weiteren Befehlen nicht cdaudio sondern den Alias-Namen angeben...



  • Die IMHO bessere Lösung ist:

    #include <windows.h> 
    #include <tchar.h> 
    #include <stdio.h> 
    
    int _tmain() 
    { 
      DWORD dwBytes; 
      HANDLE hCdRom = CreateFile(_T("\\\\.\\M:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); 
      if (hCdRom == INVALID_HANDLE_VALUE) 
      { 
        _tprintf(_T("Error: %x"), GetLastError()); 
        return 1; 
      } 
    
      // Open the door: 
      DeviceIoControl(hCdRom, IOCTL_STORAGE_EJECT_MEDIA, NULL, 0, NULL, 0, &dwBytes, NULL); 
    
      Sleep(1000);
    
      // Close the door: 
      DeviceIoControl(hCdRom, IOCTL_STORAGE_LOAD_MEDIA, NULL, 0, NULL, 0, &dwBytes, NULL); 
    
      CloseHandle(hCdRom); 
    }
    

Anmelden zum Antworten