Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DETECTER LA PRÉSENCE D'UN CD


Information sur la source

Catégorie :Sécurité Niveau : Initié Date de création : 18/06/2002 Date de mise à jour : 18/06/2002 22:06:05 Vu / téléchargé: 2 261 / 316

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

Description

C'est au fait une fonction qui détécte la présence d'un CD dans le lecteur: Comme pour la plus part des jeux commercials.
 

Source

  • 'Les constantes
  • Public Const INVALID_HANDLE_VALUE = -1
  • Public Const GENERIC_WRITE = &H40000000
  • Public Const OPEN_EXISTING = 3
  • Public Const FILE_SHARE_READ = &H1
  • Public Const FILE_SHARE_WRITE = &H2
  • 'Les API
  • Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
  • Public Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long
  • Public Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
  • Public Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
  • Public Declare Function SetVolumeLabel Lib "kernel32" Alias "SetVolumeLabelA" (ByVal lpRootPathName As String, ByVal lpVolumeName As String) As Long
  • Sub main()
  • Call CD_Detection
  • End Sub
  • Sub CD_Detection()
  • A = App.Path
  • lecteur = Left$(A, 3)
  • Label_du_CD = App.EXEName
  • '1er méthode : Voit l'espace restant dans un CD en utilisant GetDiskFreeSpace
  • '( Normallement, y'a pas d'espaces libres dans un CD)
  • GetDiskFreeSpace lecteur, Sectors, Bytes, FreeC, TotalC
  • If FreeC <> 0 Then GoTo fin
  • '2eme méthode : la plus connu : Getdrivetype qui consiste à renvoyer la nature
  • 'd'un lecteur, pour notre cas, ca doit être = 5 qui signifie "CD-ROM"
  • If GetDriveType(lecteur) <> 5 Then GoTo fin
  • '3eme méthode : Vérifie le label (ou nom) du cd et voir si il correspond
  • 'au notre, utile pour vérifier si le CD est original ou gravé
  • Vname = String$(255, Chr$(0))
  • FSName = String$(255, Chr$(0))
  • GetVolumeInformation lecteur, Vname, 255, Serial, 0, 0, FSName, 255
  • Vname = Left$(Vname, InStr(1, Vname, Chr$(0)) - 1)
  • If Vname <> Label_du_CD Then GoTo fin
  • '4eme méthode : essai de changer le label du CD (normallement impossible)
  • A = SetVolumeLabel(lecteur, "")
  • If A = 0 Then GoTo fin
  • '5eme méthode : essai de créer un fichier dans le CD (re-normallement impossible)
  • lngHandle = CreateFile(lecteur & "Test.sky", GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
  • If lngHandle <> INVALID_HANDLE_VALUE Then
  • Kill (lecteur & "Test.sky") 'L'efface si le fichier est créer.
  • GoTo fin
  • End If
  • fin:
  • MsgBox "Veuillez insérer le CD-ROM fournit avec " & App.EXEName, vbCritical + vbOKOnly, "CD non présent"
  • End
  • End Sub
'Les constantes
Public Const INVALID_HANDLE_VALUE = -1
Public Const GENERIC_WRITE = &H40000000
Public Const OPEN_EXISTING = 3
Public Const FILE_SHARE_READ = &H1
Public Const FILE_SHARE_WRITE = &H2
'Les API
Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Public Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long
Public Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Public Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Public Declare Function SetVolumeLabel Lib "kernel32" Alias "SetVolumeLabelA" (ByVal lpRootPathName As String, ByVal lpVolumeName As String) As Long
Sub main()
Call CD_Detection
End Sub

Sub CD_Detection()
A = App.Path
lecteur = Left$(A, 3)
Label_du_CD = App.EXEName
'1er méthode : Voit l'espace restant dans un CD en utilisant GetDiskFreeSpace
'( Normallement, y'a pas d'espaces libres dans un CD)
GetDiskFreeSpace lecteur, Sectors, Bytes, FreeC, TotalC
If FreeC <> 0 Then GoTo fin
'2eme méthode : la plus connu : Getdrivetype qui consiste à renvoyer la nature
'd'un lecteur, pour notre cas, ca doit être = 5 qui signifie "CD-ROM"
If GetDriveType(lecteur) <> 5 Then GoTo fin
'3eme méthode : Vérifie le label (ou nom) du cd et voir si il correspond
'au notre, utile pour vérifier si le CD est original ou gravé
Vname = String$(255, Chr$(0))
FSName = String$(255, Chr$(0))
GetVolumeInformation lecteur, Vname, 255, Serial, 0, 0, FSName, 255
Vname = Left$(Vname, InStr(1, Vname, Chr$(0)) - 1)
If Vname <> Label_du_CD Then GoTo fin
'4eme méthode : essai de changer le label du CD (normallement impossible)
A = SetVolumeLabel(lecteur, "")
If A = 0 Then GoTo fin
'5eme méthode : essai de créer un fichier dans le CD (re-normallement impossible)
lngHandle = CreateFile(lecteur & "Test.sky", GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
If lngHandle <> INVALID_HANDLE_VALUE Then
Kill (lecteur & "Test.sky") 'L'efface si le fichier est créer.
GoTo fin
End If
fin:
MsgBox "Veuillez insérer le CD-ROM fournit avec " & App.EXEName, vbCritical + vbOKOnly, "CD non présent"
End
End Sub

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de max12 le 18/06/2002 22:24:57 administrateur CS

C'est cool sa change du code qui est la 50 fois de ouvrir/fermer le CD.......

signaler à un administrateur
Commentaire de deneration le 18/06/2002 22:41:06

Bien !!!!!!!!!! (même très bien)
Ta source est bien utile. Merci

signaler à un administrateur
Commentaire de SibosisITS le 19/06/2002 14:28:10

Thanks a lot for your program... mais k'S qu'il me prend de parler anglais ;) Sans doute la chaleur lol. Vraiment très bien... et très pratique. Merci.

signaler à un administrateur
Commentaire de Sirocooo le 26/06/2002 23:34:48

comme la plupart des jeux commerciaux et non commercials !!!

signaler à un administrateur
Commentaire de utopia le 16/07/2002 22:43:16

J' ai déjà vu ta source sur http://www.planet-source-code.com/
elle ne vient donc pas de toi

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,218 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.