Virtual CD 10 Import (Windows only)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Virtual CD 10 Import (Windows only)

Beitrag von ts-soft »

Nur für diejenigen, die Virtual CD 10 (keine Freeware!) nutzen interessant!
http://www.virtualcd.de/

Dieser Code stellt die gesamte API zur Verfügung. x86 und x64 werden unterstützt.
Da die API kein Unicode unterstützt werden alle Ein- und Ausgaben autom. umgewandelt,
so das eine Nutzung mit allen Compilereinstellungen möglich ist.

Die Doku zur API findet ihr in eurer Installation, so das ich hierzu nichts mehr sagen muß :wink:

VCD_Import.pbi:

Code: Alles auswählen

; *******************************************************************
; *    DESCRIPTION: Virtual CD API v10
; *    Copyright (c) 2002-2009 by H+H Software GmbH
; *******************************************************************
; angepaßt zur Nutzung mit PB 4.30 und höher
; Thomas (ts-soft) Schulz

; ***************************************************************************
; Error code constants
; ***************************************************************************
Enumeration
  #VCD_ERROR_NONE
  #VCD_ERROR_NOSUCHFILE
  #VCD_ERROR_PATHNOTFOUND
  #VCD_ERROR_TOOMANYOPENEDFILES
  #VCD_ERROR_FILEUNSPECIFIC
  #VCD_ERROR_ACCESSDENIED
  #VCD_ERROR_NOVCDIMAGE
  #VCD_ERROR_HEADERCRC
  #VCD_ERROR_INVALIDPASSWORD
  #VCD_ERROR_OPENTRACKFILES
  #VCD_ERROR_IMAGECORRUPT
  #VCD_ERROR_DEMOEXPIRED
  #VCD_ERROR_UNKNOWN
  #VCD_ERROR_RESOURCES
  #VCD_ERROR_INVALIDDRIVE
  #VCD_ERROR_INVALIDUNIT
  #VCD_ERROR_DRIVELOCKED
  #VCD_ERROR_COMMUNICATION
  #VCD_ERROR_ARGUMENT
  #VCD_ERROR_INUSE
  #VCD_ERROR_EJECTFAILED
  #VCD_ERROR_NOADMIN
  #VCD_ERROR_NOPLAYER
  #VCD_ERROR_NOLICENSE
  #VCD_ERROR_CONNECTION
  #VCD_ERROR_INVALIDVERSION
  #VCD_ERROR_INVALIDDECPWD
  #VCD_ERROR_INVALIDDECINFO
  #VCD_ERROR_UNKNOWNIMAGE
  #VCD_ERROR_FORMATNOTSUPP
  #VCD_ERROR_AGFSSYNC
  #VCD_ERROR_SHARING_VIOLATION
  #VCD_ERROR_NOTIMPLEMENTED
  #VCD_ERROR_NOFULLLIC
  #VCD_ERROR_NOBURNER
  #VCD_ERROR_BURNINGNOW
  #VCD_ERROR_ANALOGAUDIO
  #VCD_ERROR_MUSICMODE
  #VCD_ERROR_INVALIDPROPERTY = 100
  #VCD_ERROR_REGISTRY
  #VCD_ERROR_REBOOTREQUIRED
  #VCD_ERROR_NOPERMISSION
  #VCD_ERROR_INVALIDINDEX  = 1000
  #VCD_ERROR_LICVIOLATION  = 1050
  #VCD_ERROR_NOTLOGGEDON
  #VCD_ERROR_NOFREELICENSE
  #VCD_ERROR_NOFREESLOT
  #VCD_ERROR_NOOPLICENSE
  #VCD_ERROR_NOOPCONNECT
  #VCD_ERROR_LINKCREATE
EndEnumeration

