Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Partition zu phys. LW? (https://www.delphipraxis.net/196724-partition-zu-phys-lw.html)

markus5766h 14. Jun 2018 19:40

AW: Partition zu phys. LW?
 
Liste der Anhänge anzeigen (Anzahl: 2)
... Admin-Rechte bei mir notwendig ...
aber warum wird mein USb-Stick (K - 32GU2) zur Floppy ? (siehe Anhang)

KodeZwerg 14. Jun 2018 19:48

AW: Partition zu phys. LW?
 
Delphi-Quellcode:
  FUNCTION GetDriveTypeString(CONST DriveType: TDriveType): STRING;
  BEGIN
    CASE DriveType OF
      dtFloppy : RESULT := 'Floppy';
      dtFixed : RESULT := 'Fixed';
      dtNetwork: RESULT := 'Network';
      dtCDROM : RESULT := 'CDROM';
      dtRAM   : RESULT := 'RAM';
      ELSE       RESULT := 'Unknown'
    END
  END;
Das TDriveType muss noch mit der WinApi Ersetzt werden, mein Fehler!! Danke. Auch für testen wegen Admin-Rechte!

Frage: Hast Du die .exe per Source per IDE aufgerufen oder einfach im Explorer mein Kompilat? Weil Eigentlich CD/DVD/BD-Laufwerke eine 255 haben sollten (Wert -1).

markus5766h 14. Jun 2018 19:52

AW: Partition zu phys. LW?
 
hab' das Kompilat benutzt.

KodeZwerg 14. Jun 2018 20:03

AW: Partition zu phys. LW?
 
Danke für diese Information, dann sinds zwei Baustellen, ich werde es fixen.

EWeiss 14. Jun 2018 20:13

AW: Partition zu phys. LW?
 
Zitat:

Zitat von KodeZwerg (Beitrag 1404869)
Danke für diese Information, dann sinds zwei Baustellen, ich werde es fixen.

Zudem solltest du mal deine Rückgabe werte prüfen Integer <> Cardinal
Da ist einiges im argen.

gruss

KodeZwerg 14. Jun 2018 20:21

AW: Partition zu phys. LW?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Fixed.
Delphi-Quellcode:
function GetDriveTypeString(DriveByte: Byte): String;
begin
  case GetDriveType(PChar(Chr(DriveByte + Ord('A')) + ':\')) of
    DRIVE_UNKNOWN: Result := 'Unknown';
    DRIVE_NO_ROOT_DIR: Result := 'not Mounted';
    DRIVE_REMOVABLE: Result := 'Removable';
    DRIVE_FIXED: Result := 'Fixed';
    DRIVE_REMOTE: Result := 'Network';
    DRIVE_CDROM: Result := 'CDROM';
    DRIVE_RAMDISK: Result := 'RAM';
  else
    Result := 'Other';
  end;
end;
Du kannst Byte mit Cardinal austauschen, es sollte aber nicht nötig sein. (Byte 1 - 6 sind gültige Ziele, alles andere ist noch nicht in Delphi 2009 vorhanden und MSDN gibt auch 6 als höchsten Zähler an, beim Api Aufruf nutze ich ein Cardinal und als Laufwerk sollte 26 die Höchste Zahl sein wenn ich mich nicht Irre?)

Bitte testen, Danke!

EWeiss 14. Jun 2018 20:26

AW: Partition zu phys. LW?
 
Zitat:

beim Api Aufruf nutze ich ein Cardinal)
Und was bringt das wenn du am ende doch einen Integer zurück gibst seltsam, aber gut mach wie du willst.
Korrekt ist das nicht.

gruss

KodeZwerg 14. Jun 2018 20:32

AW: Partition zu phys. LW?
 
Von welcher Zeile im Code redest Du? Poste bitte was alles falsch sein soll, ich kann das gerade nicht zuordnen, vielen Dank für mühe!

EWeiss 14. Jun 2018 21:09

AW: Partition zu phys. LW?
 
Zitat:

Zitat von KodeZwerg (Beitrag 1404875)
Von welcher Zeile im Code redest Du? Poste bitte was alles falsch sein soll, ich kann das gerade nicht zuordnen, vielen Dank für mühe!

Delphi-Quellcode:
function GetPhysicalDiskNumber(Drive: Char): Integer; // Integer

  function GetLD(Drive: Char): Cardinal; // Result Cardinal
    var
      Buffer : String;
    begin
      Buffer := Format('\\.\%s:',[Drive]);
      Result := CreateFile(PChar(Buffer), GENERIC_READ,
                           FILE_SHARE_READ or FILE_SHARE_WRITE,
                           nil, OPEN_EXISTING, 0, 0); // Result Cardinal
      Win32Check(Result <> INVALID_HANDLE_VALUE); // Result Cardinal
    end;
//...
      DiskExtents := AllocMem(Max_Path);
      try
        DeviceIOControl(LD,IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,nil,0,DiskExtents,Max_Path,BytesReturned,nil);
        If DiskExtents^.NumberOfDiskExtents > 0 Then
        begin
          DiskExtent := DiskExtents^.Extents[0];
          Result := DiskExtent.DiskNumber; // Result Cardinal und du gibst Integer zurück!
        end;
      finally
        FreeMem(DiskExtents);
      end;
gruss

KodeZwerg 14. Jun 2018 21:23

AW: Partition zu phys. LW?
 
ahhhh ok, habs jetzt gerafft!
Code:
function GetPhysicalDiskNumber(Drive: Char): Cardinal;
So ist es nu aber fixed, oder?


und PS: Vielen lieben Dank fürs draufschauen und vor allem bemerken, da das Record ja passte, flüchtigkeitsfehler tut mir leid!


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz