Autor Beitrag
Tendl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Di 05.07.05 18:16 
Hallo Leute ich habe folgendes Problem:

Ich suche nach einem logischem Laufwerk, in meinem Fall z.B I:.
Habe ich es gefunden möchte ich wissen ob das LW mit subst I: .... definiert wurde.
Ist dies der Fall so möchte ich gerne wissen aus welcher Source das LW kommt.


Kann mir jemand weiterhelfen?

Danke Thomas
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Di 05.07.05 18:54 
Zitat:

C:\winxp\system32>subst /?
Weist einem Pfad eine Laufwerkbezeichnung zu.

SUBST [Laufwerk1: [Laufwerk2:]Pfad]
SUBST Laufwerk1: /D

Laufwerk1: Laufwerkbezeichnung, die dem Pfad zugewiesen werden soll.
[Laufwerk2:]Pfad Laufwerk und Pfad, die durch Laufwerk1: angesprochen
werden sollen.
/D Hebt die Zuordnung für das (virtuelle) Laufwerk1 wieder auf.

SUBST ohne Parameter zeigt die mit SUBST erstellten, virtuellen Laufwerke an.

C:\winxp\system32>subst i: C:\

C:\winxp\system32>subst
I:\: => C:\

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Di 05.07.05 19:45 
Ich glaube er möchte es mittels Delphi machen ;)

Einfach Suchfunktion benutzen: Suche in: Delphi-Forum, Delphi-Library SUBST

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Di 05.07.05 19:58 
wenn er es mittels delphi machen will soll er halt subst mit Suche in: Delphi-Forum, Delphi-Library RUNCAPTURED starten

ich glaube nicht dass hier im forum jemand weiss, wie man das sonst noch machen kann

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Di 05.07.05 20:11 
user profile iconretnyg hat folgendes geschrieben:
ich glaube nicht dass hier im forum jemand weiss, wie man das sonst noch machen kann
Hmm, das ist ja komisch. Ich hatte die Frage doch schonmal im Forum gestellt und darauf auch antworten bekommen. Tztztz

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
procedure VxDCall; external kernel32 index 1;  // Wegen SUBST
{...}
function SubstQuery(DriveLetter: Char): string;
var drvno: byte;
    buff: array[0..256of char;
    lbuff: array[0..256of char;
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then begin
    lbuff[0]:=DriveLetter;
    lbuff[1]:=':';
    lbuff[2]:=#0;
    buff[0]:=#0;
    QueryDosDevice(lbuff,buff,256);
    Result:=StrPas(buff);
    if Copy(Result,1,4) = '\??\' then
      Result:=Copy(Result,5,Length(Result))
    else
      Result:='';
  end else begin
    drvno:=Ord(UpperCase(DriveLetter)[1])-64;
    buff[0]:=#0;
    asm
       pushad
       push    es
       xor     ebx, ebx
       mov     bh,2
       mov     bl,drvno
       lea     edx,buff
       push    0       //ECX (unused)
       push    71AAh
       push    2A0010h
       call    VxDCall
       pop     es
       popad
    end;
    Result:=StrPas(buff);
    if Result = '' then Exit;
    // convert to longfilename
    asm
       // expand long path
       pushad
       push    ds
       push    es
       xor     ebx, ebx
       lea     esi, buff
       lea     edi, lbuff
       mov     ecx,0
       mov     cl, 2
       mov     ch, 0
       push    ECX
       push    7160h
       push    2A0010h
       call    VxDCall
       pop     es
       pop     ds
       popad
    end;
    Result:=StrPas(lbuff);
  end;
end;

function SubstRemove(DriveLetter: Char): Boolean;
var drvno: byte;
    Drive,Path: string;
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then begin
    SetLength(Drive,3);
    Drive[1]:=DriveLetter;
    Drive[2]:=':';
    Drive[3]:=#0;
    Path:=SubstQuery(DriveLetter);
    Result:=DefineDosDevice(DDD_REMOVE_DEFINITION,PChar(Drive),PChar(Path));
  end else begin
    drvno:=Ord(UpperCase(DriveLetter)[1])-64;
    asm
       pushad
       push    es
       xor     ebx, ebx
       mov     bh,1
       mov     bl,drvno
       push    0       //ECX (unused)
       push    71AAh
       push    2A0010h
       call    VxDCall
       pop     es
       popad
    end;
    Result:=SubstQuery(DriveLetter) = '';
  end;
end;

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Di 05.07.05 20:15 
errare humanum est.
wie man sieht aber ein ziemlich komplexer code ...

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Tendl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Mi 06.07.05 09:05 
Hallo maxk,

ich glaube Dein Code macht genau was ich will. Die Variante mit dem Abfangen der Antwort des "subst" Kommandos ohne Parameter hatte ich mir auch schon überlegt, war mir aber ziemlich sicher auch über die Win-Api ans Ziel zu kommen.
In meinem speziellen Fall soll ein Hintergrundprogramm immer wieder periodisch die Zuordnung prüfen, daher favourisiere ich Deine Lösung.
Ich werde den Code morgen mal einbauen.


Vielen Dank
Thomas