چطور میتوان به my network place دسترسی پیدا کرد .
چطور میتوان به my network place دسترسی پیدا کرد .
مرسی . این فایل با 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;
منظورم اینه که چطور آدرس my network Place یا my document یا desktop یوزر فعال را بدست بیاورم .
چرا از توی رجیستری نمی خونی؟
SHGetSpecialFolderPath در یونیت ShlObj.منظورم اینه که چطور آدرس my network Place یا my document یا desktop یوزر فعال را بدست بیاورم .
توضیحات مربوط به این تابع API و لیست CSIDL های مرتبط با آن را هم می تونید از MSDN بگیرید.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
سلام
این تاپیک قدیمه
ولی من بهش نیاز دارم.
من از کدهای پست 4 که همه جای اینترنت گفته شده استفاده کردم واسه نمایش لیست کامپیوترهای workGroup
ویندوزم seven هست البته رو xp هم تست کردم ولی هیچیو بهم نمایش نمیده !!! چرا ؟ باید چی کار کنم ؟
راه حل های دیگه رو هم تست کردم ولی هیچ کدوم هیچیو بهم نمایش نمیدن
از کد زیر استفاده کنید:
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;
سلام
ممنون بابت توجهتون
من کدی که شما گذاشته بودید رو هم جایگزین کردم هر چند که هیچ تفاوتی نداشت ولی بازم تو لیست باکس هیچیو نمایش نمیده.
حتی exe خودتون رو هم اجرا کردم ولی هیچ جوابی نگرفتم.
این exe باید تو مسیر خاصی اجرا بشه؟
وقتی برنامه رو تریس میکنم تعداد entrie ها رو سه نشون میده که تعداد کامپیوترهام تو شبکه هست ولی هیچیو تو لیست باکس برنمیگردونه !!!!
چرا ؟
آخرین ویرایش به وسیله taha2005 : پنج شنبه 18 فروردین 1390 در 10:04 صبح
برنامه ای که قرار داده ام به درستی کار می کند. نکته : اگر شما می خواهید دو کامپیوتر A و B را با هم شبکه کنید باید آی پی یکی از این دو را در خاصیت Defual Gateway دیگری وارد کنید.
در زیر هم تصاویری را از اجرا شدن برنامه می توانید مشاهده کنید.
درست نیست!اگر شما می خواهید دو کامپیوتر A و B را با هم شبکه کنید باید آی پی یکی از این دو را در خاصیت Defual Gateway دیگری وارد کنید.
Default Gateway ربطی به شبکه کردن کامپیوترها با هم نداره، بلکه مشخص میکنه که چه کامپیوتری دروازه ورود و خروج کامپیوترهای اون شبکه با سایر شبکه ها ست؛ به عنوان مثال، اگر فقط یک کامپیوتر به اینترنت دسترسی داشته باشه، و بخواد اتصال اینترنتش را با سایر کامپیوترها به اشتراک بزاره، سایر کامپیوترهای داخل اون شبکه باید Default Gateway خودشون رو روی آدرس اون کامپیوتر خاص تنظیم کنند.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
این مطلب رو میدونم. من موقع تست برنامنه بالا متوجه شدم که اگر defaultGateway رو تنظیم نکنم نمیتوانم کامپیوتر مورد نظر رو در work group ببینم. توجه داشته باشید که نکته ای که گفتم فقط در ارتباط با برنامه مذکور بوده است. همین...درست نیست!
Default Gateway ربطی به شبکه کردن کامپیوترها با هم نداره، بلکه مشخص میکنه که چه کامپیوتری دروازه ورود و خروج کامپیوترهای اون شبکه با سایر شبکه ها ست؛ به عنوان مثال، اگر فقط یک کامپیوتر به اینترنت دسترسی داشته باشه، و بخواد اتصال اینترنتش را با سایر کامپیوترها به اشتراک بزاره، سایر کامپیوترهای داخل اون شبکه باید Default Gateway خودشون رو روی آدرس اون کامپیوتر خاص تنظیم کنند.
حتی اگه این مطلبی که شما فرمودید هم درست باشه!! من نمیتونم همچین کاری رو از یوزرهام بخوام که انجام بدن.
شما برنامه رو تو چه ویندوزی تست میکنید ؟ seven یا xp ؟
راهکار دیگه ای نیست؟
در XPشما برنامه رو تو چه ویندوزی تست میکنید ؟ seven یا xp ؟
نمی دونم،من سعی می کنم که جوابی برای این مسئله پیدا کنم.راهکار دیگه ای نیست؟