PDA

View Full Version : دسترسی به my network place



delphi5
چهارشنبه 30 آبان 1386, 13:19 عصر
چطور میتوان به my network place دسترسی پیدا کرد .

nasr
چهارشنبه 30 آبان 1386, 14:04 عصر
چطور میتوان به my network place دسترسی پیدا کرد .

سلام
بفرمایید

delphi5
چهارشنبه 30 آبان 1386, 14:32 عصر
مرسی . این فایل با Delphi 5 باز نمیشه !
چطور میتونم بازش کنم ؟

nasr
چهارشنبه 30 آبان 1386, 14:42 عصر
مرسی . این فایل با Delphi 5 باز نمیشه !
چطور میتونم بازش کنم ؟

از این کد استفاده کن


type
PNetResourceArray = ^TNetResourceArray;
TNetResourceArray = array[0..100] of TNetResource;

function CreateNetResourceList(ResourceType: DWord;
NetResource: PNetResource;
out Entries: DWord;
out List: PNetResourceArray): Boolean;
var
EnumHandle: THandle;
BufSize: DWord;
Res: DWord;
begin
Result := False;
List := Nil;
Entries := 0;
if WNetOpenEnum(RESOURCE_GLOBALNET,
ResourceType,
0,
NetResource,
EnumHandle) = NO_ERROR then begin
try
BufSize := $4000; // 16 kByte
GetMem(List, BufSize);
try
repeat
Entries := DWord(-1);
FillChar(List^, BufSize, 0);
Res := WNetEnumResource(EnumHandle, Entries, List, BufSize);
if Res = ERROR_MORE_DATA then
begin
ReAllocMem(List, BufSize);
end;
until Res <> ERROR_MORE_DATA;

Result := Res = NO_ERROR;
if not Result then
begin
FreeMem(List);
List := Nil;
Entries := 0;
end;
except
FreeMem(List);
raise;
end;
finally
WNetCloseEnum(EnumHandle);
end;
end;
end;

procedure ScanNetworkResources(ResourceType, DisplayType: DWord; List: TStrings);

procedure ScanLevel(NetResource: PNetResource);
var
Entries: DWord;
NetResourceList: PNetResourceArray;
i: Integer;
begin
if CreateNetResourceList(ResourceType, NetResource, Entries, NetResourceList) then try
for i := 0 to Integer(Entries) - 1 do
begin
if (DisplayType = RESOURCEDISPLAYTYPE_GENERIC) or
(NetResourceList[i].dwDisplayType = DisplayType) then begin
List.AddObject(NetResourceList[i].lpRemoteName,
Pointer(NetResourceList[i].dwDisplayType));
end;
if (NetResourceList[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then
ScanLevel(@NetResourceList[i]);
end;
finally
FreeMem(NetResourceList);
end;
end;

begin
ScanLevel(Nil);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Cursor := crHourGlass;
Button1.Cursor := crHourGlass;
ScanNetworkResources(RESOURCETYPE_DISK, RESOURCEDISPLAYTYPE_SERVER, ListBox1.Items);
form1. Cursor := crDefault;
end;

delphi5
سه شنبه 13 آذر 1386, 13:13 عصر
منظورم اینه که چطور آدرس my network Place یا my document یا desktop یوزر فعال را بدست بیاورم .

mortezakiaee
سه شنبه 13 آذر 1386, 17:01 عصر
چرا از توی رجیستری نمی خونی؟

vcldeveloper
چهارشنبه 14 آذر 1386, 03:13 صبح
منظورم اینه که چطور آدرس my network Place یا my document یا desktop یوزر فعال را بدست بیاورم .
SHGetSpecialFolderPath در یونیت ShlObj.

توضیحات مربوط به این تابع API و لیست CSIDL های مرتبط با آن را هم می تونید از MSDN بگیرید.

taha2005
چهارشنبه 17 فروردین 1390, 17:08 عصر
سلام
این تاپیک قدیمه

ولی من بهش نیاز دارم.

من از کدهای پست 4 که همه جای اینترنت گفته شده استفاده کردم واسه نمایش لیست کامپیوترهای workGroup
ویندوزم seven هست البته رو xp هم تست کردم ولی هیچیو بهم نمایش نمیده !!! چرا ؟ باید چی کار کنم ؟

راه حل های دیگه رو هم تست کردم ولی هیچ کدوم هیچیو بهم نمایش نمیدن:گریه::عصبانی++:

BORHAN TEC
چهارشنبه 17 فروردین 1390, 18:17 عصر
از کد زیر استفاده کنید:
type
PNetResourceArray = ^TNetResourceArray;
TNetResourceArray = array [0 .. 100] of TNetResource;
function CreateNetResourceList(ResourceType: DWord; NetResource: PNetResource;
out Entries: DWord; out List: PNetResourceArray): Boolean;
var
EnumHandle: THandle;
BufSize: DWord;
Res: DWord;
begin
Result := False;
List := Nil;
Entries := 0;
if WNetOpenEnum(RESOURCE_GLOBALNET, ResourceType, 0, NetResource, EnumHandle)
= NO_ERROR then
begin
try
BufSize := $4000; // 16 kByte
GetMem(List, BufSize);
try
repeat
Entries := DWord(-1);
FillChar(List^, BufSize, 0);
Res := WNetEnumResource(EnumHandle, Entries, List, BufSize);
if Res = ERROR_MORE_DATA then
begin
ReAllocMem(List, BufSize);
end;
until Res <> ERROR_MORE_DATA;
Result := Res = NO_ERROR;
if not Result then
begin
FreeMem(List);
List := Nil;
Entries := 0;
end;
except
FreeMem(List);
raise;
end;
finally
WNetCloseEnum(EnumHandle);
end;
end;
end;
procedure ScanNetworkResources(ResourceType, DisplayType: DWord;
List: TStrings);
procedure ScanLevel(NetResource: PNetResource);
var
Entries: DWord;
NetResourceList: PNetResourceArray;
i: Integer;
begin
if CreateNetResourceList(ResourceType, NetResource, Entries,
NetResourceList) then
try
for i := 0 to Integer(Entries) - 1 do
begin
if (DisplayType = RESOURCEDISPLAYTYPE_GENERIC) or
(NetResourceList[i].dwDisplayType = DisplayType) then
begin
List.AddObject(NetResourceList[i].lpRemoteName,
Pointer(NetResourceList[i].dwDisplayType));
end;
if (NetResourceList[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then
ScanLevel(@NetResourceList[i]);
end;
finally
FreeMem(NetResourceList);
end;
end;
begin
ScanLevel(Nil);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ScanNetworkResources(RESOURCETYPE_DISK, RESOURCEDISPLAYTYPE_SERVER,
ListBox1.Items);
end;

taha2005
پنج شنبه 18 فروردین 1390, 08:52 صبح
سلام

ممنون بابت توجهتون

من کدی که شما گذاشته بودید رو هم جایگزین کردم هر چند که هیچ تفاوتی نداشت ولی بازم تو لیست باکس هیچیو نمایش نمیده.

حتی exe خودتون رو هم اجرا کردم ولی هیچ جوابی نگرفتم.
این exe باید تو مسیر خاصی اجرا بشه؟:متفکر:

وقتی برنامه رو تریس میکنم تعداد entrie ها رو سه نشون میده که تعداد کامپیوترهام تو شبکه هست ولی هیچیو تو لیست باکس برنمیگردونه !!!!

چرا ؟:افسرده:

BORHAN TEC
جمعه 26 فروردین 1390, 09:28 صبح
برنامه ای که قرار داده ام به درستی کار می کند. نکته : اگر شما می خواهید دو کامپیوتر A و B را با هم شبکه کنید باید آی پی یکی از این دو را در خاصیت Defual Gateway دیگری وارد کنید.

در زیر هم تصاویری را از اجرا شدن برنامه می توانید مشاهده کنید.

vcldeveloper
جمعه 26 فروردین 1390, 12:44 عصر
اگر شما می خواهید دو کامپیوتر A و B را با هم شبکه کنید باید آی پی یکی از این دو را در خاصیت Defual Gateway دیگری وارد کنید.
درست نیست!
Default Gateway ربطی به شبکه کردن کامپیوترها با هم نداره، بلکه مشخص میکنه که چه کامپیوتری دروازه ورود و خروج کامپیوترهای اون شبکه با سایر شبکه ها ست؛ به عنوان مثال، اگر فقط یک کامپیوتر به اینترنت دسترسی داشته باشه، و بخواد اتصال اینترنتش را با سایر کامپیوترها به اشتراک بزاره، سایر کامپیوترهای داخل اون شبکه باید Default Gateway خودشون رو روی آدرس اون کامپیوتر خاص تنظیم کنند.

BORHAN TEC
جمعه 26 فروردین 1390, 13:32 عصر
درست نیست!
Default Gateway ربطی به شبکه کردن کامپیوترها با هم نداره، بلکه مشخص میکنه که چه کامپیوتری دروازه ورود و خروج کامپیوترهای اون شبکه با سایر شبکه ها ست؛ به عنوان مثال، اگر فقط یک کامپیوتر به اینترنت دسترسی داشته باشه، و بخواد اتصال اینترنتش را با سایر کامپیوترها به اشتراک بزاره، سایر کامپیوترهای داخل اون شبکه باید Default Gateway خودشون رو روی آدرس اون کامپیوتر خاص تنظیم کنند.
این مطلب رو میدونم. من موقع تست برنامنه بالا متوجه شدم که اگر defaultGateway رو تنظیم نکنم نمیتوانم کامپیوتر مورد نظر رو در work group ببینم. توجه داشته باشید که نکته ای که گفتم فقط در ارتباط با برنامه مذکور بوده است. همین...

taha2005
یک شنبه 28 فروردین 1390, 09:44 صبح
حتی اگه این مطلبی که شما فرمودید هم درست باشه!! من نمیتونم همچین کاری رو از یوزرهام بخوام که انجام بدن.

شما برنامه رو تو چه ویندوزی تست میکنید ؟ seven یا xp ؟

راهکار دیگه ای نیست؟

BORHAN TEC
جمعه 02 اردیبهشت 1390, 17:25 عصر
شما برنامه رو تو چه ویندوزی تست میکنید ؟ seven یا xp ؟

در XP

راهکار دیگه ای نیست؟
نمی دونم،من سعی می کنم که جوابی برای این مسئله پیدا کنم. :متفکر: