PDA

Visualizza la versione completa : [C] Determinare se il lettore CD è aperto o chiuso


=tW=
18-01-2007, 21:47
ciao ragazzi!
ho scritto un programma che apre un unità cd (nel senso che fa proprio uscire lo sportello) e volendo, lo chiude anche...ma a me serve sapere se l'unità è aperta o chiusa, che funzione uso?ho cercato nelle platform sdk, ma evidentemente ho cercato male...qualcuno mi può aiutare?

oregon
18-01-2007, 21:56
Ma ... a cosa ti serve sapere se e' chiusa o aperta ?? :confused:

Lak3d
18-01-2007, 22:01
posta il codice che hai scritto, son curioso. :)

=tW=
18-01-2007, 23:17
#include <windows.h>
#include <mmsystem.h>
#include "resource.h"

void CDRomOpen(int bOpenDrive, char *drive);

int main(){
//dichiara l'icona
WNDCLASSEX wc;
char drives[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //possibili unità
char d_drive[3]="::";
int i,esci=0;

//la carica
wc.hIcon= LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON));

for(i=0;drives[i]!='\0' && esci==0;++i){
d_drive[0]=drives[i]; //cambio ogni volta la lettera
if(GetDriveType(d_drive)==DRIVE_CDROM)
esci=1; //cambia il flag ed esce dal ciclo
}
//apro il cd
CDRomOpen(1,d_drive); //1-apre, 0-chiude
return 0;
}

void CDRomOpen(int bOpenDrive, char *drive)
{
MCI_OPEN_PARMS open;
DWORD flags;

ZeroMemory(&open, sizeof(MCI_OPEN_PARMS));

open.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_CD_AUDIO;
open.lpstrElementName = drive;

//flags = MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_OPEN_SHAREABLE;
flags = MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID;

if (!mciSendCommand(0, MCI_OPEN, flags, (DWORD) &open))
{
mciSendCommand(open.wDeviceID, MCI_SET, (bOpenDrive) ? MCI_SET_DOOR_OPEN : MCI_SET_DOOR_CLOSED, 0);
mciSendCommand(open.wDeviceID, MCI_CLOSE, MCI_WAIT, 0);
}
}


beh, mi serve sapere se è aperta o chiusa così quando lo si avvia, il programma capisce se deve chiuderla o aprirla XD

Lak3d
19-01-2007, 04:30
Ti ringrazio. :)

edit: resource.h dove lo posso trovare?

oregon
19-01-2007, 07:44
Originariamente inviato da =tW=
beh, mi serve sapere se è aperta o chiusa così quando lo si avvia, il programma capisce se deve chiuderla o aprirla XD

Cioe', se e' aperto il tuo programma lo chiude e se e' chiuso lo deve aprire?

=tW=
19-01-2007, 14:17
resource.h è solo il file che mi serve per caricare l'icona, se lo commenti te lo compila correttamente :D

si, esattamente quello, se è aperto lo chiude, altrimenti lo apre...ma come farlo?

andbin
19-01-2007, 15:09
#include <windows.h>

MCIERROR CdromDoor (char driveLetter, BOOL bOpen)
{
MCIERROR mcierr;
CHAR cmd[64];

wsprintf (cmd, "open %c: type cdaudio alias cddoordev wait", driveLetter);
mcierr = mciSendString (cmd, NULL, 0, NULL);

if (mcierr != 0)
return mcierr;

wsprintf (cmd, "set cddoordev door %s wait", bOpen ? "open" : "closed");
mcierr = mciSendString (cmd, NULL, 0, NULL);
mciSendString ("close cddoordev", NULL, 0, NULL);

return mcierr;
}

=tW=
19-01-2007, 15:25
è la stessa cosa del mio, se rilancio il programma, non chiude l'unità precedentemente aperta...come possiamo fare?

Lak3d
19-01-2007, 19:43
Originariamente inviato da =tW=
resource.h è solo il file che mi serve per caricare l'icona, se lo commenti te lo compila correttamente :D


id_myicon a riga 15 risulta così non dicharato...

Loading