Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.08.11;
Скачать: [xml.tar.bz2];

Вниз

localhost proba file.exe TO d: proba file.exe   Найти похожие ветки 

 
LORD   (2003-07-26 18:12) [0]

Народ поскажите .
известен путь к файлу: \\localhost\proba\file.exe
из нег надо получить настоящий путь, типа: d:\proba\file.exe
как ето зделать программно?


 
Verg   (2003-07-26 18:31) [1]

Вот тут в амбаре попался модуль, попробуй - под Nt-подобными системами точно пашет, а под 9x - никто не проверял, заодно и скажешь где ошибка, если по девятками не пашет:

interface
function GetShareLocalPath(const Path : string):string;
implementation
uses Windows, Common, SysUtils;
const
STYPE_DISKTREE = 0;
STYPE_PRINTQ = 1;
STYPE_DEVICE = 2;
STYPE_IPC = 3;
NERR_BASE = 2100;
NERR_BufTooSmall = NERR_BASE + 23;
CNLEN = 15;
LM20_CNLEN =15;
DNLEN = CNLEN;
LM20_DNLEN = LM20_CNLEN;
UNCLEN = (CNLEN+2);
LM20_UNCLEN = (LM20_CNLEN+2);
NNLEN = 80;
LM20_NNLEN = 12;
RMLEN = (UNCLEN+1+NNLEN);
LM20_RMLEN =(LM20_UNCLEN+1+LM20_NNLEN);
SHPWLEN = 8;
type
PSHARE_INFO_2 = ^SHARE_INFO_2;
SHARE_INFO_2 = record
shi2_netname : PWideChar;
shi2_type : DWORD;
shi2_remark : PWideChar;
shi2_permissions : DWORD;
shi2_max_uses : DWORD;
shi2_current_uses : DWORD;
shi2_path : PWideChar;
shi2_passwd : PWideChar;
end;

Pshare_info_50 = ^Tshare_info_50;
Tshare_info_50 = packed record
shi50_netname : array[0..LM20_NNLEN] of char;
shi50_type : byte;
shi50_flags : word;
shi50_remark : pchar;
shi50_path : pchar;
shi50_rw_password : array[0..SHPWLEN] of char;
shi50_ro_password : array[0..SHPWLEN] of char;
end;
TFNNetShareGetInfo = function(ServerName, netname : pwidechar;
Level : DWORD; var PBuffer: pointer):DWORD; stdcall;
TFNNetShareGetInfo9x = function(pszServer, pszNetName : pchar;
sLevel : smallint;
pbBuffer : pointer; cbBuffer: word;
var pcbTotalAvail : word):DWORD; stdcall;
TFNNetApiBufferFree = function(Buffer : pointer):DWORD; stdcall;
var
NetApiDll : string = "NETAPI32.DLL";
NetApiDll9x : string ="Svrapi.DLL";
NetApiModule : HModule = 0;
ShareGetInfo : TFNNetShareGetInfo = nil;
ShareGetInfo9x : TFNNetShareGetInfo9x = nil;
ApiBufferFree : TFNNetApiBufferFree = nil;
procedure InitNetApi;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
if NetApiModule=0 then NetApiModule:=LoadLibrary(Pchar(NetApiDll));
end else
if NetApiModule=0 then NetApiModule:=LoadLibrary(Pchar(NetApiDll9x));
end;

function NetShareGetInfo(ServerName, netname : pwidechar;
Level : DWORD; var PBuffer: pointer):DWORD;
begin
InitNetApi;
if @ShareGetInfo=nil then @ShareGetInfo:= GetProcAddress(NetApiModule, "NetShareGetInfo");
if @ShareGetInfo<>nil then
result:=ShareGetInfo(ServerName, netname,Level,PBuffer)
else result:=1;
end;

function NetShareGetInfo9x(ServerName, netname : pchar;
Level : smallint; PBuffer: pointer; BuffSize : word; var BytesAvail: word):DWORD;
begin
InitNetApi;
if @ShareGetInfo9x=nil then @ShareGetInfo9x:= GetProcAddress(NetApiModule, "NetShareGetInfo");
if @ShareGetInfo9x<>nil then
result:=ShareGetInfo9x(ServerName, netname,Level,PBuffer, BuffSize, BytesAvail)
else result:=1;
end;

function NetApiBufferFree(Buffer : pointer):DWORD;
begin
InitNetApi;
if @ApiBufferFree=nil then @ApiBufferFree:= GetProcAddress(NetApiModule, "NetApiBufferFree");
if @ApiBufferFree<>nil then
result:=ApiBufferFree(Buffer)
else result:=1;
end;

function Win9xGetShare(const S: string) : string;
var P : Pshare_info_50;
Ba, Cb : word;
D : DWORD;
begin
P:=nil;
result:="";
Cb:=0;
D:=NetShareGetInfo9x(nil, pchar(S), 50, P, Cb, Ba);
if D=NERR_BufTooSmall then
begin
Cb:=Ba;
GetMem(P, Cb);
try
D:=NetShareGetInfo9x(nil, pchar(S), 50, P, Cb, Ba);
if D=0 then
begin
result:=P^.shi50_path;
end
finally
FreeMem(P);
end;
end;
end;

function GetShareLocalPath(const Path : string):string;
var Buffer : array[0..MAX_PATH-1] of WideChar;
CompName : array[0..MAX_COMPUTERNAME_LENGTH] of char;
P : PSHARE_INFO_2;
Rslt : DWORD;
S, SCn : string;
begin
result:="";
Rslt:=sizeof(CompName);
if GetComputerName(@CompName, Rslt) then
begin
S:=Path;
Scn:=GetParameter("\\",S,["\"],[]);
S:=GetParameter("\\"+SCN+"\",S,["\"],[]);
if AnsiUpperCase(Scn)=AnsiUpperCase(string(CompName)) then
begin
if Win32Platform <> VER_PLATFORM_WIN32_NT then
begin
result:=Win9xGetShare(S);
end else
begin
P:=nil;
Rslt := NetShareGetinfo(nil,StringToWideChar(S, @Buffer[0], sizeof(Buffer)),2, pointer(P));
if (Rslt=0) and (P<>nil) then
begin
if P^.shi2_type=STYPE_DISKTREE then
result:=WideCharToString(P^.shi2_path);
if NetApiBufferFree(P)<>0 then
LocalFree(integer(P));
end;
end;
end;
end;
end;

initialization
finalization
if NetApiModule<>0 then FreeLibrary(NetApiModule);
end.



 
lord   (2003-07-27 01:00) [2]

а что за модуль COMMON я про такой не слышал
да и компилятор тоже его не находит
пробовал поискать на винте такого не нашлось


 
lord   (2003-07-28 19:49) [3]

а что ето инфа в реестре ни где не прописана ????
может все гораздо проще ???


 
ZZ   (2003-07-28 20:14) [4]

Ну ё мое.. ну убери ты модуль common. Не работает? Основная функция тут NetShareGetinfo, описание которой Verg тебе привел - хелп в руки и эксперементируй. Нужно проще? Так куда еще проще?!
Нужно и из реестра? Так поищи в нем этот путь.


 
Verg   (2003-07-29 13:25) [5]


> GetParameter("\\",S,["\"],[]);


Это единственное что используется из common:
Функция возвражщает все, что в S начинается с первого параметра этой функции, ограничителями являются третий параметр (set of char), а четвертый параметр - это набор blanks (символов считающихся незначещими "пробелами"), тоже set of char.




Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.08.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.02 c
3-33066
steelpunk
2003-07-17 17:10
2003.08.11
В DbGrid вместо русских букв диез(#)


1-33117
@Ujin
2003-07-29 23:47
2003.08.11
Как сделать PopupMenu меню как в самой Delphi?


9-33036
SergeN
2003-02-10 11:07
2003.08.11
С чего начать и стоит ли?


14-33316
Бархатный
2003-07-24 21:44
2003.08.11
Запустить программу из памяти


8-33232
Serg123
2003-04-14 15:37
2003.08.11
Получение свойств avi файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский