Laufwerksbuchstaben ändern

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von chenjung.

    Laufwerksbuchstaben ändern

    Hallo Community,
    ich hab da ein kleines Problem.
    Wollte meine ExterneFestplatte immer den gleichen Laufwerksbuchstaben verpassen, das geht ja ganz einfach
    über den Arbeitsplatz->Datenträger Verwalten.

    Aber sobald ich meine Platte an ein anderes System ran mache belegt sie wieder den nächsten freien Buchstaben also D:

    Hätte jemand einen Code das ich per Button meiner Platte den Laufwerksbuchstaben: X verpassen kann?

    Suche schon den ganzen Tag aber finde nichts brauchbares. Und mit einer Batch oder .inf ist mir das zu nervig.
    Danke für jede Antwort.

    MfG: Anatoxis
    Oh sorry...hab vergessen: Mit der Batch geht es nur wenn man zusätzlich noch eine Anwendung runterläd und installiert.
    Aber eh ich das mach, geht es schneller übern Arbeitsplatz

    Also was jemand ne Batch hat womit es ohne zusatz Toolz geht würde ich mich sehr drüber freuen.
    ist auf jeden fall interessant. ich guck ma, ob sich da was deichseln lässt.

    EDIT: lupus, der lümmel, hat's echt gefunden... 8|

    einfach unter
    HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
    den entsprechenden eintrag stumpf umbenennen

    allerdings ist dafür ein neustart nötig


    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „lordknoblauch“ ()

    theoretisch sollte es so laufen

    VB.NET-Quellcode

    1. Const regPath As String = "SYSTEM\MountedDevices"
    2. Dim temp As String = LocalMachine.OpenSubKey(regPath).GetValue("\DosDevices\" & TextBox1.Text & ":")
    3. LocalMachine.OpenSubKey(regPath, True).SetValue("\DosDevices\" & TextBox2.Text & ":", temp, Microsoft.Win32.RegistryValueKind.Binary)


    aber grad keine zeit es zu testen (termin)

    bis nachher

    EDIT: unsicher bin ich mir mit dem binary-ding in einem string zwischenzuspeichern, sollte aber laufen.
    und du wirst das prog dann auf vista/7 mit admin-rechten starten müssen, sonst glaub ich nich, im der im system was ändern wird.

    EDIT EDIT: binary-ding in einen string zu packen ging echt nicht. hab den code ein bisschen angepasst.

    VB.NET-Quellcode

    1. Const regPath As String = "SYSTEM\MountedDevices"
    2. Dim oldDriveLetter As String = "\DosDevices\" & TextBox1.Text & ":"
    3. Dim newDriveLetter As String = "\DosDevices\" & TextBox2.Text & ":"
    4. Dim value() As Byte = LocalMachine.OpenSubKey(regPath).GetValue(oldDriveLetter) 'Value auslesen und zwischenspeichern
    5. 'neuen Eintrag erstellen
    6. LocalMachine.OpenSubKey(regPath, True).SetValue(newDriveLetter, value, Microsoft.Win32.RegistryValueKind.Binary)
    7. 'alten Eintrag löschen
    8. LocalMachine.OpenSubKey(regPath, True).DeleteValue(oldDriveLetter)
    9. 'Abfrage, ob der Rechner direkt neu gestartet werden soll
    10. If MessageBox.Show("Die Änderungen werden erst nach dem Neustart wirksam." & vbCrLf & "Jetzt neu starten?", "Neustart erforderlich", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) = Windows.Forms.DialogResult.Yes Then
    11. Process.Start("shutdown", "-r -t 0")
    12. End If

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „lordknoblauch“ ()

    Sorry das ich dieses alte Thema auskrame, aber genau sowas habe ich gesucht ^^

    Bei mir sagt er, das der Wert nicht Null sein darf?

    Bei:

    VB.NET-Quellcode

    1. LocalMachine.OpenSubKey(regPath, True).SetValue(newDriveLetter, value, Microsoft.Win32.RegistryValueKind.Binary)


    Bei Value sagt er das? Was kann man da machen?

    Textbox1 alter Buchstabe
    Textbox2 neuer Buchstabe, richtig? Und der Button löst dann den Befehl aus?
    Ihr sucht Webspace für eure Projekte? Dann sagt bescheid - kostenfrei und ohne Werbung!
    Hm, das will nicht so recht gehen :\

    Muss ich bisschen versuchen ^^

    Irgendwie raff ich das jetzt nicht?

    VB.NET-Quellcode

    1. BOOL WINAPI SetVolumeMountPoint(
    2. __in LPCTSTR lpszVolumeMountPoint,
    3. __in LPCTSTR lpszVolumeName
    4. );


    Ist der Code,

    in der Beschreibung steht für den Teil: lpszVolumeMountPoint [in]

    The user-mode path to be associated with the volume. This may be a drive letter (for example, X:\) or a directory on another volume (for example, Y:\MountX). The string must end with a trailing backslash ('\').


    Also so? Als Beispiel:

    VB.NET-Quellcode

    1. BOOL WINAPI SetVolumeMountPoint(
    2. __in LPCTSTR lpszVolumeMountPoint ("K:\"),
    3. __in LPCTSTR lpszVolumeName ("G:\")
    4. );
    Ihr sucht Webspace für eure Projekte? Dann sagt bescheid - kostenfrei und ohne Werbung!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „chenjung“ ()

    das wäre halt ne C++ Definition...
    Bool->Boolean
    LPCTSTR->String
    __in->brauchst du nicht nimm einfach ByVal
    ;->weg damit

    Bool irgendetwas()->ist eine Funktion
    wird zu...
    Function irgendetwas() As Boolean

    so und hier bekommst du noch die fertige Definition:

    VB.NET-Quellcode

    1. <DllImport("kernel32.dll") > _
    2. Public Function SetVolumeMountPoint(ByVal lpszVolumeMountPoint as string, Byval lpszVolumeName As String)
    3. End Function


    mit SetVolumeMountPoint("X:\","C:\WINDOWS\") erzeugst du das Volume X mit welchem du direkt ins C:\Windows\ verzeichnist kommst...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---