CD Laufwerk rausfahren



  • Hallo,
    Ich weiß das ist keine leichte Frage aber ich stelle sie trotzdem.
    Wie fährt man ein optisches Laufwerk (CD,DVD) raus und wieder rein?
    Welche Hather benötige ich?
    Mein Betriebssystem ist MS Windows Professional. Ich arbeite mit dem Compiler MS Visual C++ 6.0 .

    Für eine Antwort wäre ich sehr dankbar.
    mfg Xclear



  • Hallo,
    Dafür gab's bereits einen Beitrag in den FAQ.



  • In dem Beispiel steht

    #include "stdafx.h"
    

    .
    Die Gänsefüßchen stehen ja dafür das sich die Datei im Projektverzeichniss befinden soll. Ich hab dan erstmal in Verzeichniss von MS Visual Studio nach der Datei gesucht und habe dan auch 5 Dateien mit dem Namen "stdafx.h" gefunden , die aber alle einen anderen Inhalt haben. Aus reiner Rutine habe ich erstmal Eine davon probiert und ins Projektverzeichnis gepackt und schon war der der fatal error (Include-Datei kann nicht geoeffnet werden: 'stdafx.h': No such file or directory) der immer beim Compilieren auftrat weg.
    Aber leider kommen jetzt beim Linken diese Fehler

    CD.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__mciSendStringA@16
    libcd.lib(crt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _main
    Debug/CD.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise
    

    Woran liegt das ,und wie kan ich das beheben?



  • du musst erst einmal ein richtiges projekt erstellen und den code dann dort reinkopieren. ich hab mir das aus der faq nicht durchgelesen, aber denke nicht das du alles so gemacht hast wie dort beschrieben. und bitte bevor du den leuten einfach immer wieder das laufwerk aufmachst, denk darüber nach ob das sinnvoll ist und ob das auch jeder möchte, aber mich würde es furchtbar stören!

    "stdafx.h" enthält vorkompilierte header, du musst sie nicht verwenden, wenn du nicht möchtest, aber erhöht die geschwindigkeit beim compilieren um einiges!

    und bitte lern dich mal bisschen besser in MS VC++ ein, danke 🙂

    MfG RadiatioN



  • Der Beitrag in der FAQ sollte aber dringend geändert / ergänzt werden... der dort beschriebene Weg ist nämlich miserabel! Welches CD-Laufwerk öffnet er denn (ich habe hier 3)...

    IMHO korrekt ist:

    #include <windows.h>
    #include <winioctl.h>
    #include <tchar.h>
    #include <stdio.h>
    
    int _tmain()
    {
      DWORD dwBytes;
      HANDLE hCdRom = CreateFile(_T("\\\\.\\F:"), 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);
    
      // Close the door:
      DeviceIoControl(hCdRom, IOCTL_STORAGE_LOAD_MEDIA, NULL, 0, NULL, 0, &dwBytes, NULL);
    
      CloseHandle(hCdRom);
    }
    


  • Bei mir kommen bei dem immer die Fehler

    error C2065: 'IOCTL_STORAGE_EJECT_MEDIA' : nichtdeklarierter Bezeichner
    error C2065: 'IOCTL_STORAGE_LOAD_MEDIA' : nichtdeklarierter Bezeichner
    

    Fehlt vieleicht irgendein Hather?



  • Füge noch oben eine

    #include <winioctl.h>
    

    ein



  • #include <windows.h> 
    
    BOOL DoOpenCdRom(void)  
    {  
      char chrRc[256];  
      char *ptrChrRc = &chrRc[0];  
      return mciSendString("Set CDAudio Door Open\0",ptrChrRc,256,NULL);  
    
    }  
    
    BOOL DoCloseCdRom(void)  
    {  
    
      char chrRc[256];  
      char *ptrChrRc = &chrRc[0];  
      return mciSendString("Set CDAudio Door Closed\0",ptrChrRc,256,NULL);  
    }  
    
    int main()  
    {  
       DoOpenCdRom();
       Sleep(1000);
       DoCloseCdRom(); 
    
     return 0; 
    }
    


  • MC Plus-Plus schrieb:

    
    

    ...snip...

    Und wo geb ich da jetzt an welches meiner 3 Laufwerke er verwenden soll?


Anmelden zum Antworten