[gelöst] CD-/DVD-LW unter W98 öffnen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

[gelöst] CD-/DVD-LW unter W98 öffnen

Beitrag von scholly »

moin, moin...

Gibts eine andere Möglichkeit als CDAudio, um unter Win98 das LW zu öffnen ?
Ich hab die Codes aus http://www.purebasic.fr/german/viewtopi ... ct&start=0
getestet, aber entweder laufen sie nicht unter W98 oder (CDAudio) brauchen >30 Sek zum Öffnen.
Da ich >300 Medien erfassen will, bräuchte ich was, was schneller öffnet und es sollte auf allen Windows-Versionen laufen.

tia...
scholly
Zuletzt geändert von scholly am 21.04.2008 23:54, insgesamt 2-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Vielleicht gehts hiermit schneller.

Code: Alles auswählen

Procedure OpenCD()
  buffer$=Space(128)
  mciSendString_("open cdaudio alias cd",buffer$,128,0)
  mciSendString_("SET CD DOOR OPEN",0,0,0)
EndProcedure

Procedure CloseCD()
  buffer$=Space(128)
  mciSendString_("open cdaudio alias cd",buffer$,128,0)
  mciSendString_("SET CD DOOR CLOSED",0,0,0)
EndProcedure

Hatte ich irgend wann mal in Profan geschieben.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Danke, aber das ist genauso lahm.
Ich hab erst gedacht, daß es am System/LW liegt, aber irgendwoher hab ich eine kleine eject.exe, die braucht nich so lang.
Kann es sein, daß das daran liegt, daß dort der LW-Buchstabe direkt angegeben werden kann und nicht erst das LW gesucht werden muß ?

Source suchen gehend...
scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Kann ich dir nicht sagen. Hatte ich damals unter win95 am laufen und da hatte es nicht so lange gedauert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Warum geht denn InitCDAudio() nicht?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

AND51 hat geschrieben:Warum geht denn InitCDAudio() nicht?
Damit braucht das LW mit fast 30 Sekunden fast 5x solange wie ein kompilierter PowerBasic-Code, siehe http://www.purebasic.fr/german/viewtopic.php?t=7899.
Und bei >300 Medien macht das ganz schön Zeit und nervt einfach nur...
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

@scholly

jetze mich mal ran und übersetze das PowerBasic Programm.

etwas geduld bitte.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Teste das mal:

Code: Alles auswählen

;------------------------------------------------------------------------------

#VWIN32_DIOC_DOS_IOCTL     = 1 ; DOS IOCTL commands
#VWIN32_DIOC_DOS_INT25     = 2 ; absolute disk Read
#VWIN32_DIOC_DOS_INT26     = 3 ; absolute disk write
#VWIN32_DIOC_DOS_INT13     = 4 ; INT 13
#VWIN32_DIOC_DOS_DRIVEINFO = 6 ; Win95B Or later

;#IOCTL_STORAGE_BASE               = %FILE_DEVICE_MASS_STORAGE
#IOCTL_STORAGE_GET_MEDIA_TYPES    = $002D0C00
#IOCTL_STORAGE_GET_MEDIA_TYPES_EX = $002D0C04
#IOCTL_STORAGE_CHECK_VERIFY       = $002D4800
#IOCTL_STORAGE_MEDIA_REMOVAL      = $002D4801
#IOCTL_STORAGE_EJECT_MEDIA        = $002D4808
#IOCTL_STORAGE_LOAD_MEDIA         = $002D480C
#IOCTL_STORAGE_RESERVE            = $002D4810
#IOCTL_STORAGE_RELEASE            = $002D4814
#IOCTL_STORAGE_FIND_NEW_DEVICES   = $002D4818
#IOCTL_STORAGE_RESET_BUS          = $002D5000
#IOCTL_STORAGE_RESET_DEVICE       = $002D5004



Structure DIOC_REGISTERS
  regEBX.l
  regEDX.l
  regECX.l
  regEAX.l
  regEDI.l
  regESI.l
  regFlags.l
EndStructure

;------------------------------------------------------------------------------

