Avatar billede markskod Nybegynder
12. maj 2001 - 16:36 Der er 7 kommentarer og
1 løsning

Borland C++: hvordan man kan se om et drev er \'subst\' ???

Hejsa Allesammen

Mangler en programkode der kan ses om et drev er lavet med \'subst\'.
Det skal værer til C++.

På for hånd tak..

/Hanibal
Avatar billede borrisholt Novice
14. maj 2001 - 07:44 #1
Hvis drevet ikke er et netwærks drev og har samme SERIAL NUMBER som et af de andere drev så er det et subst drev. Hvis du fortæller mig hvilken Compiler du bruger så skal jeg lave dig et check for det ....

Jens B
Avatar billede markskod Nybegynder
14. maj 2001 - 14:23 #2
Hejsa Jens B

Jeg bruger Borland Visual C++, så jeg bruger compileren derfra.

På for hånd tak...

/Hanibal
Avatar billede borrisholt Novice
14. maj 2001 - 14:39 #3
Du snakker sort !!!! Visual C++ er lavet af Microsoft.. Burger Du Borlands C++ Builder ?

Jens B
Avatar billede markskod Nybegynder
14. maj 2001 - 14:42 #4
ohhh jeg torsk.
Jeg bruger Borlands C++ Builder.

Sorry

/Hanibal
Avatar billede borrisholt Novice
14. maj 2001 - 15:06 #5
du må nøjes med noget Delphi kode, idet jeg ingen C++ Builder har her ....

Hvis du ikke kan porte det så lig koden i en pascal unit fro sig selv og stop den ind i dit projekt :

type
  TDriveType = (dtUnknown, dtNoDrive, dtFloppy, dtFixed, dtNetwork, dtCDROM, dtRAM);


function LowWord(Orig: DWORD): Word;
asm
  and ax,$FFFF
end;

function HighWord(Orig: DWORD): Word;
asm
  and eax, $FFFF0000
  shr eax, $10
end;

function GetDiskVolSerialID(cDriveName: char): string;
var
  dwTemp1, dwTemp2: DWORD;
begin
  GetVolumeInformation(PChar(cDriveName + \':\\\'), nil, 0, @dwTemp1, dwTemp2, dwTemp2, nil, 0);
  Result := IntToHex(HighWord(dwTemp1), 4) + \'-\' + IntToHex(LowWord(dwTemp1), 4);
end;


function IsSubst(const ch : Char)  : boolean;
var
  DriveBits: Integer;
  i : Integer;
  Serial : String;
begin
  result := true;
  Serial := GetDiskVolSerialID(ch);
  DriveBits := Windows.GetLogicalDrives;
  for i:= 0 to 25 do
    if GetDiskVolSerialID(chr(65+i)) = Serial then
    begin
      result := true;
      exit;
    end;
end;


Jens B http://fotx.net/borrisholt
Avatar billede markskod Nybegynder
14. maj 2001 - 15:11 #6
ok jeg tager dig på ordret og giver dig point.
Da jeg ikke kan testet før jeg kommer hjem frae arbejde.

Mange Tak.

/Hanibal
Avatar billede borrisholt Novice
14. maj 2001 - 15:12 #7
jeg laver lige en C++ version ..

Jens B
Avatar billede borrisholt Novice
14. maj 2001 - 15:32 #8
prøv den her :

enum TDriveType  {dtUnknown, dtNoDrive, dtFloppy, dtFixed, dtNetwork, dtCDROM, dtRAM};


int GetDiskVolSerialID(char cDriveName)
{
    DWORD dwTemp1, dwTemp2;
    char Buf[3];
    Buf[0] = cDriveName;
    Buf[1] = \':\';
    Buf[2] = \'\\\\\';
    Buf[3] = \'\\0\';

    GetVolumeInformation(&Buf[0], NULL, 0, &dwTemp1, &dwTemp2, &dwTemp2, NULL, 0);
    return dwTemp1;
}

bool IsSubst(const char ch)
{
  char Buf[3];
  Buf[0] = ch;
  Buf[1] = \':\';
  Buf[2] = \'\\\\\';
  Buf[3] = \'\\0\';

  int Serial = GetDiskVolSerialID(ch);
  int count = 0;
  int tmpSerial = 0;
  int Bits = GetLogicalDrives();
  int BitMask;

  for (int i=0; i<26; ++i)
  {
    BitMask = 1L<<i;
    if((Bits & BitMask) == 0)
        continue;
   
    Serial = GetDiskVolSerialID((char)65+i);
    if (tmpSerial == Serial && GetDriveType(&Buf[0]) == DRIVE_FIXED)
        count++;
  }

  return count >1;
}


Jens B
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester