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

كيف يمكنني أن أعلم البرنامج بالملف الذي طلب من الحاسوب فتحه بالنقر عليه؟

مغلق
بدأه دريد عبد الله في 8 يناير 2008 · 4 رد · 754 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحبا

لدي سؤال لو سمحتم:

هناك في الويندوس ما يسمى "فتح الملف باستخدام.." ونعلم أنه لفتح ملف ننقر فوق الملف لفتحه

السؤال:كيف يمكنني أن أعلم البرنامج بالملف الذي طلب من الحاسوب فتحه بالنقر عليه؟

للتوضيح:

مثلا أنا صنعت برنامج, وهذه البرنامج يفتح نوع معين من الملفات,فذهبت إلى

محرر التسجيل,وأضفت إليه البيانات المطلوبه عن نوع الملفات وموقع البرنامج...

المهم: أنا قمت بفتح أحد الملفات باستخدام البرنامج الذي صنعته

كيف سأعلم البرنامج بمسار الملف الذي فتحته؟أي ماهي الطريقة التي يتبعها الويندوز في هذه الحالة؟

أرجو الإجابة على السؤالين الأخيرين ولو بإيجاز

ومشكورين سلفا يا أعضاء ومشرفي هذا المنتدى الرائع و المفيد حقا

Doried Abd Allah

Prelware D&D Association

Lattakia/Syria

#2

سأقوم بالشرح و لكن بمثال

هنفترض انك بتعمل برنامج عارض صور

انا هتكلم بأبسط برنامج ممكن لحد الموضوع اللى انت بتتكلم عنه علشان توضح الفكره

الحالة الاولى انك تعمل برنامج عليه PictureBox و تحط الصوره جواه و الموضوع انتهى على كده.

الحالة الثانيه هو انك تعمل البرنامج و بدل ما تحمل الصورة بإيديك تكتب المسار فى الدالة LoadPicture و هى تحمل الصورة.

الحالة الثالثه انك تضع TextBox يقوم المستخدم يدخل المسار بتاع الصورة و يدوس OK فتظهر الصورة فى داخل الأداة.

الحالة الإخيره انك تخلى البرنامج بتاعك يسجل نفسه داخل الريجسترى كأنه عارض الصور الإفتراضى.

و ده يؤدى بنا انك تخلى الريجسترى يبعت المسار بتاع الملف اللى اضغط عليه دبل كليك للملف بتاعك و بعد كده البرنامج بتاعك ياخد المسار ده و يعمل Load للصورة

هنفترض ان البرنامج بتاعك هيعرض صورة بتاخد امتداد bmp و بالتالى شكل المسار فى الريجسترى التالى

[HKEY_CLASSES_ROOT\.bmp]
@="Image.BMP.File"

الحرف @ يشير للقيمة الافتراضيه للـ bmp key و هى هنا مسار لـ Key اخر اسمه Image.BMP.File و شكله هيكون كالتالى

[HKEY_CLASSES_ROOT\Image.BMP.File]

[HKEY_CLASSES_ROOT\Image.BMP.File\DefaultIcon]
@=هنا يتم وضع مسار ايقونة للف

[HKEY_CLASSES_ROOT\Image.BMP.File\shell]

[HKEY_CLASSES_ROOT\Image.BMP.File\shell\open]
@=هنا تكتب الكلمة اللى هتظهر لما تدوس على المف كليك يمين

[HKEY_CLASSES_ROOT\Image.BMP.File\shell\open\command]
@="مسار الملف بتاعك" "%1""

نيجى دلوقتى لأهم نقطة تلاحظ ان اخر كلمة اتكتب داخل الأمر command هى

@="مسار الملف بتاعك" "%1""

يعنى انت هتكتب مسار الملف الـ Exe بتاعك بين Double Quotes بعد كده بتكتب الكلمة %1 برضه بين Double Quotes، طب الكلام ده معناه ايه؟؟

الـ Double Quotes الموجوده حول المسار الخاص بملفك علشان لو كان فيه مسافات فى المسار متحصلش مشكله، و بعد كده فيه الرمز %1 وهو هيستبدل بمسار الصورة و اسمها لما تدوس عليها Double Click اما الـ Double Quotes اللى حوليها برضع علشان موضوع المسافات اللى ممكن تكون موجوده فى المسار.

حاجه اخيره لما تيجى تنشئ الشكل السابق بالكود راعى انك تحط علامة Back Slash مرتين زى كده

C:\\Program Files\\Adobe\\Photoshop CS3\\Photoshop.exe" "%1"

ده الإسلوب المتبع فى تسجيل المسارات داخل الريجسترى بالكود مش من داخل محرر الريجسترى.

الحاجة التانيه ازاى البرنامج بتاعك هيستقبل المسار بتاع الصورة؟؟

المسأله بسيطة المسار اللى هيتكتب بعد اسم الملف الـ Exe هيتبعت للملف عن طريق الـ Command Line و بالتالى فأنت هتقراها عن طريق الأمر Command$ كالتالى:

Dim CmdLine as string

CmdLine=Command$

طبعا الأفضل فى الحالات اللى هتستخدم فيها الـ Command Line انك تبدأ البرنامج بتاعك من Sub Main و بالتالى انت ممكن تعرض الصورة اللى داخله إلى البرنامج بالشكل التالى

Sub Main
   Dim CmdLine as string

   CmdLine=Command$()

  if CmdLine=vbnullstring then   ' انت شغلت البرنامج من غير ما تبعتله صورة يعنى دوست دبل كليك على الملف التنفيذى بنفسك
		 form1.show
  else
		form1.picture1=loadpicture(CmdLine)
		form1.show
  end if
End Sub

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

#3

شكرا

الكود الذي قدمه الأخ الكريم GameExpert يعمل بالشكل المتوقع عند إجراء نقرة مزدوجة على الملف الذي أريد فتحه.

لكن,ماتزال هناك مشكلة:

إذا حاولنا فتح الملف بوساطة البرنامج الذي صنعناه من خلال الأمر "فتح باستخدام" الذي يتوفر عند النقر بالزر الأيمن على الملف

ثم حددنا البرنامج,سيظهر البرنامج رسالة خطأ,وقد اكتشفت السبب ألا وهو أن المسار في هذه الحالة سوف يرجع وهو موضوع بين علامتي اقتباس.

ألا توجد طريقة للتخلص من علامتي الإقتباس.

وشكرا سلفا.

Doried Abd Allah

Prelware D&D Association

Lattakia/Syria

#4

لقد قمت بتجربة ما قلت و قد وجدت الخطأ و عالجته، إليك الدالة التى تحذف الـ Double Quotes

Function RemoveQuote(cmd As String) As String
Dim tmp As String

tmp = Left(cmd, Len(cmd) - 1)

tmp = StrReverse(tmp)

tmp = Left(tmp, Len(tmp) - 1)

tmp = StrReverse(tmp)

RemoveQuote = tmp
End Function

تقوم بإدخال الكلمة التى تحتوى على Double Quotes إليها و هى ستقوم بحذفهم و تعود لكل بالناتج، ولكن احذر فهذه الدالة تقوم بحذف اول واخر حرف بدون تميييز

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

#5

شكراً جزيلا,ماشاء الله, لحد الآن ما طرحت أنا سؤال إلا وكنت أول من يجيبني.!

الله يوفقك

Doried Abd Allah

Prelware D&D Association

Lattakia/Syria

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

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

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

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

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

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