; ***************************************************************************
; Constants For all properties which can be set/get For a virtual CD
; ***************************************************************************
Enumeration 1
  #VCD_PROPERTY_DEFAULTDRIVE
  #VCD_PROPERTY_DESCRIPTION
  #VCD_PROPERTY_PROGRAM
  #VCD_PROPERTY_WORKINGDIR
  #VCD_PROPERTY_COMMENT
  #VCD_PROPERTY_HOTKEY
  #VCD_PROPERTY_EJECTONEND
  #VCD_PROPERTY_SUPPRESSAUTORUN
  #VCD_PROPERTY_ACTIVESESSION
  #VCD_PROPERTY_CDTYPE
EndEnumeration

; ***************************************************************************
; Configuration position flags
; ***************************************************************************
Enumeration
  #VCD_LOCATION_BOTH
  #VCD_LOCATION_LOCAL
  #VCD_LOCATION_GLOBAL
EndEnumeration

; ***************************************************************************
; 'VCDApiInsertEx' constants 
; ***************************************************************************
; Password check for images which have one
#VCD_INSFLG_CHECKPWDS = $01
; Do not add the image to the VCD system
#VCD_INSFLG_NOADD = $08
; Try to supress CD autorun
#VCD_INSFLG_NOAUTORUN = $10

; ***************************************************************************
; Possible CD type constants.
; ***************************************************************************
Enumeration
  #VCD_CDTYPE_UNKNOWN         ; Unknown
  #VCD_CDTYPE_CDROM           ; CD-ROM
  #VCD_CDTYPE_DVDROM          ; DVD-ROM
  #VCD_CDTYPE_DVDRAM          ; DVD-RAM
  #VCD_CDTYPE_INCOMPLETE      ; Incomplete
  #VCD_CDTYPE_CDR             ; CD-R
  #VCD_CDTYPE_DVDMIN          ; DVD-R
  #VCD_CDTYPE_DVDPLUS         ; DVD+R
  #VCD_CDTYPE_DVDPLDL         ; DVD+R DL
  #VCD_CDTYPE_MIXED           ; Mixed Mode CD
  #VCD_CDTYPE_CDDA            ; Audio-CD
  #VCD_CDTYPE_CDI	            ; CD-I
  #VCD_CDTYPE_CDEXTRA	        ; CD-Extra
  #VCD_CDTYPE_CDTEXT          ; CD-Text (Audio-CD)
  #VCD_CDTYPE_PHOTOCD         ; Photo-CD
  #VCD_CDTYPE_SVIDEO          ; SuperVideoCD 
  #VCD_CDTYPE_BDROM	          ; Blu-Ray
  #VCD_CDTYPE_HDROM           ; HD-DVD
  #VCD_CDTYPE_BLANK_CDRW      ; CD-RW
  #VCD_CDTYPE_BLANK_BDR       ; BD-R
  #VCD_CDTYPE_BLANK_BDRE      ; BD-RE
  #VCD_CDTYPE_BLANK_BDR_DL    ; BD-R DL
  #VCD_CDTYPE_BLANK_BDRE_DL   ; BD-RE DL
  #VCD_CDTYPE_BLANK_HDR       ; HD-DVD-R
  #VCD_CDTYPE_BLANK_HDR_DL    ; HD-DVD-R DL
  #VCD_CDTYPE_BLANK_DVDMINDL  ; DVD-R DL
  #VCD_CDTYPE_BLANK_DVDPLRW   ; DVD+RW
  #VCD_CDTYPE_BLANK_DVDMINRW  ; DVD-RW
EndEnumeration

; ***************************************************************************
; 'VCDApiGetVCDPath and VCDApiSetVCDPath Constants
; ***************************************************************************
Enumeration
  #VCD_PATHID_HOME = 1
  #VCD_PATHID_TEMP = 4
  #VCD_PATHID_VQC
  #VCD_PATHID_SCRIPT
  #VCD_PATHID_CDDB
  #VCD_PATHID_NEWIMAGES
  #VCD_PATHID_PRESETS
  #VCD_PATHID_CATALOG
  #VCD_PATHID_VCX
  #VCD_PATHID_LOG
  #VCD_PATHID_LOCALCONFIG
  #VCD_PATHID_GLOBALCONFIG = 18
  #VCD_PATHID_MUSICFILES
