Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1852to1856
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

CD Schublade geschlossen: Weiter

CD Schublade geschlossen: Weiter
04.11.2021 06:29:12
Andreas
Guten morgen an alle,
mit nachfolgender Funktion brenne ich derzeit meine CDs. Funktioniert auch soweit so gut, zumindest an einem Rechner mit 64bit. Beim 32Bit Excel komme ich derzeit noch nicht dahinter, warum es nicht funktioniert. Er bricht den Brennvorgang immer erfolglos ab.
Jetzt zu meiner Frage: Ich lasse das CD Laufwerk ja mit der Funktion unten öffnen und schließen.
64 bit
Private Declare PtrSafe Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long
32. Bit
Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long
......
Call mciExecute("Set CDaudio door open")
MsgBox "Bitte einen Datenträger (CD/DVD) in das Laufwerk einlegen und bestätigen.", vbInformation, "Elektronisches Tagebuch"
Call mciExecute("Set CDaudio door closed")
....
Allerdings kommt es hin und wieder zu Problemen, wenn der User das OK nicht betätigt. Kann man die Msgbox ausblenden, bzw. das OK bestätigen lassen, sobald die CD Schublade wieder eingefahren ist ? Sprich: Kann man den Status der Schublade als auslösendes Event irgendwie abfangen?
Vielen Dank voran
hier der gesamte Code.

Public Function Brenne_DVD(ByVal path As String, ByVal TextBox3 As String)
Dim Index                      ' Index to recording drive.
Dim Recorder                   ' Recorder object
Dim Stream                     ' Data stream for burning device
Dim g_DiscMaster
Dim FSI                        ' Disc file system
Dim Dir                        ' Root directory of the disc file system
Dim dataWriter
Dim result
Dim uniqueId
Index = 0                      ' First and only drive on the system
Call mciExecute("Set CDaudio door open")
MsgBox "Bitte einen Datenträger (CD/DVD) in das Laufwerk einlegen und bestätigen.", vbInformation, "Elektronisches Tagebuch"
Call mciExecute("Set CDaudio door closed")
Call UF_Brennvorgang.Show
Set g_DiscMaster = CreateObject("IMAPI2.MsftDiscMaster2")
Set Recorder = CreateObject("IMAPI2.MsftDiscRecorder2")
uniqueId = g_DiscMaster.Item(Index)
Recorder.InitializeDiscRecorder (uniqueId)
Set FSI = CreateObject("IMAPI2FS.MsftFileSystemImage")
Set Dir = FSI.Root
'Create the new disc format and set the recorder
Set dataWriter = CreateObject("IMAPI2.MsftDiscFormat2Data")
dataWriter.Recorder = Recorder
dataWriter.ClientName = "IMAPIv2 TEST"
FSI.ChooseImageDefaults (Recorder)
FSI.VolumeName = TextBox3
' Add the directory and its contents to the file system
Dir.AddTree path, False
' Create an image from the file system
Set result = FSI.CreateResultImage()
' Write stream to disc using the specified recorder.
On Error GoTo Errorhandler:
dataWriter.Write (result.ImageStream)
Call Unload(Object:=UF_Brennvorgang)
Call mciExecute("Set CDaudio door open")
MsgBox ("Brennvorgang erfolgreich beendet." & Chr(10) & "Bitte Datenträger entnehmen und beschriften."), vbInformation
Exit Function
Errorhandler:
Call Unload(Object:=UF_Brennvorgang)
Call mciExecute("Set CDaudio door open")
MsgBox ("Der Vorgang konnte nicht ordnungsgemäß abgeschlossen werden." & Chr(10) & Chr(10) & "Bitte prüfen Sie den Datenträger. Möglicherweise ist dieser beschädigt oder wurde nicht eingelegt."), vbCritical
End Function

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CD Schublade geschlossen: Weiter
04.11.2021 08:08:53
volti
Hallo Andreas,
mit ein paar API-Calls kann man in einer MsgBox einen Button klicken.
Hierzu wird vor den die MsgBox auslösenden Code ein Timer gesetzt, der in die Clickroutine führt.
Hier mal ein (leider ungetestetes) Beispiel, da ich mit dem Brennvorgang jetzt nicht auskenne.
Du musst aber noch den Captiontext anpassen, also das was in der MsgBox im Kopf steht.
Code:

[Cc][+][-]

Option Explicit Private Declare PtrSafe Function KillTimer Lib "user32" ( _ ByVal hWnd As LongPtr, ByVal nIDEvent As LongPtr) As Long Private Declare PtrSafe Function SetTimer Lib "user32" ( _ ByVal hWnd As LongPtr, ByVal nIDEvent As LongPtr, _ ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr Private Declare PtrSafe Function SendDlgItemMessageA Lib "user32" ( _ ByVal hDlg As LongPtr, ByVal nIDDlgItem As Long, _ ByVal wMsg As Long, ByVal wParam As LongPtr, _ ByVal lParam As LongPtr) As LongPtr Private Declare PtrSafe Function FindWindowA Lib "user32" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As LongPtr Dim hTimer As LongPtr Sub ClickOk() ' Dein code Call Unload(Object:=UF_Brennvorgang) hTimer = SetTimer(0&, 0&, 50, AddressOf DlgClickProc) Call mciExecute("Set CDaudio door open") KillTimer 0&, hTimer Msgbox ("Brennvorgang erfolgreich beendet." & Chr(10) _ & "Bitte Datenträger entnehmen und beschriften."), vbInformation ' Dein Code End Sub Private Sub DlgClickProc() ' Klickt den Ja-Button an Dim hDlg As LongPtr hDlg = FindWindowA("#32770", "Dokument wird verwendet") '<<<< anpassen >>> If hDlg > 0 Then SendDlgItemMessageA hDlg, 6, &HF5, 0&, 0& '6=ja, 2=nein/ok End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: CD Schublade geschlossen: Weiter
04.11.2021 08:58:43
Volti
Nachtrag:
Button-ID noch von 6 nach 2 ändern...
AW: CD Schublade geschlossen: Weiter
04.11.2021 10:08:51
Andreas
Hallo KarlHeinz,
leider komme ich damit irgendwie nicht weiter. Er soll ja auf das Schließen des Laufwerks reagieren. Daher weiss ich leider nicht, wie ich das einbauen soll mit dem Timer.
Laufwerk auf (Call mciExecute("Set CDaudio door open") -- msgbox (Leg was ins CD Laufwerk - alternativ ein Userform anstatt msgbox) -- Laufwerk macht der User maschinell zu --- OK Button wird automatisch geklickt (alternativ könnte man auch ein Userform nehmen und dann wieder ausblenden ausblenden lassen)
AW: CD Schublade geschlossen: Weiter
04.11.2021 13:46:27
volti
Hallo Andreas,
da habe ich wohl etwas falsch verstanden. Ich dachte, Du wolltest eine vom CD-ROM beim Schließen generierte MsgBox klicken.
Leider habe ich kein CD-ROM mehr zur Verfügung zum Probieren.
Soweit ich weiß, ist die mciExecute eine abgespeckte Version der mciSendstring-Function mit der z.B. auch MP3-Dateien abgespielt werden können.
Google mal im Netz nach status cdaudio mode.
Dann müsste allerdings Deine Vorgehensweise etwas abgeändert werden, in etwa so....
mciSendString "open cdaudio", 0, 0, 0
mciSendString("set cdaudio door open", 0, 0, 0)
status = mciSendString("status cdaudio mode", Buffer, 255, NULL)
mciSendString("set cdaudio door closed", 0, 0, 0)
mciSendString "close cdaudio", 0, 0, 0)
Allerdings kann ich da jetzt nix testen. Vielleicht weiß jemand anderes ja was dazu.
Gruß
Karl-Heinz
Anzeige
AW: CD Schublade geschlossen: Weiter
07.11.2021 09:33:27
Andreas
Schade.... hat niemand eine Idee ?

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige