Page 1 sur 1

Graver un CD/DVD

Publié : sam. 22/mars/2014 18:03
par omega
Bonjour à tous

Est il possible de graver un cd en code Pb?

Merci

Re: Graver un CD/DVD

Publié : sam. 22/mars/2014 19:44
par nico

Code : Tout sélectionner

Est il possible de graver un cd en code Pb?
Actuellement non, mais il est possible de graver un CD en lançant l'assistant de gravure de Window en passant par l'interface ICDBURN, on retrouve des codes sur le Forum English.

Je m'étais lancé dessus, y a longtemps quand j'avais XP mais il me semble qu'il y avait un problème qu'il faut prendre en compte, en effet il est permis à l'utilisateur de désactiver cet assistant, faudrait donc retrouver l'entrée dans le registre pour avoir un code fiable.

Re: Graver un CD/DVD

Publié : sam. 22/mars/2014 20:54
par nico
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
Créez ou modifiez la valeur DWORD du nom de NoCDBurning et donnez lui la valeur 1 (si vous souhaitez réactiver le logiciel de gravure par la suite, remettez cette valeur à 0)
Rédémarrer Vista

Re: Graver un CD/DVD

Publié : sam. 22/mars/2014 20:58
par nico
Cette histoire de registre peut être important car apparemment pas mal d'éditeur de logiciel de gravure recommande de le désactiver, est ce que c'est toujours un problème maintenant, je ne sais pas.

Re: Graver un CD/DVD

Publié : sam. 22/mars/2014 21:21
par nico
Cela donne le code suivant à compléter, il faudrait rajouter le test de la clé du registre (je ne sais pas faire), et rajouter les fonctions de suppression des fichiers déjà présents dans le dossier ainsi de la copie des fichiers:

Ce code n'a pas été tester (pas le temps pour le moment)

Code : Tout sélectionner

CoInitialize_(0)

