Programiranje

Program za auto otvaranje i zatvaranje cd traya

Pijavica čet 16.9.2010 18:05

#include "wtypes.h"
#include "winioctl.h"
#include <string>
using namespace std;


bool OpenCloseDoor(const string& DriveName, const bool Open)
{
 
   const string Drive = string("\\\\.\\") + DriveName + string(":");
  
   HANDLE hDrive = INVALID_HANDLE_VALUE;     
   hDrive = CreateFile(Drive.c_str(), GENERIC_READ,
                       FILE_SHARE_READ | FILE_SHARE_WRITE,
                       NULL, OPEN_EXISTING,
                       FILE_ATTRIBUTE_NORMAL,
                       NULL);
               
   BOOL bRetVal = FALSE;
   if ((hDrive != INVALID_HANDLE_VALUE) && (NO_ERROR == GetLastError()))
   {
      DWORD dwDummy = 0;
      if (Open)
      {
         bRetVal = DeviceIoControl(hDrive, IOCTL_STORAGE_EJECT_MEDIA,
                                   NULL, 0, NULL, 0, &dwDummy, NULL);
      }
      else
      {
         bRetVal = DeviceIoControl(hDrive, IOCTL_STORAGE_LOAD_MEDIA,
                                   NULL, 0, NULL, 0, &dwDummy, NULL);
      }
   }
   return (!!bRetVal);                      
}

int main()
{    
     
     
   OpenCloseDoor("D", true);  //D je ime mog cd traya,zamjenite ga sa svojim 
   OpenCloseDoor("D", false);
  
  
  
   return 0;
  
  
}

 

 

Poželjno bubnut u petlju za bolji dojam =)

Pijavica pet 17.9.2010 19:10
crni pauk kaže...

e care zašto to meni neradi jel možda jer imam windows 7 ili sam negdje za*** dok sam kopiro naredbu, spremi se u .bat ne? i ono nutra sam stavio e disk jer je e moj, i neče  Belji se

 

To kopiraš u bilokoji c++ IDE s kompajlerom, i kompajliraš ( Dev c++ ajmo reć)

Mislim da nije problem u wins 7  =)

mbaksa sub 18.9.2010 17:18

Fora! Ovo unutar if-uvjeta bi se moglo napisati i ovako:

 

   if ((hDrive != INVALID_HANDLE_VALUE) && (NO_ERROR == GetLastError()))
   {
      DWORD dwDummy = 0, naredba;

      Open ? naredba = IOCTL_STORAGE_EJECT_MEDIA : naredba = IOCTL_STORAGE_LOAD_MEDIA;

      bRetVal = DeviceIoControl(hDrive, naredba, NULL, 0, NULL, 0, &dwDummy, NULL);
   }

 

Na ovaj nacin vidis da je poziv funkcije isti (ne trebas dvaput pisati kilometarsku naredbu s DeviceIoControl funkcijom), samo sto CD/DVD uredjaju posaljes drugu naredbu. Namigiva