EndEnumeration

; ***************************************************************************
; Flags used with VCDApiSetDDAEnabled and VCDApiSetDDAFlags
; ***************************************************************************
; Change the value for the current session but doesn't save it to disk
#VALUE_CHANGE_UNTIL_RESTART = 1
; Save the value but doesn't change it before restarting the session
#VALUE_SAVE_TO_DISK = 2

; ***************************************************************************
; VCDApiSetDDAEnabled - enable or disable desktop icons
; ***************************************************************************
#DDA_OFF  = #False
#DDA_ON   = #True

; ***************************************************************************
; VCDApiSetDDAFlags - Desktop icons device flags
; ***************************************************************************
#DDA_DRIVE_NONE = $0	              ; no devices
#DDA_DRIVE_FIXED = $1	              ; hard disks
#DDA_DRIVE_REMOTE = $2              ; network drives
#DDA_DRIVE_CDROM = $4	              ; physical CD drives
#DDA_DRIVE_RAMDISK = $8	            ; RAM drives
#DDA_DRIVE_REMOVABLE = $10          ; Removable media
#DDA_DRIVE_VCDS = $20	              ; Virtual CD drives
#DDA_DRIVE_USE_VCD_INFO = $1000     ; Use Virtual CD Data
#DDA_DRIVE_CHECK_BY_VCD	= $2000	    ; Update drive information continuously 
#DDA_DRIVE_SHOW_VCD_ALWAYS = $4000  ; Show icons For empty virtual drives

; ***************************************************************************
; VCDApiImageDelete
; ***************************************************************************
; No special flgs
#VCDDEL_DEFAULT = $0
; Do show any output except the eject question - See 'VCDDEL_AUTOEJECT'
#VCDDEL_QUIET = $2
; Auto Eject image - No question
#VCDDEL_AUTOEJECT	= $100
; Only remove the image from Virtual CD but doesn't delete physical
#VCDDEL_REMOVE_FROM_VCD_ONLY = $10000

; ***************************************************************************
; declaration
; ***************************************************************************
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
#VCD_ImportLib$ = "vc10api64.lib"
CompilerElse
#VCD_ImportLib$ = "vc10api.lib"
CompilerEndIf
Import #VCD_ImportLib$
  VCDApiEject(szDriveOrFileName.p-Ascii)
  VCDApiGetImagePropertiesLong(szFileName.p-Ascii, nProperty)
  VCDApiGetLastError()
  VCDApiGetMountDrive(szFileName.p-Ascii)
  VCDApiInsert(cDrive.c, szFileName.p-Ascii, szPassword.p-Ascii)
  VCDApiInsertEx(cDrive.c, szFileName.p-Ascii, szPassword.p-Ascii, dwFlags)
  VCDApiSetDebug(bDebug)
  VCDApiSetDriveLetters(szDriveLetters.p-Ascii)
  VCDApiSetImagePropertiesLong(szFileName.p-Ascii, nProperty, lNewVal)
  VCDApiSetImagePropertiesString(szFileName.p-Ascii, nProperty, szNewValue.p-Ascii)
  VCDApiLockVCDDrive(cDrive.c)
  VCDApiUnLockVCDDrive(cDrive.c)
  VCDApiIsVCDDriveLocked(cDrive.c)
  VCDApiIsProperlyInstalled()
  VCDApiGetNumberOfVCDDevices()
  VCDApiGetImageCount(nFromWhere)
  VCDApiLaunchAndWait(szCmdLine.p-Ascii, szWorkDir.p-Ascii, nShowCmd, *lExitCode, bWait)
  VCDApiGetFirstPhysicalDrive()
  VCDApiIsDVDRAMWriteProtected(strFile.p-Ascii)
  VCDApiSetDVDRAMWriteProtected(strFile.p-Ascii, bProtect)
  VCDApiIsDVDRAMDriveWriteProtected(cDrive.c)
  VCDApiSetDVDRAMDriveWriteProtected(cDrive.c, bProtect)
  VCDApiSetVCDPath(dwPathID, lpPath.p-Ascii)
  VCDApiLaunchAndWaitEx(szApp.p-Ascii, szParams.p-Ascii, szWorkDir.p-Ascii, nShowCmd, *lExitCode, dwFlags)
  VCDApiInitMusicFileMode(cDrive.c)
  VCDApiSetDDAEnabled(bNew, dwFlags)
  VCDApiSetDDAFlags(dwDDAFlags, dwFlags)
  VCDApiImageDelete(szImage.p-Ascii, dwFlags)
  VCDApiCreateEmptyImage(dwCDType, dwSectors, szImage.p-Ascii, szDesc.p-Ascii, szPW.p-Ascii, bAES, bISO, bCompatibility)
  VCDApiGetMusicDrive()
  VCDApiVDlgAskDriveForImage(szImage.p-Ascii)
  VCDApiGetFilesCountImage(szImage.p-Ascii)
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
  VCDApiGetImagePropertiesString_(szFileName.p-Ascii, nProperty, *lpResult, nResultLen) As "VCDApiGetImagePropertiesString"
  VCDApiGetVCDDriveLetters_(*lpResult, nResultLen) As "VCDApiGetVCDDriveLetters"
  VCDApiGetMountedFileFromDrive_(cDrive.c, *lpResult, nResultLen) As "VCDApiGetMountedFileFromDrive"
  VCDApiGetImageAt_(nFromWhere, nPosition, *lpResult, nResultLen) As "VCDApiGetImageAt"
  VCDApiGetVCDBurnerDriveLetters_(*lpResult, nResultLen) As "VCDApiGetVCDBurnerDriveLetters"
  VCDApiGetVCDPath_(dwPathID, *lpResult, nResultLen) As "VCDApiGetVCDPath"
  VCDApiGetFileAtImage_(szImage.p-Ascii, dwIndex, *szBuffer, buffLen) As "VCDApiGetFileAtImage"
  VCDApiGetKnownDrives_(*szBuffer, buffLen) As "VCDApiGetKnownDrives"
CompilerElse
  VCDApiGetImagePropertiesString_(szFileName.p-Ascii, nProperty, *lpResult, nResultLen) As "_VCDApiGetImagePropertiesString@16"
  VCDApiGetVCDDriveLetters_(*lpResult, nResultLen) As "_VCDApiGetVCDDriveLetters@8"
  VCDApiGetMountedFileFromDrive_(cDrive.c, *lpResult, nResultLen) As "_VCDApiGetMountedFileFromDrive@12"
  VCDApiGetImageAt_(nFromWhere, nPosition, *lpResult, nResultLen) As "_VCDApiGetImageAt@16"
  VCDApiGetVCDBurnerDriveLetters_(*lpResult, nResultLen) As "_VCDApiGetVCDBurnerDriveLetters@8"
  VCDApiGetVCDPath_(dwPathID, *lpResult, nResultLen) As "_VCDApiGetVCDPath@12"
  VCDApiGetFileAtImage_(szImage.p-Ascii, dwIndex, *szBuffer, buffLen) As "_VCDApiGetFileAtImage@16"
  VCDApiGetKnownDrives_(*szBuffer, buffLen) As "_VCDApiGetKnownDrives@8"
CompilerEndIf
EndImport

Macro VCDApiGetImagePropertiesString(szFileName, nProperty, lpResult, nResultLen)
  VCDApiGetImagePropertiesString_(szFileName, nProperty, lpResult, nResultLen)
  PokeS(lpResult, PeekS(lpResult, -1, #PB_Ascii))
EndMacro

Macro VCDApiGetVCDDriveLetters(lpResult, nResultLen = 27)
  VCDApiGetVCDDriveLetters_(lpResult, nResultLen)
  PokeS(lpResult, PeekS(lpResult, -1, #PB_Ascii))
EndMacro

Macro VCDApiGetMountedFileFromDrive(cDrive, lpResult, nResultLen = #MAX_PATH)
  VCDApiGetMountedFileFromDrive_(cDrive, lpResult, nResultLen)
  PokeS(lpResult, PeekS(lpResult, -1, #PB_Ascii))
EndMacro

Macro VCDApiGetImageAt(nFromWhere, nPosition, lpResult, nResultLen = #MAX_PATH)
  VCDApiGetImageAt_(nFromWhere, nPosition, lpResult, nResultLen)
  PokeS(lpResult, PeekS(lpResult, -1, #PB_Ascii))
EndMacro

Macro VCDApiGetVCDBurnerDriveLetters(lpResult, nResultLen = 27)
  VCDApiGetVCDBurnerDriveLetters_(lpResult, nResultLen)
  PokeS(lpResult, PeekS(lpResult, -1, #PB_Ascii))
EndMacro

Macro VCDApiGetVCDPath(dwPathID, lpResult, nResultLen = #MAX_PATH)
  VCDApiGetVCDPath_(dwPathID, lpResult, nResultLen)
  PokeS(lpResult, PeekS(lpResult, -1, #PB_Ascii))
EndMacro

Macro VCDApiGetFileAtImage(szImage, index, szBuffer, buffLen = #MAX_PATH)
  VCDApiGetFileAtImage_(szImage, index, szBuffer, buffLen)
  PokeS(szBuffer, PeekS(szBuffer, -1, #PB_Ascii))
EndMacro

Macro VCDApiGetKnownDrives(szBuffer, buffLen = 27)
  VCDApiGetKnownDrives_(szBuffer, buffLen)
  PokeS(szBuffer, PeekS(szBuffer, -1, #PB_Ascii))
EndMacro
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Virtual CD 10 Import (Windows only)

Beitrag von ts-soft »

Hier noch ein simples Beispiel:

Code: Alles auswählen

EnableExplicit

XIncludeFile "VCD_Import.pbi"

Define.s MyDVDRAM = GetTemporaryDirectory() + "MyDVDRAM.vc10"
Define.s BurnerDrive = Space(27)
Define.s MountedFile = Space(#MAX_PATH)
Define   DriveLetter

; hiermit erhalten wir bei Fehlern autom. entsprechende Hinweise,
; in der fertigen Anwendung ist dies zu entfernen oder auf #False zu setzen
VCDApiSetDebug(#True)

; damit es auch mit mehrmaligem start diese Beispiels klappt,
; wird ein evtl. vorhandenes Image gelöscht (ohne Nachfrage) und aus dem Laufwerk entfernt!
VCDApiImageDelete(MyDVDRAM, #VCDDEL_AUTOEJECT | #VCDDEL_QUIET)
; leere DVD-RAM im tempdir erstellen
If VCDApiCreateEmptyImage(#VCD_CDTYPE_DVDRAM, 0, MyDVDRAM, "virtuell DVDRAM", "", #False, #False, #False)
  ; ermitteln des Laufwerkbuchstaben des ersten virtuellen Brenner-Laufwerks
  If Not VCDApiGetVCDBurnerDriveLetters(@BurnerDrive)
    If BurnerDrive
      DriveLetter = Asc(Left(BurnerDrive, 1))
      ; virtuelles Image in den Brenner legen
      If Not VCDApiInsertEx(DriveLetter, MyDVDRAM, "", #VCD_INSFLG_NOADD)
        ; das Laufwerk nach gemounteten Image Fragen
        If Not VCDApiGetMountedFileFromDrive(DriveLetter, @MountedFile)
          Debug "Image: " + MountedFile + " in virtuellen Brenner " + Chr(DriveLetter) + ": eingelegt!"
          Debug "Jetzt nur noch formatieren, dafür starten wir den Explorer!"
          RunProgram(Chr(DriveLetter) + ":")
        EndIf
      EndIf
    EndIf
  EndIf
EndIf
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten