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

إلى المهتمين بدوال TAPI

مغلق
بدأه shoqi في 24 نوفمبر 2005 · 10 رد · 1,900 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لقد بحثت في النت كثيراً عن هذا الموضوع ولم أجد سوى بعض الأمثلة البسيطة عن هذا الموضوع . وكذلك بحثت في المنتدى فلم أجد موضوعاً يتكلم عن هذه الدوال إلا وينصح بإستخدام أداة من الأدوات ( وكلها ليست مجانية ) .

وبالأمس كنت أبحث في النت فوجدت موقعاً ربما يكون معروفاً لديكم وهو ( http://www.tapiex.com/ ) وقد وضع أداة للتحميل مع الكثير من الأمثلة لمختلف اللغات .

وكنت أظن أن الأداة مجانية أو على الأقل النسخة الأقل منها . وهذا رابط قائمة الأسعار للأداة ( http://www.tapiex.com/order.php?sid=sl )

ولكن ...

لماذا لا نقوم نحن ببرمجة أداة تفي بإحتياجاتنا على الأقل ...

هل برمجة دوال ( TAPI ) صعبة إلى هذا الحد بحيث لا تجد موضوعاً يتكلم عنها .؟؟؟

هل نكتفي بهذه الأدوات ونتعلم كيف نستخدمها وكيفية برمجتها.؟ وفي النهاية وبعد إتقانها نضطر إلى شرائها ..!!( مع أن متغيراتها ودوالها ليست من ضمن لغة البرمجة وإنما هي تسميات لمبرمجيها ) ...

بحسبه بسيطة رأيت عدد أعضاء المنتدى حتى الآن وكان ( 48,575 ) فلو إفترضنا أقل نسبة مؤوية من أعضاء المنتدى يريدون الحصول على هذه الأداة وهو 1% ( 1 في المئة ) وكانت قيمة الأداة ( 500 دولار ) مثلاً فتخيل المبلغ ..

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

في إنتظار ردودكم وتفاعلكم مع الموضوع ..

#2

أذكر أن أحد الإخوة وضع برنامجاً كاملاً عن استخدام TAPI في منتدي vb4arab وكان عندي نسخة منه ( في تلك الأيام كنت أرى الـ API شبحاً مخيفاً فلم أتعلمها)

و للأسف لا المنتدي بقي ولا الهادسك السابق بقي ، فكلاهما انتقلا إلى رحمة الله .

ولكن إن كان أحد الأخوة سبق له أن حمل المشروع من المنتدي vb4arab و مازال عنده فرجائي أني يضعه لنا .

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

#3

السلام عليكم

الحمد لله ، يبدو أن وجدت مصدر ذلك البرنامج ، انظر للرابط :

http://www.shrinkwrapvb.com/vbtapi.htm

حمل المشروع فهو جميل :)

سأحاول فهمه لنستخلص منه الدوال الرئيسية . أرجو أن تحاول أنت كذلك :)

شكراً لك

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

#4

أرجو شرح ماهو هذا البرنامج ؟

#5

والله يا ريت يا شباب اوضيييييييح اكثر عن الموضوع

#6

شكراً لك أخي MSVS ..

تم تحميل الرابط وجاري إستنتاج الدوال الرئيسية ..

#8

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

#10

مشكور إخواني على الروابط ...

=============================

بسم الله الرحمن الرحيم

بعدالنظر إلى بعض الأمثلة حول هذه الدوال وجدت ( حسب فهمي المتواضع ) أن الدوال الرئيسية لهذه الدوال هي :

lineInitialize

lineCallbackFunc

lineNegotiateAPIVersion

lineOpen

lineClose

lineShutdown

وسوف أقوم بشرح بسيط عن كل دالة :-

أولاً : lineInitialize

طريقة تعريف الدالة

Declare Function lineInitialize Lib "TAPI32.DLL" (lphLineApp As Long, ByVal hInstance As Long, ByVal lpfnCallback As Long, ByVal lpszAppName As String, lpdwNumDevs As Long) As Long

تقوم هذه الدالة عند إستدعائها بتهيئة البرنامج وإعداده للتعامل مع دوال TAPI وهذه الدالة يجب إستدعاءها أولاً عندما نريد التعامل مع دوال الـ ( TAPI ) أما بالنسبة للبارامترات المررة لهذه الداله فهي كالتالي :-

lphLineApp : تقوم الدالة بعد إستدعائها بإرجاع موقع المقبض الذي سيستخدمه البرنامج مع دوال ( TAPI )

hInstance : قيمة من نوع ( long )

lpfnCallback : وهو عنوان الدالة التي ستستقبل الرسائل والأحداث التي ستكون على المودم ( سيتم شرح هذه الدالة بعض هذه الدالة فانتظر )

lpszAppName : متغير نصي يحمل إسم البرنامج . ويمكن تمرير ( 0 ) .

lpdwNumDevs : من إسمه يتضح أنه رقم الخط ( Number of Device ) .

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

ثانيا : lineCallbackFunc

تقوم هذه الدالة بإستقبال الرسائل والأحداث التي سوف تكون على المودم .

نقوم بتعريف هذه الدالة في موديول ويمكن تغيير إسم الدالة ولكن بشرط أن نحدد عنوانها في البارامتر الخاص بـ lineInitialize وهو ( lpfnCallback ) وتطريقة تعريفها كالتالي :-

Public Sub LineCallBackFun(ByVal hdevice As Long, ByVal dwMessage As Long, ByVal dwInstance As Long, ByVal dwParam1 As Long, ByVal dwParam2 As Long, ByVal dwParam3 As Long)


End Sub

البارامترات وهي :-

hdevice : ترجع مقبض المودم أو الإتصال ( إذا تم عمل إتصال )

dwMessage : ترجع نوع الرسالة التي تمت على المودم .

dwInstance : ...؟؟؟ لم أعرف مافائدة هذا البارامتر لكن أظنه غير مستخدم حتى الآن من دوال TAPI

dwParam1 : البارامتر الأول للرسالة .

dwParam2 : البارامتر الثاني للرسالة .

dwParam3 : البارامتر الثالث للرسالة .

( هذه البارامترات الثلاثة متغيرة حسب نوع الرسالة ).

عفواً .. لقد تأخر الوقت الآن ... البقية تأتي إن شاء الله . مع مثال بسيط للتوضيح .

تم تعديل هذه المشاركة بواسطة shoqi في 25 نوفمبر 2005 في 23:59

#11

ثالثا : lineNegotiateAPIVersion

تستخدم بعد الدالة lineInitialize لتحديد الإصدار الذي سوف يستخدم .

التعريف :-

Declare Function lineNegotiateAPIVersion Lib "TAPI32.DLL" (ByVal hLineApp As Long, ByVal dwDeviceID As Long, ByVal dwAPILowVersion As Long, ByVal dwAPIHighVersion As Long, lpdwAPIVersion As Long, lpExtensionID As LINEEXTENSIONID) As Long

hLineApp : المقبض الذي حصلنا عليه من الدالة lineInitialize .

dwDeviceID : رقم معرف الجهاز المراد إستخدامه . ( طبعاً نعرف هذا الرقم من عدد الأجهزة التي سوف تعيدها لنا الدالة lineInitialize حيث نبدأ بـ صفر )

dwAPILowVersion : الإصدار الأقدم من المكتبة . مثلاً يمرر ( H10000 ) أي الإصدار 1.0

dwAPIHighVersion : الإصدار الأحدث من المكتبة . مثلاً يمرر ( H10004 ) أي الإصدار 1.4

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

lpExtensionID : متغير من نوع LINEEXTENSIONID ويرجع قيم خاصة إذا كان يدعمها الجهاز المستخدم .

رابعا : lineOpen

بعد تمرير الدوال السابقة نقوم بفتح الخط للإستعداد لإستخدامه .

التعريف :-

Declare Function lineOpen Lib "TAPI32.DLL" (ByVal hLineApp As Long, ByVal dwDeviceID As Long, lphLine As Long, ByVal dwAPIVersion As Long, ByVal dwExtVersion As Long, ByVal dwCallbackInstance As Long, ByVal dwPrivileges As Long, ByVal dwMediaModes As Long, lpCallParams As Any) As Long

hLineApp : المقبض الذي حصلنا عليه من الدالة lineInitialize .

dwDeviceID : رقم معرف الجهاز المراد إستخدامه .

lphLine : مقبض الخط وسوف ترجعه لنا الدالة عند تنفيذها .

dwAPIVersion : الإصدار الذي حصلنا عليه من الدالة السابقة .

dwExtVersion : يعتمد على دعم الجهاز للبارامتر في الدالة السابقة ( lpExtensionID ) ويمكن تمرير ( 0 )

dwCallbackInstance : يمرر ( 0 ) لم يتم دعمه .!!

dwPrivileges : يحدد طريقة تعامل المشروع مع الخط وهي عبارة عن ثوابت محددة ويمكن إختيار أحدها وهي كالتالي :-

LINECALLPRIVILEGE_NONE

LINECALLPRIVILEGE_MONITOR

LINECALLPRIVILEGE_OWNER

LINECALLPRIVILEGE_MONITOR + LINECALLPRIVILEGE_OWNER

LINEOPENOPTION_SINGLEADDRESS

LINEOPENOPTION_PROXY

وأكثر ما يستخدم هو ( LINECALLPRIVILEGE_OWNER )

dwMediaModes : طريقة التعامل مع الميديا وهي أيضا عبارة عن ثوابت محدد ويختار منها وهي كالتالي مع قيمها :-

Const LINEMEDIAMODE_UNKNOWN = &H2&

Const LINEMEDIAMODE_INTERACTIVEVOICE = &H4&

Const LINEMEDIAMODE_AUTOMATEDVOICE = &H8&

Const LINEMEDIAMODE_DATAMODEM = &H10&

Const LINEMEDIAMODE_G3FAX = &H20&

Const LINEMEDIAMODE_TDD = &H40&

Const LINEMEDIAMODE_G4FAX = &H80&

Const LINEMEDIAMODE_DIGITALDATA = &H100&

Const LINEMEDIAMODE_TELETEX = &H200&

Const LINEMEDIAMODE_VIDEOTEX = &H400&

Const LINEMEDIAMODE_TELEX = &H800&

Const LINEMEDIAMODE_MIXED = &H1000&

Const LINEMEDIAMODE_ADSI = &H2000&

lpCallParams : متغير من نوع LINECALLPARAMS يستخدم فقط إذا تم تمرير القيمه ( HFFFFFFFF ) للبارامتر dwDeviceID

خامساً : lineClose

وتستخدم لإغلاق الخط وتعريفها كالتالي :-

Declare Function lineClose Lib "TAPI32.DLL" (ByVal hLine As Long) As Long


حيث hLine يعتبر مقبض الخط الذي حصلنا عليه من الدالة lineOpen

سادسا : lineShutdown

لإنهاء التعامل مع الجهاز وتعريفها كالتالي :-

Declare Function lineShutdown Lib "TAPI32.DLL" (ByVal hLineApp As Long) As Long


حيث hLineApp يعتبر مقبض الجهاز الذي حصلنا عليه من الدالة lineInitialize

======================

أسأل الله العظيم أن أكون وفقت في إيصال المعلومة لكم فما كان فيها من الصواب فمن الله وأعذروني على الأسلوب فلست متمرساً في الشرح . وإن شاء الله سأقوم بعمل برنامج بسيط حتى يسهل فهم هذه الدوال ومن ثم ننتقل إلى دوال أخرى إن شاء الله .

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

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