• Offizieller Beitrag

    Ich habe noch zwei kleine Änderungen vorgenommen:

    In der Funktion _DTInfo():

    [autoit]


    Case 'Fixed'
    If _CheckIfUSB($aCMNicon[$i]) Then
    $sDGT = 'USB-Festplatte'
    Else
    $sDGT = 'Festplatte'
    EndIf

    [/autoit]

    Und in der Funktion _CreateDrives():

    [autoit]


    If ($checkDGT = 'FIXED') And (_CheckIfUSB($aFDrive[$i+1]) = 1) Then
    $aCM2icon[$i] = GUICtrlCreateMenuitem('Datenträger abmelden', $aCMicon[$i])
    GUICtrlSetOnEvent(-1,'_RemoveDrive')
    GUICtrlSetImage($aIcon[$i], @SystemDir & '\shell32.dll', -8)
    EndIf

    [/autoit]

    Damit man eine USB-Festplatte von einer internen Festplatte unterscheiden kann.

    • Offizieller Beitrag

    Stimmt die eine Zeile war fehlerhaft, aber Deine Korrektur ist auch nicht ganz richtig.
    Die Zeile müsste so aussehen:

    [autoit]


    If ($aDriveletter[$disk][$part + $epart] <> StringReplace($Dep[0], '"', '')) Then $epart += 1

    [/autoit]

    Es geht ja darum, dass, wenn mit der gleichen $disk und der gleichen $part ein anderer Buchstabe auftaucht, dass es sich dann um eine erweiterte Partition handelt. Ich erhöhe dann $epart um eins, so dass in $aDriveletter beide/alle Buchstaben unter der $disk enthalten sind. Das ist wichtig für die Zuordnung Buchstabe <-> Physikalisches Laufwerk.

    Edit: Und in _CreateDrives() solltest Du nur diese Zeile...

    [autoit]


    GUICtrlSetImage($aIcon[$i], @SystemDir & '\shell32.dll', -8)

    [/autoit]

    ...einfügen. Damit Du weißt wo, hatte ich den Rest mit gepostet.

    Zu verwirrend? Hier die ganze Funktion:

    [autoit]


    Func _CreateDrives()
    Local $k = 0, $writer, $checkDGT
    $Colors = _Gradient($cProgressBGColor, $cProgressBGEndColor, $aFDrive[0] * 2)
    $GUICtrlbegin = GUICtrlCreateDummy()
    For $i = 0 To $aFDrive[0] - 1
    $checkDGT = DriveGetType($aFDrive[$i + 1])
    Switch $checkDGT
    Case 'RAMDisk'
    $icon = -13
    $cPFC = $cProgressFrontColor
    $cPFGC = $cProgressFrontGradColor
    Case 'CDROM'
    $writer = _CheckWriter($aFDrive[$i + 1])
    $icon = -12
    If DriveStatus($aFDrive[$i + 1]) = 'READY' Then
    $cPFC = 0x555588; 1. Farbe für CDROM
    $cPFGC = 0x6666CC; 2. Farbe für CDROM
    Else
    $cPFC = 0xDDDDDD; 1. Farbe für 'kein Datenträger'
    $cPFGC = 0xEEEEEE; 2. Farbe für 'kein Datenträger'
    EndIf
    Case 'Removable'
    $icon = -8
    $cPFC = $cProgressFrontColor
    $cPFGC = $cProgressFrontGradColor
    Case 'Fixed'
    $icon = -9
    $cPFC = $cProgressFrontColor
    $cPFGC = $cProgressFrontGradColor
    Local $reg, $j, $tmp, $val = ''
    $reg = RegRead('HKLM\SYSTEM\MountedDevices', '\DosDevices\' & $aFDrive[$i + 1])
    If Not @error Then
    For $j = 1 To StringLen($reg) - 2 Step 2
    $tmp = _HexToString(StringMid($reg, $j, 2))
    If $tmp <> '' Then
    $val &= $tmp
    EndIf
    Next
    If $val = 'TrueCrypt' Then $icon = -48
    EndIf
    Case 'Network'
    If DriveStatus($aFDrive[$i + 1]) = 'READY' Then
    $icon = -10
    Else
    $icon = -11
    EndIf
    $cPFC = $cProgressFrontColor
    $cPFGC = $cProgressFrontGradColor
    EndSwitch
    $aIcon[$i] = GUICtrlCreateIcon(@SystemDir & '\shell32.dll', $icon, 12, 2 + $i * 50, 32, 32)
    GUICtrlSetTip(-1, "Explorer auf " & StringUpper($aFDrive[$i + 1]))
    GUICtrlSetCursor(-1, 0)
    GUICtrlSetOnEvent(-1, "_Explore")
    GUICtrlSetState(-1, $GUI_ONTOP)
    If $writer Then
    $aIconH[$i] = GUICtrlCreateIcon(@SystemDir & '\shell32.dll', -147, 34, 26 + $i * 50, 16, 16)
    EndIf
    $aCMNicon[$i] = $aFDrive[$i + 1]
    $aCMicon[$i] = GUICtrlCreateContextMenu($aIcon[$i])
    $aCM1icon[$i] = GUICtrlCreateMenuItem('Datenträger-Informationen', $aCMicon[$i])
    GUICtrlSetOnEvent(-1, "_DTInfo")
    If $checkDGT = 'Removable' Then
    $aCM2icon[$i] = GUICtrlCreateMenuItem('Datenträger abmelden', $aCMicon[$i])
    GUICtrlSetOnEvent(-1, '_EjectMedia')
    EndIf
    If ($checkDGT = 'FIXED') And (_CheckIfUSB($aFDrive[$i + 1]) = 1) Then
    $aCM2icon[$i] = GUICtrlCreateMenuItem('Datenträger abmelden', $aCMicon[$i])
    GUICtrlSetOnEvent(-1, '_RemoveDrive')
    GUICtrlSetImage($aIcon[$i], @SystemDir & '\shell32.dll', -8)
    EndIf
    $aProgress[$i] = _ProgressCreate(52, 8 + $i * 50, 230, 20, $cPFC, $cPFGC, $Colors[$k], $Colors[$k + 1])
    If $checkDGT = 'CDROM' Then
    $aLWname[$iNumCD] = $aFDrive[$i + 1]
    $aLWo[$iNumCD] = GUICtrlCreateButton('Open', 295, 8 + $i * 50, 35, 20)
    GUICtrlSetFont(-1, 8, 800, 0, 'Arial')
    GUICtrlSetOnEvent(-1, '_LWopenclose')
    GUICtrlSetState(-1, $GUI_ONTOP)
    $aLWc[$iNumCD] = GUICtrlCreateButton('Close', 335, 8 + $i * 50, 35, 20)
    GUICtrlSetFont(-1, 8, 800, 0, 'Arial')
    GUICtrlSetOnEvent(-1, '_LWopenclose')
    GUICtrlSetState(-1, $GUI_ONTOP)
    $iNumCD += 1
    Else
    $aProzent[$i] = GUICtrlCreateLabel('', 290, 8 + $i * 50, 70, 20, $ES_RIGHT, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetFont(-1, 9, 700, 0, 'Arial')
    $aGB[$i] = GUICtrlCreateLabel('', 290, 30 + $i * 50, 70, 20, $ES_RIGHT, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetFont(-1, 8, 800, 0, 'Arial')
    GUICtrlSetColor(-1, $cGBColor); Farbe der GB-Zahl
    EndIf
    $k += 2
    $aName[$i] = GUICtrlCreateLabel('', 52, 30 + $i * 50, 230, 21)
    GUICtrlSetFont(-1, 8, 800, 0, 'Arial')
    GUICtrlSetColor(-1, $cTextColor); Farbe der Beschriftung unter der Progressbar
    GUICtrlSetBkColor(-1, $cTextBGColor); Farbe des Hintergrundes der Beschriftung unter der Progressbar
    Next
    $GUICtrlend = GUICtrlCreateDummy()
    EndFunc ;==>_CreateDrives

    [/autoit]
  • Stimmt die eine Zeile war fehlerhaft, aber Deine Korrektur ist auch nicht ganz richtig.
    Die Zeile müsste so aussehen:

    [autoit]


    If ($aDriveletter[$disk][$part + $epart] <> StringReplace($Dep[0], '"', '')) Then $epart += 1

    [/autoit]

    Es geht ja darum, dass, wenn mit der gleichen $disk und der gleichen $part ein anderer Buchstabe auftaucht, dass es sich dann um eine erweiterte Partition handelt. Ich erhöhe dann $epart um eins, so dass in $aDriveletter beide/alle Buchstaben unter der $disk enthalten sind. Das ist wichtig für die Zuordnung Buchstabe <-> Physikalisches Laufwerk.


    Wenn das Feld aber noch leer ist, sollte aber trotzdem reingeschrieben werden, damit der Array-Index nicht überschritten werden kann.

    [autoit]

    If ($aDriveletter[$disk][$part + $epart] <> StringReplace($Dep[0], '"', '')) And ($aDriveletter[$disk][$part + $epart] <> "") Then $epart += 1

    [/autoit]


    Oder, so wie ich es jetzt gemacht habe, es wird einfach der nächste freie Platz verwendet.

    v3.4.2.4

    //EDit: Das doppelte Ausfahren passiert dann, wenn Auf XP oder 2000 WinAnimate einen Fehler liefert, aber trotzdem ausfährt.

    • Offizieller Beitrag

    Version: 3.4.2.5

    - Dialog für 'Netzlaufwerk verbinden' erweitert. Man kann jetzt mehrere Profile anlegen, in
    denen Pfad, Benutzername und Passwort gespeichert werden.

    Screenshot:
    bild2.gif

    P.S.: Der Eintrag ist nur zum testen. Den gibt es nicht wirklich. :P

  • Hallo Progandy,

    siehe Post 126 nach, wie vor :!:

    Schönes WE und
    viel Erfolg !


    Kannst du mal testen, ob es mit dieser WinAnimate geht:

    Spoiler anzeigen
    [autoit]

    Func _WinAnimate($v_gui, $i_mode, $i_duration = 1000)
    If @OSVersion = "WIN_XP" Or @OSVersion = "WIN_2000" Then
    DllCall('kernel32.dll', 'int', 'GetLastError')
    DllCall("user32.dll", "int", "AnimateWindow", "hwnd", WinGetHandle($v_gui), "int", $i_duration, "long", $i_mode)
    Local $ai_gle = DllCall('kernel32.dll', 'int', 'GetLastError')
    If $ai_gle[0] <> 0 Then
    SetError(1)
    Return 0
    EndIf
    Return 1
    EndIf
    Return 0
    EndFunc ;==>_WinAnimate

    [/autoit]
  • Probier mal so und poste dann die Fehler Codes

    Spoiler anzeigen
    [autoit]

    Func _WinAnimate($v_gui, $i_mode, $i_duration = 1000)
    If @OSVersion = "WIN_XP" Or @OSVersion = "WIN_2000" Then
    DllCall('kernel32.dll', 'int', 'SetLastError','dword',0)
    DllCall("user32.dll", "int", "AnimateWindow", "hwnd", WinGetHandle($v_gui), "int", $i_duration, "long", $i_mode)
    Local $ai_gle = DllCall('kernel32.dll', 'int', 'GetLastError')
    If $ai_gle[0] = 21 Then Return 1
    If $ai_gle[0] <> 0 Then
    ConsoleWrite("--- _WinAnimate ---" & @LF & "Error: " & $ai_gle[0] & @LF &"----------" & @LF)
    SetError(1)
    Return 0
    EndIf
    Return 1
    EndIf
    Return 0
    EndFunc ;==>_WinAnimate

    [/autoit]
  • Gut :)
    Also, ich geb bei Fehler 1 (Device not Ready) nun auch erfolg zurück.
    Schon komisch, dass man den Fhler bekommt, dass das Fenster nicht bereit ist, es aber trotzdem ein/ausgeblendet wird :(

  • Hallo,

    auf der Suche nach einem Proggie, wo ich bequem Netzlaufwerke verbinden kann, bin ich über Onkel Google auf dieses nette Programm gestossen.
    Ich will es gerne verwenden, will aber ein paar Anpassungen vornehmen. Und da sind die Probleme. Ich habe bisher rein gar nichts mit AutoIt zu tun gehabt.

    Folgende Anpassungen will ich vornehmen:
    1. Fenster soll am linken Bildschirmrand verschwinden. Ich habe zwei Monitore am Laufen und somit im versteckten Zustand die GUI im zweiten Monitor.
    2. Bei den Netzlaufwerksprofilen sollen mehrere Netzlaufwerke eingetragen werden können - also quasi Gruppen gebildet werden..

    Meine Probleme:
    Wenn ich im SciTE das Programm mit Go starten will, erhalte ich folgende Fehlermeldung:
    ">"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "D:\Coding\AutoiIt\SpaceBar_3.4.2.5_2008-01-20\SpaceBar\SpaceBar.au3"
    D:\Coding\AutoiIt\SpaceBar_3.4.2.5_2008-01-20\SpaceBar\SpaceBar.au3 (133) : ==> Variable used without being declared.:
    Global $gui = GUICreate($title, 390, 8 + $aFDrive[0] * 50, $iGuiPosX1, $iPosY, $WS_POPUP + $WS_BORDER, $WS_EX_TOOLWINDOW)
    Global $gui = GUICreate($title, 390, 8 + $aFDrive[0] * 50, $iGuiPosX1, $iPosY, ^ ERROR
    >Exit code: 1 Time: 0.507"

    Hab an dem Programm noch nichts geändert.
    Wie werde ich diese Fehlermeldung los?

    CU
    Cybercave