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

تعلم كيف تفتح ملف ببرنامجك والبرنامج مو شغال

مغلق
بدأه MiCcSoft في 26 يونيو 2006 · 8 رد · 2,320 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

طبعا أنا أستخدم vb 2005

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

ثانيا - تسجيل نوع ملف جديدا يعمل ببرنامجك هذا يتم عن طريق الريجيستري في المفتاح :

Hkey_Classess_Root

أفتحوا هذا المسار في الريجستري ستروا مئات تناسيق الملفات أنقروا على أحداها سيظهر لكم مثل هذه الصورة

26_06_06_04_16_51_1151320611Regvalue.JPG

أنتبهوا إلى مكان الدائرة الحمراء يوجد كلمة Winrar ماذا يعني هذا ؟ تقوم هذه الكلمة يتحديد مسار المجلد في الريجيستري والموجود في

المفتاح :أيضا

Hkey_Classess_Root

كما في الصورة التالية :

26_06_06_04_24_18_1151321058RegTalim.JPG

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

قسمة أفتراضية هي نوع الملف الذي سيظهر تحت أسم الملف في المسكشف

النص في الون الأزرق وهي أيقونة الملف ويمكن تمثيلها إما بمسار ايقونة عادي أو رقم أيقونة داخل ملف تنفيذي يعني :

C:\Program Files\WinRAR\WinRAR.exe,0

والأن دخلنا في القسم الأهم والذي هو دليل النظام (الونيدوز لكي يمرر لبرنامجك مسار الملف ) وهو محدد بالون الأصفر ويتكون من :

مجلد رئيسي هو Shell أي الأوامر مثلنا نجد على بعض الملفات عند ضغط الزر اليميني خيارات زائدة عن الملفات الأخرى ويتفرع من هذا المجلد :

الأوامر ويمكن تسميتها على كيفك وفي الصورة مسمى OPEN

ويتفرع منه مجلد أسمه Command ليس أسمه أختياري مثل المجلد OPEN وفيه القيمة الأفتراضية والتي تحتوي على :

مسار البرنامج وفراغ و ا %1 والتي هي رقم الامر الذي سوف يتم تمريره من قبل النظام وهذا الرقم مهم جدا جدا جدا

والان كيف نعمل ذلك برمجيا

الكود الأول :

		Dim RegKey As Microsoft.Win32.RegistryKey
		RegKey = Microsoft.Win32.Registry.ClassesRoot.CreateSubKey(".MiCc"")
		RegKey.SetValue("", "FileDalil")

وهذا الكود لإنشاء مسار في Hkey_Classess_Root يحمل تنسيق الملف

النص ".MiCc" هو تنسيق الملف (نوعه)

النص "FileDalil" هو دليل الملف (كما الون الأحمر في الصورة الأولى)

الأن إنشاء الدليل :

لقد قمنا بتعريف الدليل في الكود السابق على أنه "FileDalil" فيكون الكود :

		Dim ConTr As Microsoft.Win32.RegistryKey
		ConTr = Microsoft.Win32.Registry.ClassesRoot.CreateSubKey("FileDalil")
ConTr.SetValue("", "Moudar")

النص "moudar" هو النص الذي سيظهر تحت أسم الملف

ثم إنشاء المجلدات الفرعية :

المجلد الأول DefaultIcon

ConTr.CreateSubKey("DefaultIcon").SetValue("", icotxt.Text)

النص "Icotxt.text" هو مسار أيقونة الملف

المجلد الثاني Shell:

ConTr = ConTr.CreateSubKey("Shell")

ثم أنشاء مجلدين فرعيين داخل مجلد ل Shell هما Open و Command

   ConTr.CreateSubKey("Open").CreateSubKey("Command").SetValue("", Application.ExecutablePath & " %1")

أنتبهوا لقد وضعت فراغ بين مسار البرنامج ول "%1"

الان عند إنشاء ملف من نوع .MiCc ستكون أيقونته هي الأقونة التي حددتها أنت ......

الأن كيف سنأخذ المسار الذي قام النظام بتمريره إلى البرنامج هي بسيكة كثير كثير كثير لقد تعقدت حتى عرفتها !

وهي عن طريق :

 My.Application.CommandLineArgs

وهي دالة الأوامر التي تم تمريرها إلى البرنامج وهي قد تكون سطر واحد أو عدة أسطر (قد تكون قد حددت عدة ملفات)

الان كيف تستعملها :

بسطية ضع هذا الكود في حدث Form_load

		Dim s As String
		For Each s In My.Application.CommandLineArgs
			If IO.File.Exists(s) Then
				's هي مسار الملف
			End If
		Next

كلمة S هي مسار الملف .

وقد أرفقت برنامج لكي تفهموا الدرس أكثر

وهكذا أكون قد أنهيت الدرس بالتوفيق (h) .

Application.zip

تم تعديل هذه المشاركة بواسطة MiCcSoft في 26 يونيو 2006 في 15:04

#2

جزاك الله خير و احسن إليك ,

هل يمكن بطريقة أو بأخر إلغاء الإفتراضية من البرنامج ؟

في المثال يتضح المقال

#3

هل تقصد أنك جعلت البرنامج الفاتح الأفتراضي لملفات الصور ؟ إذا كان كذلك فيمكن

إما عن طريق الويندوز (حدد ملف الصورة ثم فتح بأستخدام وحدد البرنامج الأفتراضي )

أو عن طريق الكود غير قيمة دليل ملفات الصور (.jpg) إلى مسار البرنامج الأفتراضي .

#4

السلام عليكم :

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

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

لان لكل ملف يفتح له برنامجي ؟؟ بمعنـــى

لو حددت 3 ملفات وضغط على برنامجي فانه سيفتح 3 نسخ من برنامج وانا اريده يفتح نسخة واحدة فقط

شكرا .... اخي الفاضل .

سبحان الله وبحمده سبحان الله العظيم

#5

ارجوا مساعدتـــي اخي MiCcSoft لاني محتاجله ضروري جدا .... وشكرا لك

سبحان الله وبحمده سبحان الله العظيم

#6
		Dim s As String
		For Each s In My.Application.CommandLineArgs
			If IO.File.Exists(s) Then
				's هي مسار الملف
			End If
		Next

المتغير S هو مسار الملف طبعا إذا حددت أكثر من ملف سيتغير المتغير s ليشمل جميع الملفات المحددة

أعطني الكود الخاص ببرنامج الذي يقوم بإستخدام المتغير s

#7

السلام عليكـــــم

حاولت في ذلك ولم ينجح .... وانا استخدم في VS.NET 2003 ولم اجد اساسأ My

وشكرا على مساعدتك .

سبحان الله وبحمده سبحان الله العظيم

#8

أخى MiCcSoft

هذة الطريقة ذات صعوبة بعض الشىء

على أى حال مشكور على الشرح

الاخ بشا

بشا كتب:
السلام عليكم :

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

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

لان لكل ملف يفتح له برنامجي ؟؟ بمعنـــى

لو حددت 3 ملفات وضغط على برنامجي فانه سيفتح 3 نسخ من برنامج وانا اريده يفتح نسخة واحدة فقط

شكرا .... اخي الفاضل .

مشكلة فتح أكتر من برنامج هذة ستحل ب MAke single Instance application

فى هذة الحالة سيعامل برنامجك اول ملف يصل إلية فقط ولن يرى الملف التانى وللحل

يجب ان تضع نفس كود Startup الى StartupNextInstance

هكذا

Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
			For Each s As String In My.Application.CommandLineArgs
				If IO.File.Exists(s) Then
					MessageBox.Show(s)
				End If
			Next
		End Sub

	  Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
			For Each s As String In My.Application.CommandLineArgs
				If IO.File.Exists(s) Then
					MessageBox.Show(s)
				End If
			Next
		End Sub

ملحوظة هذة الطريقة تعمل على Vb.net 2005

Practice makes perfect 2007*

البرمجة بلا انطباعات

#9

أخي بشا الكود السابق يعمل مع vb 2005 فقط وبالنسبة لل 2003 :

		Dim s As String
		For Each s In System.Environment.GetCommandLineArgs
			If s = Application.ExecutablePath Then
			Else
				'الكود هنا
				MsgBox(s)
			End If
		Next

الان يجب أن يكون لديك برنامج يفتح أكثر من ملف يعني صمم برنامجك على أساس

أنه سيفتح أكثر من ملف مثال شوف برنامج مكتبة الأكواد الذي قمت انا بصنعه

يستطيع فتح عدد غير محدود من قواعد البيانات والتحكم يكل قاعدة على جهة

رابط الموضوع في شعاري

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

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