Seite 1 von 1

Virtual CD 10 Import (Windows only)

Verfasst: 17.04.2010 02:34
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

Re: Virtual CD 10 Import (Windows only)

Verfasst: 17.04.2010 04:47
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