Narf! Geschrieben 1. Oktober 2002 Geschrieben 1. Oktober 2002 Hallo Mit-Informatiker! Habe ein Problem: Wie kann ich in VC++6 die Laufwerke erkennen und ihren Buchstaben (z.B. CD-ROM-LW, F:) und mir den Inhalt in einem Listenfeld oder Tree anzeigen lassen?
Narf! Geschrieben 1. Oktober 2002 Autor Geschrieben 1. Oktober 2002 Wie kann ich prüfen ob das CD-Laufwerk geöffnet oder geschlossen ist und ob sich eine CD darin befindet oder nicht? Gibt es da irgend ein Steuerelement?
ffGebaeck Geschrieben 1. Oktober 2002 Geschrieben 1. Oktober 2002 Hi, so, damit listest du alle Laufwerke in eine listbox, die listbox heist bei mir m_ctrlDrive, int nPos = 0; UINT nCount = 0; TCHAR szDrive[4]; strcpy(szDrive, "?:\\"); DWORD dwDriveList = ::GetLogicalDrives (); while (dwDriveList) { if (dwDriveList & 1) { szDrive[0] = 0x41 + nPos; //if(::GetDriveType(szDrive) == DRIVE_CDROM) m_ctrlDrive.AddString(szDrive); } dwDriveList >>= 1; nPos++; } und bittschö, mit dieser funktion öffnest/schliesst du dein CDRom void COpenCDRomDlg::OpenCloseCD(BOOL bOpenDrive, TCHAR cDrive) { MCI_OPEN_PARMS op; MCI_STATUS_PARMS st; DWORD flags; TCHAR szDriveName[4]; strcpy(szDriveName, "X:"); ::ZeroMemory(&op, sizeof(MCI_OPEN_PARMS)); op.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_CD_AUDIO; if(cDrive > 1) { szDriveName[0] = cDrive; op.lpstrElementName = szDriveName; flags = MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT | MCI_OPEN_SHAREABLE; } else flags = MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_OPEN_SHAREABLE; if (!mciSendCommand(0,MCI_OPEN,flags,(unsigned long)&op)) { st.dwItem = MCI_STATUS_READY; if(bOpenDrive) mciSendCommand(op.wDeviceID,MCI_SET,MCI_SET_DOOR_OPEN,0); else mciSendCommand(op.wDeviceID,MCI_SET,MCI_SET_DOOR_CLOSED,0); mciSendCommand(op.wDeviceID,MCI_CLOSE,MCI_WAIT,0); } } viel Spass damit JO
Narf! Geschrieben 15. Oktober 2002 Autor Geschrieben 15. Oktober 2002 Hi, wie kann ich das AutoPlay in meinem Programm aus/einschalten? Die Tipps für die CD-ROM-Kontrolle haben mir nicht sehr geholfen. Chiao!
Klotzkopp Geschrieben 15. Oktober 2002 Geschrieben 15. Oktober 2002 Original geschrieben von Narf! wie kann ich das AutoPlay in meinem Programm aus/einschalten?Bei codeguru gibt es ein Beispielprojekt, in dem das gemacht wird. Da wird auch gezeigt, wie man mitbekommt, dass eine CD eingelegt oder entfernt wurde. Dürfte also genau das Richtige sein . http://codeguru.earthweb.com/misc/CdChange.shtml Die Tipps für die CD-ROM-Kontrolle haben mir nicht sehr geholfen.Warum nicht? Was funktioniert nicht? Eine Fehlerbeschreibung wäre recht hilfreich...
Narf! Geschrieben 15. Oktober 2002 Autor Geschrieben 15. Oktober 2002 ... der Code Strukturen enthält, die ich nicht verarbeiten kann. Man hat mir auch schon geschrieben, dass ich wietere Headers includieren soll. Hab ich getan und ... nix! Die Fehlermeldungen blieben. Ich schau mal bei dem Link vorbei. Danke.
Klotzkopp Geschrieben 15. Oktober 2002 Geschrieben 15. Oktober 2002 Original geschrieben von Narf! Man hat mir auch schon geschrieben, dass ich wietere Headers includieren soll. Hab ich getan und ... nix! Die Fehlermeldungen blieben. Bitte, sag uns doch, wie die Fehlermeldungen lauten. Dann können wir Dir weiterhelfen.
Narf! Geschrieben 15. Oktober 2002 Autor Geschrieben 15. Oktober 2002 Ich war auf dem Link und habe mir das Beispiel runtergeladen, aber es entspricht nicht so ganz meinen Vorstellungen. Ich habe auch versucht das Programm umzuschreiben aber naja... Folgendes soll passieren: OnInitDialog AutoPlay aus; On"Ende" AutoPlay ein; Die Fehlermeldungen waren meistens "Nicht deklarierter Bezeichner".
Guybrush Threepwood Geschrieben 15. Oktober 2002 Geschrieben 15. Oktober 2002 Hi, Die Fehlermeldung "Nichtdeklarierter Bezeichner" bedeutet das du irgendwo eine Variable benutzt die nirgendwo deklariert wurde. Das kommt leider öfters vor das bei Beispielen die Hälfte an Code fehlt, auch bei kompletten Projekten. Gruß Guybrush
Narf! Geschrieben 16. Oktober 2002 Autor Geschrieben 16. Oktober 2002 Diese Fehlermeldungen beziehen sich auf den Code zum Öffnen/Schließen des CD-LW weiter oben. *TestDlg.cpp(482) : error C2065: 'MCI_OPEN_PARMS' : nichtdeklarierter Bezeichner *TestDlg.cpp(482) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'op' *TestDlg.cpp(482) : error C2065: 'op' : nichtdeklarierter Bezeichner *TestDlg.cpp(483) : error C2065: 'MCI_STATUS_PARMS' : nichtdeklarierter Bezeichner *TestDlg.cpp(483) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'st' *TestDlg.cpp(483) : error C2065: 'st' : nichtdeklarierter Bezeichner *TestDlg.cpp(490) : error C2228: Der linke Teil von '.lpstrDeviceType' muss eine Klasse/Struktur/Union sein *TestDlg.cpp(490) : error C2065: 'MCI_DEVTYPE_CD_AUDIO' : nichtdeklarierter Bezeichner *TestDlg.cpp(495) : error C2228: Der linke Teil von '.lpstrElementName' muss eine Klasse/Struktur/Union sein *TestDlg.cpp(496) : error C2065: 'MCI_OPEN_TYPE' : nichtdeklarierter Bezeichner *TestDlg.cpp(496) : error C2065: 'MCI_OPEN_TYPE_ID' : nichtdeklarierter Bezeichner *TestDlg.cpp(496) : error C2065: 'MCI_OPEN_ELEMENT' : nichtdeklarierter Bezeichner *TestDlg.cpp(496) : error C2065: 'MCI_OPEN_SHAREABLE' : nichtdeklarierter Bezeichner *TestDlg.cpp(500) : error C2065: 'mciSendCommand' : nichtdeklarierter Bezeichner *TestDlg.cpp(500) : error C2065: 'MCI_OPEN' : nichtdeklarierter Bezeichner *TestDlg.cpp(502) : error C2228: Der linke Teil von '.dwItem' muss eine Klasse/Struktur/Union sein *TestDlg.cpp(502) : error C2065: 'MCI_STATUS_READY' : nichtdeklarierter Bezeichner *TestDlg.cpp(505) : error C2228: Der linke Teil von '.wDeviceID' muss eine Klasse/Struktur/Union sein *TestDlg.cpp(505) : error C2065: 'MCI_SET' : nichtdeklarierter Bezeichner *TestDlg.cpp(505) : error C2065: 'MCI_SET_DOOR_OPEN' : nichtdeklarierter Bezeichner *TestDlg.cpp(507) : error C2228: Der linke Teil von '.wDeviceID' muss eine Klasse/Struktur/Union sein *TestDlg.cpp(507) : error C2065: 'MCI_SET_DOOR_CLOSED' : nichtdeklarierter Bezeichner *TestDlg.cpp(509) : error C2228: Der linke Teil von '.wDeviceID' muss eine Klasse/Struktur/Union sein *TestDlg.cpp(509) : error C2065: 'MCI_CLOSE' : nichtdeklarierter Bezeichner *TestDlg.cpp(509) : error C2065: 'MCI_WAIT' : nichtdeklarierter Bezeichner Ich habe auch schon eine Header-Datei includiert, die mir nachträglich gesendet wurde, hat nichts geändert. Sorry wegen des Chaos.
Klotzkopp Geschrieben 16. Oktober 2002 Geschrieben 16. Oktober 2002 Du brauchst #include <mmsystem.h> in TestDlg.cpp, ziemlich am Anfang, aber auf jeden Fall hinter #include <stdafx.h>.
Narf! Geschrieben 16. Oktober 2002 Autor Geschrieben 16. Oktober 2002 Jetzt sind es nur noch zwei Fehler. Mir ist auch noch nicht ganz klar, wie ich dieses void anwenden soll. Es soll in meinem Programm eingebunden werden, d.h. nicht nur bei OnInitDialog. *TestDlg.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__mciSendCommandA@16 *Debug/Test.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Klotzkopp Geschrieben 16. Oktober 2002 Geschrieben 16. Oktober 2002 Original geschrieben von Narf! Mir ist auch noch nicht ganz klar, wie ich dieses void anwenden soll. Es soll in meinem Programm eingebunden werden, d.h. nicht nur bei OnInitDialog.Du kannst einfach die erste und die letzte Zeile aus dem Beispiel weglassen. Was dann übrig bleibt, kannst Du in Deinen Code einfügen. *TestDlg.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__mciSendCommandA@16 *Debug/Test.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise Du musst Dein Programm mit Winmm.lib verlinken. Das geht entweder über die Projekteinstellungen, oder indem Du in einer cpp-Datei, am besten nach den #includes, folgendes einfügst: #pragma comment( lib, "Winmm.lib" )
Narf! Geschrieben 17. Oktober 2002 Autor Geschrieben 17. Oktober 2002 Moin moin! Hat geholfen. Wie lese ich den Namen der CD?
Narf! Geschrieben 17. Oktober 2002 Autor Geschrieben 17. Oktober 2002 Folgenden Code habe ich bei dem Link gefunden: 1. In the xDialog.cpp file, add- const UINT WM_AUTOPLAY = ::RegisterWindowMessage(_T("QueryCancelAutoPlay")); (steht auch in der xDialog.h-Datei) 2. In the message map in xDialog.cpp add this BEGIN_MESSAGE_MAP(xDialog, CDialog) //{{AFX_MSG_MAP(xDialog) ... //}}AFX_MSG_MAP ON_REGISTERED_MESSAGE(WM_AUTOPLAY, OnAutoPlay) (habe ich zwei Zeilen nach innerhalb AFX_MSG_MAP... hoch gerückt) END_MESSAGE_MAP() 3. In the xDialog.cpp, add the OnAutoPlay function. BOOL xDialog::OnAutoPlay() { return TRUE; // Cancel autoplay } 4. In the xDialog.h file, add OnAutoPlay function declaration. class xDialog : public CDialog { ... BOOL OnAutoPlay(); } (ging von alleine bei der Deklaration) Habe alles so geschrieben, aber: *TestDlg.cpp(67) : error C2758: 'WM_AUTOPLAY' : muss in der Basisklassen/Element-Initialisierungsliste des Konstruktors initialisiert werden testdlg.h(22) : Siehe Deklaration von 'WM_AUTOPLAY' *TestDlg.cpp(109) : error C2440: 'type cast' : 'const unsigned int CTestDlg::*' kann nicht in 'unsigned int *' konvertiert werden Es gibt keinen Kontext, in dem diese Konvertierung moeglich ist *TestDlg.cpp(109) : error C2440: 'initializing' : 'void (__thiscall CCmdTarget::*)(void)' kann nicht in 'unsigned int' konvertiert werden Diese Konvertierung ist eine gueltige Standardkonvertierung, die implizit oder mit dem static_cast-Operator oder mit einer Typumwandlung im C- oder Funktionsformat durchgefuehrt wird :confused:
Klotzkopp Geschrieben 17. Oktober 2002 Geschrieben 17. Oktober 2002 Original geschrieben von Narf! const UINT WM_AUTOPLAY = ::RegisterWindowMessage(_T("QueryCancelAutoPlay")); Das braucht nicht in der .h-Datei zu stehen. Und in der .cpp-Datei muss es außerhalb der Methoden stehen (also nicht innerhalb irgendwelcher geschweiften Klammern). (habe ich zwei Zeilen nach innerhalb AFX_MSG_MAP... hoch gerückt) Das ist nicht notwendig, sondern eher schädlich, weil es den Klassenassistenten durcheinanderbringt. Was die anderen beiden Fehlern angeht, könntest Du mal Zeile 109 hier reinstellen?
Narf! Geschrieben 18. Oktober 2002 Autor Geschrieben 18. Oktober 2002 Habe alles umgeschrieben und es läuft. Danke. Ich würde das ganze aber als Void AutoPlayOn und AutoPlayOff schreiben wollen, da jetzt der Tree seinen Focus verliert und mit m_Tree.SetFocus() nicht wieder gesetzt bekommt, wenn ich eine neue CD einlege.
Narf! Geschrieben 4. Dezember 2002 Autor Geschrieben 4. Dezember 2002 Wie kann ich die Bezeichnung einer CD lesen und in einer Variable speichern?
Klotzkopp Geschrieben 4. Dezember 2002 Geschrieben 4. Dezember 2002 char pszVolume[200]; GetVolumeInformation( "D:\\", pszVolume, 199, NULL, NULL, NULL, NULL, 0 );
Narf! Geschrieben 24. September 2003 Autor Geschrieben 24. September 2003 Haben DVD-Laufwerke eine andere Kennung als CD-ROM-Laufwerke (DRIVE_CDROM)beim Erkennen? (Code siehe oben)
Klotzkopp Geschrieben 24. September 2003 Geschrieben 24. September 2003 Hier bei mir zumindest nicht.
Narf! Geschrieben 21. Juni 2004 Autor Geschrieben 21. Juni 2004 Noch 'ne Frage zu GetVolumeInformation(): Ich hätte auch gern die Seriennummer des Datenträgers, aber in die LPDWORD-Variable wird nie etwas geschrieben?
Klotzkopp Geschrieben 21. Juni 2004 Geschrieben 21. Juni 2004 Bei mir funktioniert es. Zeig doch mal deinen Code.
Narf! Geschrieben 23. Juni 2004 Autor Geschrieben 23. Juni 2004 Das ist er: CString CDDrive="F:"; char CD_Name[MAX_PATH]; LPDWORD SerNum; GetVolumeInformation(CDDrive, CD_Name, MAX_PATH, SerNum, NULL, NULL, NULL, NULL); Kann man für LPDWORD auch was anderes nehmen?
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden