Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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?

Geschrieben

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

  • 2 Wochen später...
Geschrieben
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...
Geschrieben

... 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.

Geschrieben
Original geschrieben von Narf!

Man hat mir auch schon geschrieben, dass ich wietere Headers includieren soll. Hab ich getan und ... nix! Die Fehlermeldungen blieben.

:rolleyes:

Bitte, sag uns doch, wie die Fehlermeldungen lauten. Dann können wir Dir weiterhelfen.

Geschrieben

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".

Geschrieben

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.

Geschrieben

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

Geschrieben
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" )

Geschrieben

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:

Geschrieben
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?

Geschrieben

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.

  • 1 Monat später...
  • 9 Monate später...
  • 8 Monate später...
Geschrieben

Noch 'ne Frage zu GetVolumeInformation():

Ich hätte auch gern die Seriennummer des Datenträgers, aber in die LPDWORD-Variable wird nie etwas geschrieben?

Geschrieben

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?

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...