ورود

View Full Version : سوال: نمایش درایو های کلاینت در سرور



Mask
پنج شنبه 09 دی 1389, 12:30 عصر
با سلام
اگه برنامه radmin رو دیده باشید. در یه قسمتیش حالت my computer اون کلاینت رو داره.
چطوری باید در کلاینت برنامه نویسی کنم که windows explorer اون کلاینت رو در سرور بتونم داشته باشم.؟
نمیدونم باید اینو شبیه سازی کنم یا روشی هست که بشه به صورت عادی این قابلیت رو در برنامه سرور پیاده سازی کرد.
ممنون.

Felony
پنج شنبه 09 دی 1389, 13:25 عصر
با استفاده از WMI به صورت ریموت میتونید اطلاعات مربوط به سیستم کلاینت رو به دست بیارید .

Mask
پنج شنبه 09 دی 1389, 14:47 عصر
ممنون.
یه نمونه ای کدی چیزی هلپی ملپی ...:متفکر::لبخند:

Felony
پنج شنبه 09 دی 1389, 22:14 عصر
تابع آماده نیست که 1 دقیقه ای بشه براش نمونه نوشت ، میتونید به MSDN مراجعه کنید .

Mask
یک شنبه 12 دی 1389, 18:31 عصر
ممنون.
یه سرچیاتی کردم اینو بدست آوردم.
ببین همینه.
http://msdn.microsoft.com/en-us/library/aa393266%28VS.85%29.aspx


strComputer = "RemoteComputer"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate," _
& "authenticationLevel=pktPrivacy}!" _
& "\\" & strComputer & "\root\EncryptedNamespace")

Felony
یک شنبه 12 دی 1389, 23:12 عصر
نه ، اون ها یکسری توضیحات بودن ، باید از کلاس Win32_Volume به صورت Remote استفاده کنی ، یک نمونه برات نوشتم :


function VarArrayToStr(const vArray: Variant): String;
function _VarToStr(const V: Variant): String;
var
Vt: integer;
begin
Vt:= VarType(V);
case Vt of
varSmallint,
varInteger : Result:= IntToStr(integer(V));
varSingle,
varDouble,
varCurrency : Result:= FloatToStr(Double(V));
varDate : Result:= VarToStr(V);
varOleStr : Result:= WideString(V);
varBoolean : Result:= VarToStr(V);
varVariant : Result:= VarToStr(Variant(V));
varByte : Result:= char(byte(V));
varString : Result:= String(V);
varArray : Result:= VarArrayToStr(Variant(V));
end;
end;
var
i : Integer;
begin
Result:= '[';
if (VarType(vArray) and VarArray)=0 then
Result:= _VarToStr(vArray)
else
for i:= VarArrayLowBound(vArray, 1) to VarArrayHighBound(vArray, 1) do
if i= VarArrayLowBound(vArray, 1) then
Result:= Result + _VarToStr(vArray[i])
else
Result:= Result+'|' + _VarToStr(vArray[i]);
Result:= Result+']';
end;

function VarStrNull(const V: OleVariant): String;
begin
Result:='';
if not VarIsNull(V) then
begin
if VarIsArray(V) then
Result:= VarArrayToStr(V)
else
Result:= VarToStr(V);
end;
end;

function GetWMIObject(const objectName: String): IDispatch;
var
chEaten: Integer;
BindCtx: IBindCtx;
Moniker: IMoniker;
begin
OleCheck(CreateBindCtx(0, bindCtx));
OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
end;

procedure GetDrive(const IP: String; const List:TStrings);
var
objWMIService : OLEVariant;
colItems : OLEVariant;
colItem : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
begin;
objWMIService := GetWMIObject('winmgmts:\\'+ IP +'\root\CIMV2');
colItems := objWMIService.ExecQuery('SELECT * FROM Win32_Volume','WQL',0);
oEnum := IUnknown(colItems._NewEnum) as IEnumVariant;
while oEnum.Next(1, colItem, iValue) = 0 do
if VarStrNull(colItem.Label)<> '' then
List.Add(VarStrNull(colItem.DriveLetter)+ VarStrNull(colItem.Label));
end;

استفاده:

GetDrive('127.0.0.1', Memo1.Lines);

کتابخانه های ComObj ، ActiveX و Variants رو اضافه کن .

@ با این Dialup دهنم صاف شد تا MSDN رو باز کردم و کلاسش رو پیدا کردم .

Mask
دوشنبه 13 دی 1389, 13:02 عصر
این کدها رو در برنامه کلاینت باید نوشت یا سرور؟

Felony
دوشنبه 13 دی 1389, 15:27 عصر
این کدها رو در برنامه کلاینت باید نوشت یا سرور؟
در برنامه سرور دیگه ، با کد بالا میتونید IP سیستم کلاینت مورد نظر رو بدید و لیست درایوهاش رو به دست بیارید .

Mask
دوشنبه 13 دی 1389, 15:40 عصر
حاجی مرسی
اما سواله بعدیم اینه که حالا اگه بخام وارد درایو ها بشم و فایل بسازم و یا دیلیت یا ادیت انجام بدم چی؟

Felony
دوشنبه 13 دی 1389, 19:38 عصر
حاجی مرسی
اما سواله بعدیم اینه که حالا اگه بخام وارد درایو ها بشم و فایل بسازم و یا دیلیت یا ادیت انجام بدم چی؟

بستگی به سطح دسترسیتون به کلاینت ها داره ، اگر دسترسیتون بدون محدودیت هست میتونید به همون صورت بالا به درایو ها دسترسی داشته باشید ، مثلا :

\\192.168.0.9\D:\
به صورت بالا شما به درایو D سیستم 192.168.0.9 دسترسی دارید و میتونید لیست فایل هاش رو بگیرید یا ...

Mask
سه شنبه 14 دی 1389, 12:46 عصر
حاجی اینو چیکار کنم.

---------------------------
Project1
---------------------------
Access is denied.
---------------------------
OK
---------------------------

Felony
سه شنبه 14 دی 1389, 15:56 عصر
حاجی اینو چیکار کنم.

چه زمانی این خطای دسترسی رو میگیری ؟ زمان درخواست اطلاعات از WMI سیستم Client ؟ اگر اینطوره دسترسیتون به کلاینت رو Full کنید .