怎样自己编程实现增加个虚拟的盘符或增加有盘符的网络硬盘
解决方案 »
- OleVariant类型变量的处理,急!!!!!!!!!!!!!
- 如何动态向dbgrid控件中添加combobox控件,添加内容为库中对应字段值
- 请问《delphi 6 开发人员指南》和《delphi 5 开发人员指南》的区别
- 做过进销存的请进
- 各位大哥,哪能里有好的位图图片下载呀!
- --------------- 关于报表打印的问题 ------------------打印时,我想让一张纸只打印一条记录,该怎么做呀???
- 做个小调查,大家开发软件时用哪些控件比较顺手呢?
- 如何向注册表中写入二进制文件?
- 急!急!急!ado的数据更新!
- 不好意思,小问题,如何打印在image1.canvas中自定义的图形,请指点
- 奇怪的SQL错误,在线等
- 控件SPComm的异常如何处理
http://search.csdn.net/Expert/topic/2483/2483810.xml?temp=.5242884
模拟DOS命令 - subst 来源:未知
unit Subst;
{
API for work with substitution device (see dos command "subst").
Win 9x/NT/2000/XP compatible
ver. 1.2 Last rev. 25 Feb 2002Freware with source.Copyright (c) 2000-2002, SoftLab MIL-TEC Ltd
Web: http://www.softcomplete.com
Email: [email protected] SOFTWARE AND THE ACCOMPANYING FILES ARE DISTRIBUTED
"AS IS" AND WITHOUT WARRANTIES AS TO PERFORMANCE OF MERCHANTABILITY OR
ANY OTHER WARRANTIES WHETHER EXPRESSED OR IMPLIED.
NO WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE IS OFFERED.
THE USER MUST ASSUME THE ENTIRE RISK OF USING THE ACCOMPANYING CODE. // 请注意此段文本Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:1. The origin of this software must not be misrepresented, you must
not claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation
would be appreciated but is not required.
2. Altered source versions must be plainly ed as such, and must not be
misrepresented as being the original software.
3. Original copyright may not be removed or altered from any source
distribution.
}interfaceuses Windows, SysUtils;function SubstCreate(DriveLetter: Char; const Path: string): Boolean;
// create subst device. Path must be a real folder.function SubstRemove(DriveLetter: Char): Boolean;
// destroy subst device.function SubstQuery(DriveLetter: Char): string;
// get Path for subst device.
// return empty string if DriveLetter is not subst-deviceimplementationprocedure VxDCall; external kernel32 index 1;function SubstCreate(DriveLetter: Char; const Path: string): Boolean;
var drvno: byte;
buff: array[0..256] of char;
FPath: string;function AddSlash(const Path: string): string; {??áàa???ì \ ???è íà??}
begin
if (Path = '') or (Path[Length(Path)] <> '\') then Result:=Path+'\'
else Result:=Path;
end;begin
if Path[Length(Path)] = '\' then
FPath:=Copy(Path,1,Length(Path)-1)
else
FPath:=Path;
if Win32Platform = VER_PLATFORM_WIN32_NT then begin
buff[0]:=DriveLetter;
buff[1]:=':';
buff[2]:=#0;
Result:=DefineDosDevice(0,buff,PChar(Path));
end else begin
FPath:=ExtractShortPathName(FPath);
if FPath <> '' then begin
drvno:=Ord(UpperCase(DriveLetter)[1])-64;
StrPCopy(buff,FPath);
asm
pushad
push es
xor ebx, ebx
mov bh,0
mov bl,drvno
lea edx,buff
push 0 //ECX (unused)
push 71AAh
push 2A0010h
call VxDCall
pop es
popad
end;
end;
Result:=ANSIUpperCase(AddSlash(SubstQuery(DriveLetter))) = ANSIUpperCase(AddSlash(Path));
end;
end;
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;function SubstQuery(DriveLetter: Char): string;
var drvno: byte;
buff: array[0..256] of char;
lbuff: array[0..256] of 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;end.