Cdromlaufwerk eausfahren??



  • schau mal nach MciSendString



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • hier ein beispielcode:

    #include <windows.h>
    #pragma comment(lib,"winmm.lib")  //für MSV C++ 
    
    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(5000);
     DoCloseCdRom(); 
    
     return 0;
    }
    


  • #include <windows.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);
    }
    


  • holh schrieb:

    hier ein beispielcode:

    #include <windows.h>
    #pragma comment(lib,"winmm.lib")  //für MSV C++ 
    
    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(5000);
     DoCloseCdRom(); 
    
     return 0;
    }
    

    lol, den kenn ich sehr gut... den qc^^ wie heißt doch gleich die seite von der du den hast?

    ach ja, online-toturials^^ aber man muss halt die 2 zeile beachten, check ich au net aber is so^^



  • hm noch ne frage kanns sein das der qc da vom jochen kalmbvach nich in dev-c++ funzt? zumindest zeigt der mir einen fehler in der zeile

    DeviceIoControl(hCdRom, IOCTL_STORAGE_EJECT_MEDIA, NULL, 0, NULL, 0, &dwBytes, NULL);

    hm kannst du/ein anderer mir/uns sagen woran das liegt....



  • Was für ein Fehler kommt denn nicht?

    Falls die Defines fehlen, kannst Du das folgende einfügen...

    #define FILE_DEVICE_MASS_STORAGE        0x0000002d
    #define CTL_CODE( DeviceType, Function, Method, Access ) (                 \
        ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
    )
    #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
    #define METHOD_BUFFERED                 0
    #define FILE_READ_ACCESS          ( 0x0001 )    // file & pipe
    #define IOCTL_STORAGE_EJECT_MEDIA             CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
    #define IOCTL_STORAGE_LOAD_MEDIA              CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
    


  • nun gut aber dann kommt folgendern fehler:

    line 76 ::: [Warning] backslash and newline separated by space

    warum?

    gruß julian

    Edit: Wie kann in zeile 76 was falsch sein, wo es doch nur 34 zeilen gibt^^



  • In der WinAPI-FAQ wäre es auch zu finden gewesen: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39397.html



  • das geht auch nich, nene kann mal einer das andere da oben mit zeile 76 erklärn?^^



  • geeky schrieb:

    In der WinAPI-FAQ wäre es auch zu finden gewesen: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39397.html

    Da fehlt aber der aus meiner Sicht "bessere" Code mit dem DeviceIoControl (so kann man zumindest explizit angeben welches CD-ROM verwendet werden soll)



  • und was sagst du nu zu meinem zeilenproblem?^^ also da geht ja irgendwas nich...kannst das mal erklärn, wär nett...
    gruß juli



  • Da Du Deine Zeilen nicht postest sag ich dazu gar nichts...
    PS: Verwende doch ein gscheites IDE (VC2005 Express ist kostenlos!)



  • also das is jo dein qc den du da reingemacht mit deinen defines noch... aber er zeigt mir einen fehler in der nicht vorhandenen zeil 76...

    [warning]backslash and newline separated by space

    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <iostream>
    using namespace std;

    #define FILE_DEVICE_MASS_STORAGE 0x0000002d
    #define CTL_CODE( DeviceType, Function, Method, Access ) ( \
    ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
    )
    #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
    #define METHOD_BUFFERED 0
    #define FILE_READ_ACCESS ( 0x0001 ) // file & pipe
    #define IOCTL_STORAGE_EJECT_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
    #define IOCTL_STORAGE_LOAD_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)

    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);
    }



  • Wenn der ein Fehler in Zeile 76 in diesem Quellcode meint, dann musst DU wohl in einem Dev-C++ Forum fragen 😉



  • Mal angenommen, dass die Zeilenangabe fehlerhaft ist und sich die Warnung auf den vorliegenden Code bezieht, hängt es damit zusammen, dass beim Copy&Pasten Leerzeichen hinter das \ am Zeilenende gelangt sind, die dort nicht hinsollten.



  • hmhm das klingt überzeugent, kannst du mir auch verraten wo diese leerzeichen sind?
    mfg juli



  • Jochen Kalmbach schrieb:

    geeky schrieb:

    In der WinAPI-FAQ wäre es auch zu finden gewesen: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39397.html

    Da fehlt aber der aus meiner Sicht "bessere" Code mit dem DeviceIoControl (so kann man zumindest explizit angeben welches CD-ROM verwendet werden soll)

    Das Problem taucht in der FAQ auch auf: http://www.c-plusplus.net/forum/viewtopic-var-t-is-80618.html

    (Aber ich persönlich finde DeviceIoControl() auch schöner ^^)


Anmelden zum Antworten