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

Implement a custom download manger

مغلق
بدأه حريف برمجة في 8 أغسطس 2007 · 7 رد · 1,186 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

_____________________________________________________________________________

كيفية اضافة برنامج Download manger الى متصفح الانترنت لديك

هذة المقالة تصف كيفية اضافة مدير تنزيل ملفات مخصص Custom download manger الى Internet Explorer 5.5 و Internet explore 6

بهذه الميزة يمكنك ان توسع وظائف Microsoft Internet explore وتطبيقات متصفحات الانترنت باضافة Components object model ( com ) واكيد انتم عارفينه

باضافة مدير تنزيل مخصص يمكن ان يتوسع تطبيق الانترنت لديك لكى يقوم بعرض نافزة تنزيل مخصصة

يتم اضافة مدير تنزيل الملفات ككائن Com لكى يعرض Iunknown Interface و IDownloadManger interface

IDownloadManger Interface تاخذ وظيفة واحدة 1 Method وهى IdownloadManger::Download ويتم استدعاء تلك الدالة واسطة متصفح الانترنت لكى يقوم بتنزيل الملف وذلك عندما يضغط المستخدم على رابط تنزيل لاحد الملفات ويتم الوصول الى تلك الوظيفة باحدى الطريقتين

1- فى انترنت اكسبلورر 5.5 والاصدارات الاحدث يتم استدعاء دالة IServiceProvider::QueryService انظر الى الجزئ المخصص للكود فى تلك المقالة

2- اما فى انترنت اكسبلورر 6 عندما تستخدم متصفح الانترنت نفسه فانه لا يمكن اضافة وظيفة IServiceProvider::QueryService وانما متصفح الانترنت يقوم بالبحث على بعض قيم مسجل النظام System registry عن ال ClsID ال Class Identifier لمدير تنزيل الملفات ( كائن ال Com ) وانظر الى القيم التالية فى مسجل النظام وتجدها تتغير بتغيير مدير تنزيل الملفات لديك

\HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\DownloadUI

\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\DownloadUI

لاحظ قيمة DownloadUi قيمة نصية داخل الريجسترى وتحمل ال ClsID لمكتبة ال Com

لتنزيل ملفات ال .h المكتبات

لانترنت اكسبلورر 5

لانترنت اكسبلورر 6

الامثلة للاكواد

لانترنت اكسبلورر 5

// This is a custom download manager implementation for Internet Explorer 5.5 SP2.
#include "downloadmgr.h"
STDMETHOD(QueryService)(REFGUID guidService,REFIID riid,void** ppv)
{
	HRESULT hr = E_NOINTERFACE;   
	if (guidService == SID_SDownloadManager && riid == IID_IDownloadManager)
	{
		// Create a new CDownloadMgr object by using ATL.
		CComObject<CDownloadMgr>* pDownloadMgr;
		hr = CComObject<CDownloadMgr>::CreateInstance(&pDownloadMgr);
		// Query the new CDownloadMgr object for the IDownloadManager interface.
		hr = pDownloadMgr->QueryInterface(IID_IDownloadManager, ppv);
		// Call the Download method.

		// -or-

		// Call the Download method directly if you implement it in this class.
		// Download(NULL,NULL,0,0,NULL,NULL,NULL,0);
		// hr = S_OK;
	}

	return hr;
}

لانترنت اكسبلورر 6

// This is the custom download manager implementation for Internet Explorer 6 or later.
// In the .h file of the COM DLL.
#include "downloadmgr.h"
STDMETHOD(Download)(IMoniker* pmk,
IBindCtx* pbc,
DWORD dwBindVerb,
LONG grfBINDF,
BINDINFO* pBindInfo,
LPCOLESTR pszHeaders,
LPCOLESTR pszRedir,
UINT uiCP );
// In the .cpp file.
STDMETHODIMP CDownload::Download(IMoniker* pmk,
IBindCtx* pbc,
DWORD dwBindVerb,
LONG grfBINDF,
BINDINFO* pBindInfo,
LPCOLESTR pszHeaders,
LPCOLESTR pszRedir,
UINT uiCP )
{
::MessageBox(NULL,"Download","Download Manager",MB_OK);
return S_OK; 
}

ترجمة احمد اسماعيل

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

لكن انا ضعيف فى لغة السى وكل الى اعرفه شوية حاجات بسيطة عن التوريث وكتابة برامج حسابية وبعض الاشياء عن مكتبة ال Mfc

لقد قمت بتصميم واجهة برنامج Download بالفى بى وتقريبا ينقصة التكامل مع المتصفح انا اطلب من من يستطع ان يقوم بكتابة تلك المكتبة وانا ساقوم بتصميم مكتبة اخرية يقوم باستدعائها منداخل تلك المكتبة لكى يعطينى رابط التحميل وبعض المعلومات الاخرى

وارجوا ان يكون الموضوع مفيدا لكم

المقالة الاصلية

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#2

ايه يا جماعة للدرجة دى الموضوع مش مهم طب عرفونى انكم موجودين

طب حد يعرف يعمل مكتبة ال Com على الاقل لانه شئ سهل

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#3

السلام عليكم

أخي ليست المشكلة في إنشاء المكتبة إنما في توفر الكود الكافي لذلك

#4

شكرا لك اخى Ben_Laiid على التجاوب

انا حاولت ان اقوم بعمل المكتبة لكن كانت هناق بعذ الاخطاء لم اعرف مصدرها مع انى وضعت الكود الخاص بملف ال Header فى ملف ال .h الخاص بالمكتبة وكذالك الملف المصدرى

لكن اعتقد انه تحدث هذه الاخطاء لقلة خبرتى فى السى ++ ولكن اذا كان هناك شئ ناقص انظر فى المقالة الاساسية

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#5

up

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#6

كنت اتوقع الموضوع كان عبارة عن سؤالعشان كذا ما دخلت الا مساء البارحة .. كان الافضل ان تضع شيء في العنوان يوضح انه مقال ..

موضوعك رائع أخي .. والله هذا ما نريده .. افتحوا اي موضوع غريب علينا عشان نتناقش فيه .. لو أني الان غير مهيأ لتطبيق هذا الدرس.

ولكن نكتسب معلومات عامة ..

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

- أيضا سبق أن وضعت مثال ( طبعا من النت) .. حول تحميل ملفات من النت .. سأبحث عن الرابط واضيفه هون .. بهذا ..

- قرأت موضوعك .. الموضوع ليس بالتعقيد الذي كنت اتصوره ,,

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

هل تعرف برنامج iternet download manager IDM ... هذا يقنص اي ملف ستقوم بتحميله من داخل الانترنت اكسبلورر .. ويقوم بتحميله هو بدلا عنه ..

اتوقع البرنامج يعتمد على طريقة مشابهة .. او على الHOOK ....

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#7

فعلا اخى لان الموضوع ليس درسا بمعنى الكلمة

وضعته لاننى لم ارى لهذا الموضوع اثرا الا فى موقع Microsoft و منتدى ال Msdn فاردت ان تعم الفائدة

وللاسف المكتبة التى يتم تصميمها تعتمد على ال Com وانا اتقانى للسى ++ ليس قويا لذلك لم استطع تصميمها

لذلك اخى انا قمت بتصميم برنامج Download Manger بالفى بى وتقريبا انتهى وستجدونه تقريبا ويتبقى الان عملية تكامله مع المتصفح واذا استطعت ان تقوم بعمل تلك المكتبة اكون شاكر لك جدا طبعا وساضع اسمك فى Special thanks :) :D

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

طبعا لكن بدون استخدام دوال ال API التى تستخدم فى تنزيل الملف

انا اتعامل مباشرة مع بروتوكول ال http وال ftp و ال Https وطبعا البرنامج الذى اقوم بتصميمة سبق ال dap و ال IDM فى التحميل ويدعم استكمال التحميل اذا سمح ال Server بذلك

فى توقيعى موضوع لشرح التعامل ببروتوكول نقل الملفات Ftp واذا اردت شئ فى هذا الموضوع استطع ان افيدك بخصوص ال Download

اقتباس
- قرأت موضوعك .. الموضوع ليس بالتعقيد الذي كنت اتصوره ,,

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

الموضوع هذا كل ما يراد منه هو الحصول على رابط التحميل عندما يضغط المستخدم عليه فى ال Internet explorer طبعا سيكون شئ ممل للغاية ان يقوم المستخدم بنسخ الرابط ووضعه فى البرنامج

انا برنامجى يقو باستكمال التحميل ولكن اريد ان اقوم بادماجه داخل ال Web browser

اقتباس
هل تعرف برنامج iternet download manager IDM ... هذا يقنص اي ملف ستقوم بتحميله من داخل الانترنت اكسبلورر .. ويقوم بتحميله هو بدلا عنه ..

اتوقع البرنامج يعتمد على طريقة مشابهة .. او على الHOOK ....

كل البرامج التى تقوم بالتحميل مثل ال dap و Mass downloader و ال bit comet 9 يستخدمون تلك الطريقة التى وضحتها فى المقال حيث ان ال Internet explorer يقوم باستدعاء دالة IdownloadManger::Download من داخل الكلاس الذى وضعت ال ClsId الخاصة به داخل مسجل النظام فى القيمة DownloadUI ويقوم باعطائك كل البيانات مثل ال Url و امكانية الاستكمال

وكل ذلك داخل مكتبة ال Com

ارجوا ان تكون الامور وضحت وارجوا ايضا ان تصمم لى المكتبة لاننى كما قلت ما زلت ( نونو :lol: ) فى السى++

صورة البرنامج

طبعا الصورة الثانية اجمل لكن بعد ان انجز البرنامج

post-98519-1187021089_thumb.jpg

post-98519-1187022291_thumb.jpg

تم تعديل هذه المشاركة بواسطة حريف برمجة في 13 أغسطس 2007 في 19:30

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#8

up

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

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

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