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

اظهار رقم المتصل Caller id

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

ابحث عن مودم يدعم اظهار الرقم في السعودية

الرجاء من الاخوة المساعدة فمشروع تخرجي يعتمد على :

اظهار رقم المتصل .

الاستجابة لضغطات الازرة في الهاتف .

وسؤالي هنا ليس عن الكوود لكي لا يعتقد احد انني ابحث عن مشروع جاهز

لانني بأذن الله اريد عمل المشروع كاملا لوحدي ليكون تدريبا لي

لقد احضرت لي احدى الاخوات ادوات المودم وهي المودم تولز

وهي جيده ولكن عندما يتصل احد تظهر لي ان هناك اتصال ولكن دون اظهار الرقم

وعند الرد وضغط اي زر لا توجد استجابه .

رغم ان المودم لدي هو يو اس روبتكس خارجي وعند تشغيل الادوات تخبرني

انه يدعم الخواص .

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

وقد ارسلت اخي الى سوق الكمبيوتر فذكر له احد الهنود انه يستطيع توفير مودم سويدي الصنع ولكن بسبعة آلاف ريال ( حسبي الله عليهم )

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

هذا الموقع يبين الدولة وطريقة تشفير الرقم :

http://www.ainslie.org.uk/callerid.htm

مذكور فيه ان السعودية تدعم DTMF-based

ومشكورين مقدما

اختكم تهاني محمود

#2

الأخت تهاني

قد قرأت موضوعاً بعنوان

تعلم كيف تستخدم جهاز الهاتف العادي لكتابة اسمك على شاشة الجهاز

من موقع Vb4arab قبل أن يتعطل ولحسن الحظ انني قمت بحفظ الموضوع في جهازي ومنذ ذلك الحين لم أفتحه .

وقد حاولت أن أقوم بارفاق الملف ولكني فشلت عدة مرات ويظهر لي الخطأ التالي :

تم إيجادالأخطاء التالية

مجموع المساحة المطلوبة لرفع المرفقات تجاوزت الحد المسموحة به, الرجاء تقليل حجم أو عدد المرفقات

هل من توضيح ؟ هذا السؤال موجه لمشرف المنتدي :blink: وذلك لان حجم الملف الذي أردت أن أقوم بارفاقه هو 90 KB فقط :blink:

علي العموم ساقوم بنسخ محتوياته وكتابته في المشاركة وسأحاول مرة أخري لاحقا ان أقوم بارفاقه .أما بالنسبة للمودم فانني أعتقد أنه يمكن استخدام المودم العادي مع بعض الادوات التي تقوم بالتعامل مع الهاتف مثل Modem Tools التي ذكرتيها ولا توجد حوجة لصرف مبلغ 7 الاف ريال في مودم لمشروع تخرج :lol:

اقتباس
بداية المقال

فائدة : تعلم كيف تستخدم جهاز الهاتف العادي لكتابة اسمك على شاشة جهازك !!

________________________________________

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

تعريفبالأدواتModemTools:

تعتبر هذه الأدوات قوية في مجال التحكم بالمودم المرتبط بالكومبيوتر ، يأتي ضمنها أداتين :

1- Modem Phone

2- Modem Wave

أما الأولى فهي للتحكم بالمودم وقراءة خصائصه و توافقيته مع الميزات التي تحملها هذه الأداة، وهي الأداة التي سيتم شرحها حالياً ، تمتلك هذه الأداة عدة مزايا منها :

-المشاركة مع التطبيقات الأخرى في التعامل مع المودم في نفس الوقت.

-تحديد المكالمات الواردة (الرنين الوارد).

-دعم كشف الرقم (CallerID).

-الرد على المكالمات الهاتفية.

-إجراء مكالمات.

-التعرف على المفاتيح المضغوطة من قبل الطرف الآخر(DTMF detection).

-التحكم بوظائف السماعة الخاصة بالمودم.

-ضبط مستوى السماعة وربح الميكروفون للمودم.

وغيرها من المزايا ..

سأقوم بشرح بعض الخصائص التي تمكننا من بناء تطبيق بسيط يمكننا من خلاله إدخال كلمة ما من خلال الهاتف ويتعرف عليها الكومبيوتر من الطرف المقابل إن شاء الله ، و للمزيد من المعلومات يمكن مراجعة ملف التعليمات المساعدة ModemPhone.chm الذي يمكن الحصول عليه مع بعض الأمثلة من الرابط هنا، أما مجموعة الأدوات ModemTools من خلال الرابط هنا، والملف الضروري للعمل هنا .

خصائصجهازالمودم:

لاشك بأن لكل مودم خصائص معينة تختلف بحسب الشركة الصانعة أو نوعيته .

ضمن أداة ModemPhone هناك طريقة اسمها GetModemCaps تعود بقيمة من نوع Long وتتطلب وسيطاً واحداً ModemID يمثل الرقم التسلسلي للمودم (في حال وجود أكثر من مودم مثبت على الجهاز) المراد الحصول على خصائصه.

يقصد بخصائص المودم الخصائص المتعلقة بقدرته على التعرف على الأزرار المضغوطة من الطرف المقابل (DTMF detection) ، هل يدعم عزف ملفات صوتية أو يقوم بتسجيل صوت المتصل ، هل يمكن ضبط سماعة المودم وضبط ربح الميكروفون ..الخ ، حيث أن القيمة المرجعة من الطريقة GetModemCaps تعبر عن إحدى الحالات التالية :

القيمة(بالست عشري) الوصف

&H1 تحدد فيما إذا كان المودم يدعم الصوت ، (يمكننا التكلم عبره مثلاً)

&H2 تحدد إذا كان المودم يقبل عزف ملف من نوع wav أو حتى تسجيل ملف من نفس النوع.

&H4 هذه القيمة لاتهمنا..

&H8 تحدد إذا كان المودم يدعم نمط سماعة الهاتف (السماعة الداخلية الخاصة به)

&H16 تحدد إذا كان المودم يقبل ضبط مستوى السماعة وربح الميكروفون.

&H32 هذه القيمة لاتهمنا ..

&H64 تحدد إذا كان المودم يستطيع تحديد ضغطات المفاتيح من جهاز الهاتف على الطرف المقابل (0- 9) بالإضافة إلى * و #

&H128 تحدد إذا كان المودم يدعم خاصية كاشف الرقم.

في مثالنا الذي نعده يكفي أن تتوفر القيمة &H64 ، والتي تعادل عشرياً القيمة 100 .

عينة للاستخدام :

Dim ModemCaps as Long
ModemCaps = ModemPhone.GetModemCaps(ModemID)
If (ModemCaps AND 100) <> 0 Then
	‘المودم يدعم خاصية التعرف على الأزرار المضغوطة
End if

فتح المودم:

لكي نستخدم الأداة ModemPhone لمراقبة المكالمات القادمة أو الرد عليها أو إجراء مكالمات جديدة علينا استخدام الطريقة OpenModem والتي تتطلب منا ثلاث وسائط :

1- ModemID: كما قلنا سابقاً بأنّه يمثل الرقم التسلسلي للمودم لديك وهو يقبل قيم بين الصفر حتى القيمة NumberOfModems –1 تعبر الخاصية NumberOfModems للأداة ModemPhone عن عدد أجهزة المودم الموصولة بجهازك والتي ستكون واحد اذا كان هناك مودم وحيد.

2-OpenPhone : وهي قيمة منطقية ، اجعلها دائماً False ، تقوم بفتح أجهزة هاتف محلية موصولة بالمودم لديك اذا وضعت على True.

3-OwnIncoming : وهي قيمة منطقية تحدد فيما إذا كان برنامجك هو الوحيد المخول بالرد على المكالمات القادمة ، كما قلنا قبل قليل يمكن أن يكون هناك أكثر من برنامج يتعامل مع المودم في نفس الوقت ، يمكن لجميع البرامج أن تستشعر بوجود مكالمة قادمة ولكن أحدها فقط يستطيع الرد عليها ، وهذا ما يفعله الوسيط OwnIncoming عندما تسند إليه القيمة True.

لا يوجد أي أمر إغلاق يزامل عملية فتح المودم باستخدام الطريقة OpenModem.

مثال :

 ModemPhone.OpenModem ModemID ,False, True

الحدث IncomingCall:

هذا الحدث يتم تنفيذه عندما تستشعر الأداة بوجود مكالمة قادمة ، ولهذا الحدث وسيط واحد RingNumber الذي يعبر عن عدد الرنّات ،فمثلاً يمكننا تحديد أربع رنّات ليتم بعدها تنفيذ أمر معين مثل الرد على المكالمة باستخدام الطريقة Answer (انتبه : حتى تستطيع الرد على المكالمة ينبغي إسناد القيمة True للوسيط OwnIncoming للطريقة OpenModem كما مرّ معنا قبل قليل).

وهذه العينة كمثال :

Private Sub ModemPhone_IncomingCall(RingNumber As Long)
IF RingNumber = 2 Then 
	ModemPhone.Answer
End IF
End Sub

الحدث Connected :

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

لهذا الحدث وسيط واحد من نوع Long هو WaveID والذي يمثل الرقم الذي نمرره للأداة ModemWave (التي لن نشرحها حالياً) لكي تتمكن من عزف ملف صوتي أو تسجيل الصوت من الطرف المقابل، وتكون قيمة هذا الوسيط (- 1) إذا لم يكن هناك دعم من قبل المودم لعملية عزف الملف أو التسجيل.

Private Sub ModemPhone_Connected(WaveID AS Long)
Me.Caption = “[Connected]”
End Sub

الحدث DigitReceived:

بعد الرد على المكالمة باستخدام الطريقة Answer يمكننا الآن أن نعرف ما هي الأزرار التي يضغطها المستخدم على الطرف الآخر ، يتم ذلك باستخدام الحدث DigitReceived ، لهذا الحدث وسيط هو قيمة نصية تمثّل الزر الذي يضغطه الشخص من الطرف الآخر.

مثال :

Private Sub  ModemPhone_DigitReceived (Digit As String)
IF Digit = “*” OR Digit = “#” THEN
	MsgBox “Ok ..”
End IF
End Sub

الطريقة HangUp:

تستخدم هذه الطريقة لقطع الاتصال الحالي ، ولكن ينبغي تنفيذها أكثر من مرّة حسب استجابة المودم لتقوم بالمطلوب ، و عند قطع الاتصال يتم تنفيذ الحدث Disconnected :

Private gFlag AS Boolean 

Private Sub Disconnected()
gFlag = True
End Sub

Private Sub cmdHangUp_Click()
Do:DoEvents
ModemPhone.HangUp
Loop Until gFlag = True
gFlag = False
End Sub

هكذا أكون قد شرحت الأقسام التي تهمنا بشكل عام لمشروعنا الصغير ، لمزيد من المعلومات أفضل مراجعة ملف المعلومات الخاص بالأداة ModemPhone .

شرحالمشروع:

يقوم المشروع على فكرة بسيطة وهي بناء برنامج بالاعتماد على الأداة ModemPhone (ضمن حزمة ModemTools) يقوم بمراقبة خط الهاتف ، عند تلقي إشارة بوجود مكالمة يقوم بعد عدد من الرنات بالإجابة على المكالمة (لن تكون الإجابة في مشروعنا هذا بشكل صوتي) ، من ثم سيقوم برنامجنا باستشعار الأزرار التي يضغطها شخص ما على الطرف المقابل ، ولكن ربما يستغرب البعض ما علاقة كل هذا بما قلناه في بداية المقال ؟ أي كيف سيتمكن المستخدم على الطرف المقابل من إدخال اسمه مثلاً عن طريق الهاتف ومن ثم يستطيع برنامجنا فهم الرسالة وعرض الاسم ؟ التوضيح القادم سيفي بالغرض إن شاء الله ، حيث أننا سنأخذ الأمر من وجهتين : الأولى بالنسبة لجهاز الهاتف ذاته ، والثانية بالنسبة للبرنامج الذي نصممه.

1-بالنسبةلجهازالهاتف:

لاحظوا معي هذه الصورة ..

