طبعا هذا ليس درسا بمعنى الكلمة لكنه ترجمة لمقالة اجنبية احببت ان انقلها لكم لزيادة الفائدة ولكننى اريد خدمة ستعرفونها فى اخر الموضوع
_____________________________________________________________________________
كيفية اضافة برنامج 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
// 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 بالفى بى وتقريبا ينقصة التكامل مع المتصفح انا اطلب من من يستطع ان يقوم بكتابة تلك المكتبة وانا ساقوم بتصميم مكتبة اخرية يقوم باستدعائها منداخل تلك المكتبة لكى يعطينى رابط التحميل وبعض المعلومات الاخرى
وارجوا ان يكون الموضوع مفيدا لكم