If CoCreateInstance_(?CLSID_CDBurn, 0, 1, ?IID_ICDBurn, @object.ICDBurn) >= 0
  If object <> 0
    If object\HasRecordableDrive(@pfHasRecorder) >= 0
      ; Permet de tester si un graveur de disque est présent, si oui = 1
      If pfHasRecorder = 1
        
        DriveLetter.s=Space(4)
        
        If object\GetRecorderDriveLetter(@DriveLetter, 4) >= 0
          DriveLetter = Trim(DriveLetter)

          ; Permet de retrouver la lettre du graveur
          If DriveLetter <> ""
            Debug DriveLetter
            
            Directory.s = Space(#MAX_PATH)
            
            SHGetSpecialFolderPath_(#Null, @Directory, #CSIDL_CDBURN_AREA, #False)
            Directory = Trim(Directory)
            
            If Directory <> ""
            ; Permet de retrouver le dossier où copier les fichiers et/ou dossiers
            Debug Directory 
            
            ;------------------------------------------------------------------------------
              ; là il faut premièrement vérifier que le dossier est vide sinon le vider
              ; puis copier les fichiers que l'on souhaite graver
              
              ; Puis on lance l'assistant de gravure
            ;------------------------------------------------------------------------------
              
              If object\Burn(#Null) >= 0
                Debug "Assistant lancé"
              EndIf
              
            EndIf
          EndIf
        EndIf
      EndIf
    EndIf
    object\Release()
  EndIf
EndIf

CoUninitialize_()

DataSection
  
  CLSID_CDBurn: 
  Data.l $fbeb8a05
  Data.w $beee, $4442
  Data.b $80, $4e, $40, $9d, $6c, $45, $15, $e9
  
  IID_ICDBurn: 
  Data.l $3d73a659
  Data.w $e5d0, $4d42
  Data.b $af, $c0, $51, $21, $ba, $42, $5c, $8d
  
EndDataSection

Re: Graver un CD/DVD

Publié : sam. 22/mars/2014 21:55
par nico
Code modifié!

Re: Graver un CD/DVD

Publié : dim. 23/mars/2014 0:33
par falsam
Fonctionne UNIQUEMENT sous windows7 et en principe windows8

Le code est volontairement minimaliste pour ne montrer que le principe de la sauvegarde. Vous pouvez utiliser un CD-R pour enregistrer. La suppression n'est pas prévu mais vous pouvez le faire manuellement :)

La lecture récursive des dossiers n'est pas prévu dans ce code.

Code : Tout sélectionner

Enumeration Window
  #Mainform
EndEnumeration

Enumeration Gadgets
  #ListFiles
  
  #FileSelect
  #Save
  #Finalize
EndEnumeration

Define.l Event, GEvent

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered

Global Unit.s = "F:", CR.s = Space(255)

Procedure IsMediaPresent()
  mciSendString_("status cdaudio media present", CR, 255, 0)
  If CR="false"
    ProcedureReturn #False
  Else
    ProcedureReturn #True
  EndIf
EndProcedure
  
Procedure FileSelect()
  Protected File.s
  
  File = OpenFileRequester("Select File", "","", 0, #PB_Requester_MultiSelection)
  While file
    AddGadgetItem(#ListFiles, -1, File)
    File = NextSelectedFileName() 
  Wend  
EndProcedure

Procedure Save()
  Protected n, file.s
  
  If IsMediaPresent()
    For n=0 To CountGadgetItems(#ListFiles)-1
      File = GetGadgetItemText(#ListFiles, n)
      If CopyFile(File, Unit+GetFilePart(File))
        SetGadgetItemText(#ListFiles, n, "Ok", 1)
      EndIf
    Next
    
    While CR<>"stopped"
      mciSendString_("status cdaudio mode", CR, 255, 0)
    Wend
    MessageRequester("Information", "Sauvegarde terminée" + #CRLF$+ "Vous pouvez finaliser ou fermer l'application")
  Else
    MessageRequester("Information", "Il n'y a pas de média dans le graveur")
  EndIf
EndProcedure

Procedure Finalize()
  mciSendString_("set CDAudio door open", "", 0, 0)
  End
EndProcedure

Procedure Open_MainForm()
  OpenWindow(#Mainform, 0, 0, 500, 400, "Sauvegarder sur un cd-rom", WindowStyle)
  ListIconGadget(#ListFiles, 10, 10, 480, 350, "File", 380)
  AddGadgetColumn(#ListFiles, 1, "Status", 50)
  ButtonGadget(#FileSelect, 10, 370, 80, 22, "Select File")
  ButtonGadget(#Save, 100, 370, 80, 22, "Save")
  ButtonGadget(#Finalize, 190, 370, 80, 22, "Finalize")
EndProcedure

Open_MainForm()

BindGadgetEvent(#FileSelect, @FileSelect())
BindGadgetEvent(#Save, @Save())
BindGadgetEvent(#Finalize, @Finalize())
BindEvent(#PB_Event_CloseWindow, @Finalize())

Repeat
    Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
j'ajouterais un code de sauvegarde threadé ulterieurement.

Re: Graver un CD/DVD

Publié : lun. 24/mars/2014 15:38
par venom
Après il y a CreateCD c'est un exécutable en ligne de commande, assez facile d'accès.
Tu le glisse avec ton exe et tu l'utilise avec RunProgramm






@++

Re: Graver un CD/DVD

Publié : lun. 24/mars/2014 16:07
par omega
Merci à tous pour votre aide, je vais tester ce dernier code de falsam bien que j'ai pas win 7 installé sinon j'installerais peut être win7 sur mon portable pour tester.

Merci

Re: Graver un CD/DVD

Publié : lun. 24/mars/2014 17:33
par Backup
venom a écrit :Après il y a CreateCD c'est un exécutable en ligne de commande, assez facile d'accès.
Tu le glisse avec ton exe et tu l'utilise avec RunProgramm
@++

+1 , pourquoi chercher a réinventer la roue :)

lorsque je fait un utilitaire , je commence toujours par chercher si je ne trouve pas un prg en command-ligne
parceque c'est vrais, il en existe pleins , de gratuit , et tres efficace :)

apres cela nous fait juste faire l'interface ... le "Front End" qu'on dit, je crois :)

Re: Graver un CD/DVD

Publié : mar. 25/mars/2014 0:00
par falsam
venom a écrit :Après il y a CreateCD c'est un exécutable en ligne de commande, assez facile d'accès.
Tu le glisse avec ton exe et tu l'utilise avec RunProgramm
Oui :)

J'ai proposé une solution 100% Pure Basic qui permet d'utiliser les fonctions de la bibliothèque FileSystem (CopyFile() par exemple) pour copier des fichiers sur un cd-rom.

Ce mode permet de copier autant fois qu'on le souhaite des fichiers sur un CD-RW mais aussi sur CD-R tant qu'on ne finalise pas la session d'écriture (Windows7 et Windows8).

Je ne pense pas que ce code fonctionne sous XP et dans ce cas CreateCD.exe en ligne de commande me parait plus adéquate effectivement :)
Dobro a écrit :+1 , pourquoi chercher a réinventer la roue :)
Parce que j'avais envie d'essayer cette façon de faire ..... non mais :mrgreen:

Re: Graver un CD/DVD

Publié : mar. 25/mars/2014 0:07
par Backup
c'etait pas une Vraie Question .. plutot une introspection :mrgreen:

Re: Graver un CD/DVD

Publié : mar. 25/mars/2014 0:12
par falsam
Dobro a écrit :c'etait pas une Vraie Question .. plutot une introspection :mrgreen:
ha oui toi aussi ? Héhé