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

[ تمت الإجابة ]أسئلة عن SHELL ... او شيء قريب من ذلك

مغلق
بدأه Abdullah.Alshammeri في 27 يوليو 2006 · 12 رد · 3,452 مشاهدة · في أرشيف قسم Windows APIs
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

1-

اذا ذهب المستخدم الى سطح المكتب او المستندات او في اي مكان في جهازه ونقر على ملف عبارة عن صورة من نوع jpg او bmp سيظهر امامه قائمة فيها عدة خيارات كما هو في الصورة .

27_07_06_12_54_55_1154030095aaa.JPG

أنا اريد اعمل شيء مشابه .. بحيث ينقر المستخدم على اي صورة ويختار من القائمة " استعراض"

فيقوم برنامجي بفتح الصورة واستعراضها ,

2-

كما تعلمون ... لكل ملف ايقونة خاصة مثلا ملفات txt لها ايقونة خاصة .. ملفات الصور من نوع bmp لها اسقونة خاصة .. ملفات الورد ..لها ايقونة خاصة .

السؤال اريد ان انشئ امتداد خاص بي مثلا abc .. اريد ان يكون له :

1- ايقونة خاصة به اسجلها في الريجستري عند تثبيت برنامجي .

2- ان اخصص برنامج رئيسي يفتح ملفات abc .. بشكل افتراضي .

اريد كل ذلك من خلال البرمجة .

بقي لدي اسئلة ااخرى .. نتركها لبعدين .

أنا بحثت عن الاجابة ووجدت ان الامر متعلق بالريجستري او shell .

http://msdn.microsoft.com/library/default....contextmenu.asp

لكن للاسف لم اجد مثال واضح .. وان وجدت فهو بالmfc .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#2

The Complete Idiot's Guide to Writing Shell Extensions - Part I

The Complete Idiot's Guide to Writing Shell Extensions - Part II

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#3

السلام عليكم

انفرض اخي العزيز ان نوع الملف هو abc وبرنامجك هو c:\abcopener.exe

سيكون تعريف النوع في لبرجستري في ال HKEY_CLASSES_ROOT

انشئ new key وسمه .abc

في الجهه المقابلة ضع اسم الكي الذي سيحضر المعلومات منه وليكن my_abc_file

اذا اردت ان يستطيع المستخدم ان ينشئ ملف جديد من ال key shellnew

اما تنشئ قيمه نصيه وتسميها NullFile ستنشئ ملف فارغ بامتداد .abc

او تضع command وتكتب بها

c:\abcopener.exe /new %1

الان انشئ new key اخر في HKEY_CLASSES_ROOT وسمه my_abc_file

في الجهه المقابلة الي مكان (Default) ضع عنوان الملف مثل شمري abc file

تحت المفتاح my_abc_file انشئ مفتاح اسمه DefaultIcon

هذا يعرف من اين الايقونه تاعت الملف

تستطيع ان تضع موقع الايقونه على القرص الصلب

او اذا كان الايقون موجود في ال resorce تاعت برنامجك فتكتب التالي

c:\abcopener.exe,[the icon index]

1 هو الاندكس تاعت ايقونة البرنامج

حت المفتاح my_abc_file انشئ مفتاح اسمه Shell

في الجهه المقابله تستطيع ان تحدد الdefault menu item

اذا لم تحدده اولا: اذا كان هناك قائمة باسم open or edit فسيكون احدهما الافتراضي - الاولوية ل open

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

انشئ مفتاح جديد سمه open في الخه المقابله ضع النص الذي تريده ان يظهر علي القائمه او اتركه فارغا

تحت open انشئ مفياح جديد اسمه command

هذا سيكون المكان الذي يحضر الوندوز البرنامج الذي سينفذ

في الجه المقابله ضع

c:\abcopener.exe %1

%1 تعبي انع سيرسل مسار الملف المختار الى برنامجك في ال command line ال arguments

وهنالك اشياك كثيرة اخرى ولكن هذا يكفي لعمل ما تريد

والله اعلم

تستطتع ان تعملها يدويا او ربمجيا باستخدام المكتبه advapi32.dll

او تستطيع ان تنشئ ملف بامتداد .reg وتكتب فيه الاوامر

مثال

REGEDIT4
//or you can use
//Windows Registry Editor Version 5.00
/*
 will create the key .abc in the HKEY_CLASSES_ROOT section
 @="my_abc_file"  will set the default value to my_abc_file
*/

[HKEY_CLASSES_ROOT\.abc]
@="my_abc_file"

/*
 will create the key my_abc_file in the HKEY_CLASSES_ROOT section
 شمري abc file this will be the type name for you file
*/

[HKEY_CLASSES_ROOT\my_abc_file]
@="شمري abc file"

/*
 you can use icon path insted c:\\abcopener.exe,2
 2 is the index of the icon in the application resource
*/

[HKEY_CLASSES_ROOT\my_abc_file\DefaultIcon]
@="c:\\abcopener.exe,2"

[HKEY_CLASSES_ROOT\my_abc_file\shell]

[HKEY_CLASSES_ROOT\my_abc_file\shell\open]

[HKEY_CLASSES_ROOT\my_abc_file\shell\open\command]
@="c:\\abcopener.exe %1"

تم تعديل هذه المشاركة بواسطة Mo7eb_Alrasool في 28 يوليو 2006 في 01:49

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#4

السلام عليكم

اخي الكريم هل تريد مثالا بلغة برمجه معينه

فانا انتبهت على هذه الجماه

اقتباس
لكن للاسف لم اجد مثال واضح .. وان وجدت فهو بالmfc .

c++ code

#include "windows.h"
#include <Winreg.h>
int main()
{
	HKEY hKey;
	RegCreateKey(HKEY_CLASSES_ROOT,".abc",&hKey);
	RegSetValue(hKey, "", 1, "my_abc_file", sizeof("my_abc_file"));
	RegCloseKey(hKey);

	RegCreateKey(HKEY_CLASSES_ROOT, "my_abc_file", &hKey);
	RegSetValue(hKey, "", 1, "شمري abc file", sizeof("شمري abc file"));
	RegCloseKey(hKey);


	RegCreateKey(HKEY_CLASSES_ROOT,"my_abc_file\\DefaultIcon" , &hKey);
	RegSetValue(hKey, "", 1, "C:\\abcopeners.exe,2", sizeof("C:\\abcopeners.exe,2"));
	RegCloseKey (hKey);

	RegCreateKey(HKEY_CLASSES_ROOT, "my_abc_file\\shell\\open\\command", &hKey);
	RegSetValue(hKey, "", 1, "C:\\abcopeners.exe \"%1\"", sizeof("C:\\abcopeners.exe \"%1\""));
	RegCloseKey (hKey);
	return 0;
}

vb code

Private Const HKEY_CLASSES_ROOT = &H80000000
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long

Sub Main()
  Dim FileTypeKey As String, FileType As String, ExeFileName As String
  Dim hKey As Long, Res As Long

  FileType = ".abc"
  FileTypeKey = "my_abc_file"
  ExeFileName = "c:\abcopeners.exe"

  '// Create .abc key
  Res = RegCreateKey(HKEY_CLASSES_ROOT, FileType, hKey)
  Res = RegSetValue(hKey, vbNullString, 1, FileTypeKey, Len(FileTypeKey))
  RegCloseKey hKey

  '// create my_abc_file key and set the type description to شمري abc file
  ' if you dont want do set the description you can avoid this
  rc = RegCreateKey(HKEY_CLASSES_ROOT, FileTypeKey, hKey)
  rc = RegSetValue(hKey, vbNullString, 1, "شمري abc file", Len("شمري abc file"))
  RegCloseKey hKey


  ' set the icon
  rc = RegCreateKey(HKEY_CLASSES_ROOT, FileTypeKey & "\DefaultIcon", hKey)
  rc = RegSetValue(hKey, vbNullString, 1, ExeFileName + ",2", Len(ExeFileName + ",2"))
  RegCloseKey hKey

  'this the open command
  rc = RegCreateKey(HKEY_CLASSES_ROOT, FileTypeKey & "\shell\open\command", hKey)
  rc = RegSetValue(hKey, vbNullString, 1, ExeFileName & " ""%1""", Len(ExeFileName & " ""%1"""))
  RegCloseKey hKey
  ' you can add more command in same way

End Sub

تم تعديل هذه المشاركة بواسطة Mo7eb_Alrasool في 28 يوليو 2006 في 03:17

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#5

تعقيب بسيط على الكود

RegSetValue(hKey, "", 1, "شمري abc file", sizeof("شمري abc file"));

يفضل إستخدام RegSetValueW ..

طبعاً الطريقة التي أشار إليها الأخ أحمد غريب هي أفضل ..

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#6

السلام عليكم

مشكور اخي الكريم كثير على التعقيب

صراحة لم انتبه للعربية لقد كانت مجرد مثال

ولكن على اية حال في ملف الهدر Winreg.h

WINADVAPI
LONG
APIENTRY
RegSetValueA (
	HKEY hKey,
	LPCSTR lpSubKey,
	DWORD dwType,
	LPCSTR lpData,
	DWORD cbData
	);
WINADVAPI
LONG
APIENTRY
RegSetValueW (
	HKEY hKey,
	LPCWSTR lpSubKey,
	DWORD dwType,
	LPCWSTR lpData,
	DWORD cbData
	);
#ifdef UNICODE
#define RegSetValue  RegSetValueW
#else
#define RegSetValue  RegSetValueA
#endif // !UNICODE

تم تعديل هذه المشاركة بواسطة Mo7eb_Alrasool في 28 يوليو 2006 في 13:25

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#7

لا بد حينها أن يكون التطبيق داعم لليونيكود وذلك باضافة UNICODE إلى Preprocessor Definitions وإلا فأنه لن يتم إستدعاء الدوال ذات اللاحقة W ..

راجع هذا الجزء في الكود الذي أرفقته في مشاركتك

#ifdef UNICODE
#define RegSetValue  RegSetValueW
#else
#define RegSetValue  RegSetValueA
#endif // !UNICODE

تم تعديل هذه المشاركة بواسطة cipher في 28 يوليو 2006 في 14:21

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#8

السلام عليكم

كلام سليم اخي الكريم

اسف على الخطأ

لأزم أضيف

#define UNICODE;

قبل انكلود ال Winreg.h

مشكور على التنبيه

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#9

يعطيكم العافية .. احمد انا كنت ابحث عن شيء بدون ATL . . لاني اريد فقط تطبيق جزئية معينة من برنامجي .

.. ماكتبه محب الرسول هو ما اريده بالظبط .. الله يرفع قدرك . . ويثيبك .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#10

السلام عليكم

حياك الله اخوي الشمري

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#11

لتتبع موضوع أنواع امتدادات الملفات وفتحها والتعامل معها قم بالتلي:

من Folder Options في قائمة Tools اختر File Types

قم بإنشاء نوع جديد وأعطه امتدادا مميزا وليكن .abc واضغط OK

اضغط على الزر Advanced في شاشة File Types

غير أيقونة الملف وأضف أحداث اسمها مميز وليكن (برعي)

اضغط OK

إذا دخلت الآن في الـ Registry وقمت بالبحث فيه عن .abc أو البحث عن (برعي) ستجد الأماكن التي يجب أن تقوم بتسجيل المفاتيح وقيمها فيها ان شاء الله

جزاك الله خيرا يا أخي على الروابط المرفقة

ولكن إذا أردت أن أبدا في تعلم موضوع الـ Shell هذا من أين أبدأ ؟؟؟

وجزاك الله خيرا

#12

السلام عليكم

يمكنك التعامل مع shellex افضل اذا كنت تريد الرسم علي القائمة او اضافة قوائم فرعية كما في هذا الرابط

/index.php?showtopic=106638

الفكرة مبنية بـ #C هناك العديد من الامثلة علي النت بـ ++C

http://www.codeproject.com/shell/shellextguide7.asp

مواضيع متنوعة

#13

اسهل و اسرع طريقة:

http://www.orwah.net/modules/newbb/viewtop...464&forum=6

تنشئ ملف نصي بلاحقة reg ثم تستدعيه...

d4baa0.gif

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

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