Procedure.l LoadMedia(drive.s)

  Protected hDisk.l
  Protected fResult.l
  Protected cb.l
  Protected Regs.DIOC_REGISTERS
  Protected bDisk.l
  Protected *Pointer
  
  *Pointer = 0
  
  OS = OSVersion()
  If OS = #PB_OS_Windows_95 Or OS = #PB_OS_Windows_98 Or OS = #PB_OS_Windows_ME
    bDisk = (Asc(UCase(drive)) - 65) + 1
    hDisk = CreateFile_("\\.\vwin32", 0, 0, *n1, 0, #FILE_FLAG_DELETE_ON_CLOSE, 0)
    
    If hDisk = #INVALID_HANDLE_VALUE
      Debug "WIN95 #INVALID_HANDLE_VALUE"
      ProcedureReturn 0
    EndIf

    Regs\regEAX = $440D  ;eject media
    Regs\regEBX = bDisk
    Regs\regECX = $0849

    fResult = DeviceIoControl_(hDisk, #VWIN32_DIOC_DOS_IOCTL, Regs, SizeOf(DIOC_REGISTERS), Regs, SizeOf(DIOC_REGISTERS), @cb, 0)

    If (regs\regFlags And 1) = 1
      fResult = 0
    EndIf
  Else
    hDisk = CreateFile_("\\.\"+drive, #GENERIC_READ, 0, *n1, #OPEN_EXISTING, 0, @handle)
    
    If hDisk = #INVALID_HANDLE_VALUE
      Debug "WINNT #INVALID_HANDLE_VALUE"
      ProcedureReturn 0
    EndIf
  
    fResult = DeviceIoControl_(hDisk, #IOCTL_STORAGE_LOAD_MEDIA, 0, 0, 0, 0, @cb, 0)
  EndIf

  CloseHandle_(hDisk)

  ProcedureReturn fResult
  
EndProcedure

;------------------------------------------------------------------------------

Procedure.l EjectMedia(drive.s)

  Protected hDisk.l
  Protected fResult.l
  Protected cb.l
  Protected Regs.DIOC_REGISTERS
  Protected bDisk.l
  
  *Pointer = 0
  
  OS = OSVersion()
  If OS = #PB_OS_Windows_95 Or OS = #PB_OS_Windows_98 Or OS = #PB_OS_Windows_ME
    bDisk = (Asc(UCase(drive)) - 65) + 1
    hDisk = CreateFile_("\\.\vwin32", 0, 0, *n1, 0, #FILE_FLAG_DELETE_ON_CLOSE, 0)
    
    If hDisk = #INVALID_HANDLE_VALUE
      Debug "WIN95 #INVALID_HANDLE_VALUE"
      ProcedureReturn 0
    EndIf

    Regs\regEAX = $440D  ;eject media
    Regs\regEBX = bDisk
    Regs\regECX = $0849

    fResult = DeviceIoControl_(hDisk, #VWIN32_DIOC_DOS_IOCTL, Regs, SizeOf(DIOC_REGISTERS), Regs, SizeOf(DIOC_REGISTERS), @cb, 0)

    If (regs\regFlags And 1) = 1
      fResult = 0
    EndIf
  Else
    hDisk = CreateFile_("\\.\"+drive, #GENERIC_READ, 0, *n1, #OPEN_EXISTING, 0, @handle)
    
    If hDisk = #INVALID_HANDLE_VALUE
      Debug "WINNT #INVALID_HANDLE_VALUE"
      ProcedureReturn 0
    EndIf

    fResult = DeviceIoControl_(hDisk, #IOCTL_STORAGE_EJECT_MEDIA, 0, 0, 0, 0, @cb, 0)
  EndIf

  CloseHandle_(hDisk)

  ProcedureReturn fResult
  
EndProcedure


Debug EjectMedia("H:")

Delay(2000)

Debug LoadMedia("H:")
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

SUPER!!! :praise:
Herzlichen Dank, auch wenn die Antwort was gedauert hat; heute wars trocken und da waren im Garten die Erdbeerbeete dran und dann bin ich versehentlich eingepennt :oops:
Unter W98 genauso fix wie das PowerBasic-Compilat.
Das sollte ins Code-Archiv übernommen werden ;)
Wandert bei mir sofort in die Proc-Sammlung.

happy...
scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

scholly hat geschrieben:Das sollte ins Code-Archiv übernommen werden ;)
Schon gespeichert. :)
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Antworten