:rolleyes: عذرا لعدم ارفاق الصورة نسبة للمشكلة الذي ذكرتها سابقا ..

هذه الصورة تمثل لوحة أرقام جهاز هاتف قياسية ، ماذا تلاحظ على مربع الرقم ( 2 ) ؟ ستلاحظ وجود أحرف لاتينية (ABC) ، حسناً على مربع الرقم ( 3 ) ستجد الأحرف (DEF) على المربع ( 7 ) نجد (PQRS) ، ما هي الفائدة التي من الممكن أن نجنيها من هذه الخاصية ؟

-عندما يتم الاتصال بين المستخدم وجهاز الكومبيوتر على الطرف المقابل ، سيبدأ المستخدم بمحاولة كتابة كلمة ما لتظهر على الجهاز في الطرف المقابل ، لتكن مثلا الكلمة : " GOD".

بداية سيبحث المستخدم عن مربع الرقم الذي يحوي الحرف G (أول حرف من الكلمة) ، تلاحظ أنّه مربع الرقم (4) ،وترتيب الحرف G بالنسبة للأحرف التي تجاوره (من اليسار إلى اليمين) هو واحد ، يضغط المستخدم على الرقم (4) مرة واحدة فيستشعر البرنامج على الطرف المقابل هذه الضغطة ، الآن لتثبيت الحرف ، أي لنعلم البرنامج بأنّنا نريد هذا الحرف بالتأكيد يضغط المستخدم العلامة (*) على سبيل المثال .

يستشعر البرنامج لهذه الضغطة ويعرف أن المستخدم قد ضغط (*) أي أنّه اختار الحرف T بالتأكيد ، الآن دور الحرف O (ثاني حرف من الكلمة) ، نلاحظ أنّه يقع في المربع رقم (6) فيكون ترتيبه الثالث بالنسبة للأحرف التي تجاوره ، ماذا سيفعل المستخدم الآن ؟ سيقوم بضغط الرقم (6) ثلاث مرات ! المرة الأولى لاختيار الحرف M ، والمرة الثانية لاختيار الحرف N أما المرة الثالثة لاختيار الحرف المنشود O وعند ضغط العلامة (*) من على لوحة المفاتيح سيعرف البرنامج على الطرف المقابل بأنّ المستخدم يريد إضافة الحرف O بالتأكيد ، و هكذا بالنسبة للحرف D ، نضغط الزر رقم (3) مرة واحدة ، نضغط (*) للتثبيت ، ولكي نعلم البرنامج أنّنا قد انتهينا من إدخال ما نريد من أحرف نضغط الرمز (#) ، هذا كل شيء !

2-بالنسبةللبرنامج:

لاشك بأنّ البرنامج سيستقبل من الهاتف على الطرف المقابل رموز تمثل أرقام الهاتف من 0 إلى 9 مع الرمزين * و # ، وذلك عن طريق الحدث ModemPhone_DigitReceived التابع للأداة ModemPhone وكما قلنا مسبقاً بأنّ هذا الحدث لديه وسيط واحد فقط من النوع String يعود بقيمة الزر الذي قام المستخدم بضغطه من الهاتف.

بما أنّنا سنستقبل رموز نصية (هي في الواقع أرقام) وهي لا تعبّر بأي حال من الأحوال عن أحرف فهذا يسبب عائق لنا يكمن حل هذا العائق في عملية محاكاة لأزرار الهاتف نفسه ، فقد عملت في هذا البرنامج إلى تعريف مصفوفة عامة LetterArr من النوع String لها بعدين ، البعد الأوّل يعبّر عن أرقام أزرار الهاتف (من 0 إلى 9) ، والبعد الثاني يمثّل الأحرف الأبجدية التي سيمثلها كل رقم من هذه الأرقام ،

وهكذا أنشأت حلقتي For ..Next لتعبئة محتويات المصفوفة ، فقد استفدت من كون أحرف الأبجدية الإنكليزية التي تبدأ من الحرف aوتنتهي ب z متسلسلة في قيم شيفرة آسكي ASCII التي تمثلها ، فحرف a يمثله في آسكي الرقم (97) إلى الحرف z الذي يمثله الرقم ( 122) ، وإليكم عينة من الكود تبين طريقة تعبئة محتويات المصفوفة :

 Private Sub Form_Load()
    Dim AsciiValue As Integer
    Dim Buttons As Integer
    Dim Letters As Integer
    
    AsciiValue = 97
    For Buttons = 2 To 9
        For Letters = 0 To 3
            If Chr(AsciiValue) = "z" Or Chr(AsciiValue) = "s" Then
                ‘do nothing ..
            Else
                If Letters = 3 Then Exit For
            End If
            LetterArr(Buttons, Letters) = UCase( Chr(AsciiValue))
            AsciiValue = AsciiValue + 1
        Next Letters
    Next Buttons
    
    For Letters = 0 To 3
        LetterArr(1, Letters) = Chr(32)
    Next Letters
    
End Sub

لاحظ السطر التالي في الكود السابق :

If Chr(AsciiValue) = "z" Or Chr(AsciiValue) = "s" Then

تفسير هذا السطر يكمن في الشكل السابق في الأعلى حيث تلاحظ أنّ كلا الزرين رقم 7 و 9 يحوي أربع أرقام ، مما يستدعي حجز حرف إضافي لكل رقم من هذين الرقمين لكي تقوم الحلقتين باستيعاب جميع الأحرف ، أمّا الحلقة الأخيرة في آخر الإجراء Form_Load() فوظيفتها أن تعبئ الرقم 1 من المصفوفة برمز آسكي رقم (32) وهو يمثل المسافة Space ، على فرض أنّك تكتب جملة وهناك فراغات ، فنحن نستغل الرقم ( 1 ) من أزرار الهاتف لكي يعطي فراغ ضمن سلسلة الكلمات في الجملة ، بما أنّ الرقم ( 1 ) لا يمثّل أي حرف.

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

ملاحظات

1-قد تسبب طريقة إضافة الأرقام عن طريق الهاتف بعض الارتباك ، لذلك عليك أن تكون منتبهاً إلى كيفية إدخال الأرقام وعدد الضغطات.

2-هناك بعض الهواتف التي لا تملك واجهة قياسية على لوحة الأزرار ، على سبيل المثال في الشكل السابق في الأعلى نلاحظ أنّ مربع الرقم ( 7 ) يمثل أربع أحرف هي على الترتيب PQRS ، نفس الزر رقم ( 7 ) في هواتف أخرى يمكن أن يحوي حرف ناقص ، رغمّ أن الحرف الناقص لن يؤثّر عملنا مطلقاً كما تعلمون ، ولكن القضية متعلقة بك فعليك أن لا تنسى أن هناك حرف ناقص عندما تريد اختيار حرف ما على ذلك الزر أي مراعاة الترتيب .

3-تتم إضافة الأداة ModemPhone إلى المشروع بعد تشغيل الملف ModemTools.exe وتنصيب الأدوات على جهازك ، تشغل برنامج فك الحماية ، تختار الأداة المطلوبة من نافذة Components تحت الاسم : Netpoint Modem Phone .

4-لم يتم استخدام الأداة ModemWave في هذا المقال بغرض التبسيط ، قد يتم شرحها مستقبلاً إن شاء الله.

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

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

اقتباس
نهاية المقال

والله الموفق

#3

اشكرك على المثال ولكن المشكلة هي المودم

فالرجاء من الاخوة في السعودية الذين جربوا اظهار الرقم او التعرف على ضغطات الازرة

ان يعلمونا بنوع المودم الذي يستخدموه

#5

د.كمال شكرا لاهتمامك

ذكرت ان لديك مودم يو اس روبوتكس خارجي يدعم هذه الخاصية في السعودية فيا ليت تذكر :

نوعه

وموديله

حتى اتمكن من شراءه

ولك شكري وتقديري

#6

Us Robotics 56 MessageExternal

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

جميع المودمات الجديد تدعم V92 والتى تظهر الرقم من الخط ولكن المشكلة ان المقاسم الموجودة في الوطن العربي لاتدعم V92 وبالتالي يجب البحث عن مودم قديم يدعم CallerID

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

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