CD/DVD-Laufwerke erkennen (open-close)

  • Sieht doch schon gut aus ich hab mal noch ein bischen Farbe rin gebracht.

    GUISetBkColor (0xff0000)
    GuiCtrlCreateGroup("Bekannte Laufwerke", 20, 100, 250, 70)
    $Button=GuiCtrlCreateButton(" Laufwerke", 40, 130, 80, 20)

    und noch ein Butten (Bekannte Laufwerke) beim Klick sollte er die auch Öffnen aber ich weiss noch nicht wie ich das in's script einFügen soll.

    mfg. weedhead :rolleyes:

  • ;<AutoItScript>

    ha ha seht lustig genug gelacht.....dieses Ccript soll er bei klick auf Butten anzeigen.
    kommt dir sicher bekannt vor.


    #NoTrayIcon
    AutoItSetOption("MustDeclareVars", 1)
    #include <GUIConstants.au3>
    ;+----------------------------------------------------------------------------+
    ;| Header: Bestimmen der Übergabeparameter |
    ;| ( Alles Strings(!!!), bis auf ArgC ) |
    ;| FontAnzeigeCheck: |Il1 sind Alt-0124, Großes i, Kleines L, Eins |
    Const $Author="USBSticks.au3 ©2006 by ytwinky, MD"; |
    ;| EMail: PIII1kSystem-AutoIt3Forum@yahoo.de |
    ;| (Tastenkombination: keine) |
    ;| AutoIt3-Version: 3.1.1.125(beta) |
    ;| Zweck : Anzeigen des eines lokalen Standard-Admin-Zugangs |
    ;| Tab auf 2 setzen wg. Lesbarkeit |
    ;+----------------------------------------------------------------------------+
    ; == GUI generated with Koda ==
    Const $RegKey="HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\", $rv="\DosDevices\"
    Dim $i=0, $s="", $Wert, $Fehler=0, $Lw, $c, $a, $OnOff[2]=["Off", "On"], $Breite=397
    Dim $Edit
    Do
    $i+=1
    $Wert=RegEnumVal($RegKey, $i)
    $Fehler=@Error
    If $Fehler=0 Then
    If StringInStr(StringUpper($Wert), "DOSDEVICES") Then
    $Lw+=1
    $c=StringRight($Wert, 2)
    $s&=StringRight($Wert, 2) &@Tab
    ; $s&=$OnOff[DriveStatus($c)="READY"] &" "
    $s&=GetNameFromRegistry($c) &@Cr
    EndIf
    EndIf
    Until $Fehler<>0
    GUICreate("Bekannte Laufwerke", $Breite, $Lw*14+10, 290, 125)
    $Edit=GUICtrlCreateEdit("Bitte warten..", 5, 5, $Breite-10, $Lw*14, $ES_OEMCONVERT, $WS_EX_CLIENTEDGE)
    GUISetState(@SW_SHOW)
    $a=StringSplit(StringLeft($s, StringLen($s)-1), @Cr)
    BubbleSort($a, 1, $a[0])
    $Lw=DriveGetDrive("ALL")
    GUICtrlSetData($Edit, "Vorhanden sind " &ShowIt($Lw, " ") &@CrLf &ShowIt($a))
    While 1
    Switch GuiGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case Else
    ;-))
    EndSwitch
    WEnd
    Exit

    Func GetNameFromRegistry($Lw)
    Dim $Wert, $Reg=RegRead("HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices", "\DosDevices\" &$Lw), $c, $i, $va, $ve, $vr
    For $i=1 To StringLen($Reg)-2 Step 2
    $c=Dec(StringMid($Reg, $i, 2))
    If $c<>0 Then $Wert&=Chr($c)
    Next
    ; jetzt prüfen was es ist
    ; kein Wert=Festplattenpartition; "GENERIC_FLOPPY_DRIVE"; "CdRomNAME"; "CdRom&Ven_NAME"; "RemovableMedia"
    Select
    Case StringInStr($Wert, "GENERIC_FLOPPY_DRIVE")>0
    Return "GENERIC FLOPPY DRIVE"
    Case StringInStr($Wert, "CdRom")>0
    $i=StringInStr($Wert, "#")+6
    $c=StringInStr($Wert, "__")
    $va=StringInStr($Wert, "&Ven_")+5
    $ve=StringInStr($Wert, "#",0,2)
    Select
    Case $va=5
    Return StringReplace(StringMid($Wert, $i, $c-$i), "_", " ")
    Case $va>5
    $Wert=StringReplace(StringMid($Wert, $va, $ve-$va), "&Prod_", " ")
    $vr=StringInStr($Wert, "&Rev",0,-1)
    Return StringReplace(StringLeft($Wert,StringLen($Wert)-($ve-$vr)) & StringReplace(StringRight($Wert, $ve-$vr), "_", ". "),"&", " ")
    EndSelect
    Case StringInStr($Wert, "RemovableMedia")>0
    Return "RemovableMedia"
    Case Else
    Return "Festplattenpartition"
    EndSelect
    EndFunc

    Func BubbleSort(byRef $Feld, $l, $r) ; ist Ok, mit Kleiner zusammen..
    If IsArray($Feld) Then
    Dim $i, $j, $y
    For $i=$l To $r
    For $j=$i To $r
    If $Feld[$j]<$Feld[$i] Then
    $y=$Feld[$i]
    $Feld[$i]=$Feld[$j]
    $Feld[$j]=$y
    EndIf
    Next
    Next
    Else
    MsgBox(4096, "Fehler", "$Feld ist kein Array")
    EndIf
    EndFunc

    Func ShowIt(byRef $Feld, $Tr=@CrLf) ; ist Ok, mit Kleiner zusammen..
    If IsArray($Feld) Then
    Dim $i, $p
    For $i=1 To UBound($Feld)-1
    If $Tr<>@CrLf Then $Feld[$i]=StringUpper($Feld[$i])
    $p&=$Feld[$i] &$Tr
    Next
    Else
    $p="$Feld ist kein Array!"
    EndIf
    Return $p
    EndFunc

    • Offizieller Beitrag

    :lol:
    Da hab ich dich aber total mißverstanden. Du willst also in der GUI "CD-Laufwerke öffnen/schließen" mit Button das Script für die "Bekannten Laufwerke" starten.
    Das Script für die Laufwerke einfach vor dem anderen Code ausführen aber die GUI dazu erst wenn Button gedrückt wird (@SW_SHOW).
    Versuch dich mal dran und poste was draus geworden ist.
    Bin jetzt zu müde um noch weiter zu denken. Gute Nacht.

    Edit:
    So, jetzt am Morgen kann ich klarer denken. ;)
    Es ist besser, die Scripte nicht miteinander zu verquicken sondern bei Betätigung des Button mit "RunWait()" das (kompilierte) Script für die "Bekannten Laufwerke" zu starten.

  • Wir nehmen es aber nicht übel|hören es genauso gerne:
    sachsen-anhaltinisch
    Schau mal in den anderen Thread, da poste ich gleich was Neues..
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..

  • Per Sachsen-Anhalter durch die Galaxis :rofl2:
    @weedhead:
    Ich habe nicht ohne Grund zwei verschiedene Funktionen für die Skripts entwickelt..
    Denn jede Funktion ermittelt andere Sachen.
    Sie lassen sich mglw. verbinden, aber ob das Sinn macht?
    Laufwerke ermitteln ist, wie ich gesagt habe, eine Hilfe auf der Such nach meinen
    USB-Sticks(die sich als Laufwerke tarnen, die Feiglinge)
    Während das andere sich nur um die CDVD-Laufwerke kümmern soll.
    btw:
    peethebee hat im Posting vom 02.06.2006 14:40 gezeigt, wie der spoiler benutzt wird, probiers ruhig mal, sieht einfach besser aus..
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..

    2 Mal editiert, zuletzt von ytwinky (5. Juni 2006 um 12:28)

  • Hi, ich hab versucht das Script ins Traymenü umzuschreiben, es werden aber immer alle Einträge markiert und wenn man einen anklickt, stürtzt AutoIt mit einer Fehlermeldung ab.

    Spoiler anzeigen
    [autoit]

    #Include <Constants.au3>
    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    Opt("TrayMenuMode",1)

    Dim $CD=DriveGetDrive("CDROM")
    If @Error Then
    MsgBox(4096, "Error", "Kein CD/DVD-Laufwerk bei " &@ComputerName &" gefunden!")
    Exit
    EndIf
    Dim $CD_Name[$CD[0]+1], $Radio_[$CD[0]+1], $i, $Lw

    [/autoit] [autoit][/autoit] [autoit]

    TraySetClick("9")
    For $i=1 To $CD[0]
    $CD[$i]=StringUpper($CD[$i])
    $CD_Name[$i]=GetNameFromRegistry($CD[$i])
    $Radio_[$i]=TrayCreateItem($CD[$i] &" " &$CD_Name[$i],-1,-1,1)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $Group_4 = TrayCreateMenu("Aktion")
    $Auf = TrayCreateItem("Öffnen", $Group_4)
    $Zu = TrayCreateItem("Schließen", $Group_4)
    $Quit = TrayCreateItem("Beenden")

    [/autoit] [autoit][/autoit] [autoit]

    TraySetState()
    While 1
    For $i=1 To $CD[0]
    If TrayItemSetState($Radio_[$i], $TRAY_CHECKED) Then $Lw=$CD[$i]
    Next
    $msg = TrayGetMsg()
    Select

    Case $msg = $Auf
    CDTray($Lw, "open")

    [/autoit] [autoit][/autoit] [autoit]

    Case $msg = $Zu
    If DriveStatus($Lw)<>"READY" Then CDTray($Lw, "closed")

    Case $msg = $Quit
    ExitLoop

    Case Else
    ;;;
    EndSelect
    WEnd
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func GetNameFromRegistry($Lw)
    Dim $Wert, $Reg=RegRead("HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices", "\DosDevices\" &$Lw), $c, $i
    For $i=1 To StringLen($Reg)-2 Step 2
    $c=Dec(StringMid($Reg, $i, 2))
    If $c<>0 Then $Wert&=Chr($c)
    Next
    $i=StringInStr($Wert, "#")+6
    $c=StringInStr($Wert, "__")
    If $c<7 Then Return ""
    Return StringReplace(StringMid($Wert, $i, $c-$i), "_", " ")
    EndFunc

    [/autoit]


    Könnt ihr mir da helfen?

    Vinschni