الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اسم الكمبيوتر للجهاز الموجود عليه الملف التنفيذي ؟؟

مغلقمُجاب
بدأه c_vita في 19 مارس 2013 · 5 رد · 1,084 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم 

لدي برنامج يعمل على شبكة وملفه التنفيذي واحد _ اي ان الملف التنفيذي موجد على احد الاجهزة ويوجد له اختصارات على الاجهزة الاخرى - فجميع من في الشبكة يستخدمون نفس الملف التنفيذي .

ما اريده : دالة تعطيني اسم الجهاز الموجود عليه الملف التنفيذي .. اتعملت الدالة التالية والتي تعطيني اسم الجهاز الذي عليه اختصار للملف التنفيذي 

جزاكم الله الله خيراً مقدماً 

function stGetCompName: string;
var
  Name: array [0 .. 255] of char;
  S: Cardinal;
begin
  S := SizeOf(Name);
  GetComputerName(Name, S);
  Result := StrPas(Name);
end;
#2

الدالة GetComputerName ستعطيك إسم الحاسوب الذي يعمل عليه البرنامج، ماهي مشكلتك فبرنامجك يبدو سليم؟

#3
Mr.B كتب:

الدالة GetComputerName ستعطيك إسم الحاسوب الذي يعمل عليه البرنامج، ماهي مشكلتك فبرنامجك يبدو سليم؟

الملف التنفيذي في جهاز (A) وله اختصار على جهاز ( B )

عند استدعاء الملف التفيذي من الاختصار الموجود على الجهاز   B يعطيني اسم الجهاز (A) وانا اريد اسم الجهاز B

تم تعديل هذه المشاركة بواسطة c_vita في 19 مارس 2013 في 15:12

#4

أخي هل رأيت هذه المشكلة بنفسك أم تفترض أن هذا سيحدث؟ فهذا غير منطقي، لايهم أين يتواجد البرنامج. لما يعمل البرنامج فيحمل في ذاكرة الحاسوب B وليس في A، لذا سيعطيك إسم B.

#5

اسف حدث خطأ مني 

 الصحيح هو:

عند استدعاء الملف التفيذي من الاختصار الموجود على الجهاز   B يعطيني اسم الجهاز ( B ) وانا اريد اسم الجهاز A

#6 أفضل إجابة

السلام عليكم...

 

يمكن الاستفادة من الخاصية ExeName للـ Application.

 

أضف الوحدة StrUtils لجملة uses من أجل الدالة PosEx.

 

اكتب الدالة التالية ثم قم باستدعائها حيث تريد:

function GetAppCompName(): string;
var
    AName: array [0 .. 255] of char;
    S: Cardinal;
    CompName: string;
    NextSlash: Integer;
begin
    if Copy(Application.ExeName, 2, 1) = ':' then begin
        S := SizeOf(AName);
        GetComputerName(AName, S);
        Result := StrPas(AName);
        end
    else if Copy(Application.ExeName, 1, 2) = '\\' then begin
        NextSlash := PosEx('\', Application.ExeName, 3);
        Result := Copy(Application.ExeName, 3, NextSlash - 3);
        end
    else
        Result := '';
end;

* بما أن الخاصية ExeName تعطي مسار الملف التنفيذي فإن المسار المعاد في حالة أن البرنامج مشغل من نفس الحاسوب سيبدأ بحرف محرك الأقراص ثم شارحة ":" ثم شرطة مائلة واحدة "\". أما في حالة تشغيله من جهاز آخر فإن المسار يبدأ بشرطتين "\\" ثم اسم الحاسوب البعيد، و هذا ما تعتمد عليه الدالة السابقة.

 

و لاستعمالها مثلاً:

procedure TForm1.Button1Click(Sender: TObject);
begin
    Edit2.Text := GetAppCompName;
end;

 

نرجو الاستفادة و السلام.

تم تعديل هذه المشاركة بواسطة najy_zl في 19 مارس 2013 في 18:55

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…