CD DVD Laufwerk überwachen und automatisch schließen

L4a-Thompson

Grünschnabel
hallo,

ich bedrucke lightscribe rohlinge und um den effekt richtig zur geltung kommen zu lassen muß jeder rohling mindestens 3x bedruckt werden.
nun nervt es ziemlich das man nach jedem druckvorgang, da dann der rohling ausgeworfen wir, zum pc geht und das laufwerk alle 20 minuten wieder schließen muß.

gibt es ein klines tool oder kann mir jemand auf die schnelle eins schreiben das sich das laufwerk sofort wieder schließt sobalt es sich geöffnet hat damit der druckvorgang gleich weiter geht?

leider kenne ich mich mit programierung kein bischen aus, würde mir jemand ein solches tool schreiben?
code schnipsel habe ich schon gefunden für c++ um das laufwerk zu schließen was ich aber bis jetzt noch nicht finden konnte waren code schnipsel die zeigen ob das laufwerk geöffnet oder geschlossen ist

mfg
Thompson
 
hallo erstmal,

also wie man prüft ob das CD Laufwerk offen ist, hab ich leider keine ahnung, aber zum schliesen gibts die funktion

Code:
BOOL DoCloseCdRom(void)  
{  

  char chrRc[256];  
  char *ptrChrRc = &chrRc[0];  
  return mciSendString("Set CDAudio Door Closed\0",ptrChrRc,256,NULL);  
}

musst die windows.h includen
und wenn du das CD laufwerk schliesen willst einfach die Funktion ausführen
wenn du ne genaue zeit hast, kannst du diese ja mit Sleep(Zeit in ms) überprügen

hoffe das hilft ein wenig
 
das reicht leider nicht weil wenn ich nicht in einer gewissen zeit die schuplade schließe hört das druckprogramm auf und wartet bis ich auf ok drücke
ergo ist das selbe als wenn ich hin gehen würde und das laufwerk wieder schließe

was mir noch zu deinem schnipsel fehlt ist der code der das laufwerk überwacht und sobald sich etwas ändert das es dann den befehl schließen bekommt

aber danke schon mal für den teil abschnitt
 
wenn ich so im Internet rumlese glaube ich kann man nicht abfragen ob das Laufwerk offen ist, man kann nur prüfen ob eine CD eingelegt ist.

Die Funktion GetVolumeInformation hilft da glaube, wie die Funktioniet hab ich leider keine Ahnung
 
das hatte ich auch schon gefunden

also bleibt nix anderes wohl übrig als eine permanente controlle zu habe ob ein lightscribe rohling drin ist oder nicht wenn nicht dann schließe das laufwerk ob das dann aber das drucken stört bleibt abzuwarten
 
hiho ich hab folgendes im i-net gefunden

Code:
#include "stdafx.h"
#include <windows.h>
#include <string>
#include <winbase.h>
#include <sstream>
#include <iostream>


#pragma comment(lib,"winmm.lib")

/**

GetDriverType Return Values
---------------------------

DRIVE_UNKNOWN 	The drive type cannot be determined.
DRIVE_NO_ROOT_DIR 	The root path is invalid; for example, there is no volume is mounted at the path.
DRIVE_REMOVABLE 	The drive has removable media; for example, a floppy drive or flash card reader.
DRIVE_FIXED 	The drive has fixed media; for example, a hard drive, flash drive, or thumb drive.
DRIVE_REMOTE 	The drive is a remote (network) drive.
DRIVE_CDROM 	The drive is a CD-ROM drive.
DRIVE_RAMDISK 	The drive is a RAM disk.

**/


#if defined(UNICODE)
    typedef wchar_t character;
#else
    typedef char    character;
#endif


//Converts a Variable to a String
template<class T>
std::string Convert2String(T t)
{
   std::basic_ostringstream<character> outstream;

   outstream << t << std::endl;
   std::string str(outstream.str());

   str.resize(str.length()-1);

   return str;
}

void ChangeCDRoms(bool Open = true)
{
    std::string ActionString = "Open";

    if(Open != true)
        ActionString = "Closed";

    //Each character A-Z
    for(char i = (char)65; i < (char)91; i++)
    {
        //Create a String with the device character and "\\"
        std::string CDDriver = Convert2String(i) + std::string(":\\");

        //Get the driver type
        UINT uDriveType = ::GetDriveType(CDDriver.c_str());

        //It's a cdrom device
        if (uDriveType == DRIVE_CDROM)
        {
            //Return buffer
            char chrRc[256];

            // MessageBox(0, "Is a cdrom drive", CDDriver.c_str(), MB_OK);

            //Sets the alias
            ::mciSendString(std::string("Open "+ CDDriver + " Type cdaudio Alias cd").c_str(), &chrRc[0],256,NULL);

            //CDRom is now open, change Open to Close for closing
            ::mciSendString(std::string("Set cd Door " + ActionString).c_str(), &chrRc[0],256,NULL);
        }
    }

}

int main()
{
    ChangeCDRoms(true);
    Sleep(1000);
    ChangeCDRoms(false);

    return 0;
}

jetzt wollte ich mal fragen wieso beim kompilieren bei mir folgende fehler kommen?

C:\Dokumente und Einstellungen\Administrator\Desktop\cd laufwerk\cd laufwerk.cpp(77) : error C2039: 'mciSendString' : Ist kein Element von '`global namespace''
C:\Dokumente und Einstellungen\Administrator\Desktop\cd laufwerk\cd laufwerk.cpp(77) : error C2065: 'mciSendString' : nichtdeklarierter Bezeichner

ich benutze mv c++ 6.0
 
aso :o)
so etwas hatte ich heute morgen schon und die laufwerke liesen sich nicht mehr aufhalten außer durch einen neustart ^^

hätte ich mir eigentlich auch denken können mit einem loop am ende das kannte ich noch vom batch ^^
 
Zurück