السلام عليكم و رحمة الله و بركاته
إيه رأيكم النهاردة نتعلم كيف نعمل مسنجر خاًص!
يعني المسنجر إيمه مثلا: ihabsoft messenger
فى هذا الموضوع سأقوم بالتحكم فى معظم الأشياء فى ال MSN Messenger عن طريق الفيجوال بيزيك
يعنى مثلا تغيير الحالة من Online إلى Away أو Invisible ...
أو عمل بلوك للأشخاص ...
و بعد كده نبدأ بإذن الله تصميم برامج صغيرة للماسنجر زى Answer Machine لأى حد يكلمك و إلخ
و أتمنى أن ينل الموضوع إعجابكم
نبدأ على بركة الله
بدء الإتصال بين الفيجوال بيزيك و الMSN
و طبعا دى أول خطوة ممكن نعملها و حتتم بسهولة جدا بإذن الله
أولا قبل كتابة الأكواد يجب عمل الآتى فى الفيجوال بيزيك
إضغط Project بأعلى البرنامج ثم References و ستظهر لك قائمة كبيرة إبحث فيها عن الآتى وعلم عليهم :
Messenger API Type Library
Messenger Type Library
و بعد ما تعلم عليهما تدوس Ok كما بالصورة :
تمام ؟؟
ملحوظة : لو قفلت الProject و فتحت واحد جديد لازم تعمل نفس الحكاية اللى فاتت دى تانى من أول و جديد
ندخل على المهم ..
لازم دلوقتى نعرف ال Messenger API اللى حنستخدمها
بسيطة
حنكتب الكود ده فى أعلى كود الفورم بتاعتنا أو فى Module منفصلة مايفرقش
كود PHP:
Public WithEvents MSN As MessengerAPI.Messenger
Public MsgrWindow As MessengerAPI.IMessengerWindow
معرفة حالة الMSN لديك
و دى طبعا خطوة أساسية علشان تعرف حالتك أوفلاين و لا أونلاين ولا بيزى ....
و الخطوة دى تعتمد على 8 متغيرات و هم :
MISTATUS_OFFLINE و معناها أنك غير متصل أو الماسنجر مغلق لديك
MISTATUS_ONLINE و معناها أن حالتك أونلاين
و كذلك باقى الحالات MISTATUS_BUSY و MISTATUS_AWAY و MISTATUS_BE_RIGHT_BACK و MISTATUS_ON_THE_PHONE و MISTATUS_OUT_TO_LUNCH و أخيرا MISTATUS_INVISIBLE و معناها إنك غير مرئى للآخرين .
و لكن يجب قبل كل شىء تمثيل الماسنجر بإسم معين و ليكن MSN لكى يمكننا التعامل معه و ذلك عن طريق كتابة فى الحدث Form_Load الكود الآتى :
كود PHP:
Set MSN = New MessengerAPI.Messenger
نيجى دلوقتى على كيفية استخدام المتغيرات الآتية فى معرفة حالة الماسنجر لديك :
حنحط مثلا Label و ليكن إسمها Label1 علشان يطلعلنا فيها حالة الماسنجر.
فلو كانت حالتك مثلا Busy حيكون MSN.MyStatus = MISTATUS_BUSY و هكذا مع جميع المتغيرات السابقة
و علشان ماتعملش قاعدة If...Then...End If مليون مرة حنعمل Select Case كالآتى و طبعا فى الحدث Form_Load :
كود PHP:
Select Case MSN.MyStatus
Case MISTATUS_OFFLINE
Label1.Caption = "Offline"
Case MISTATUS_ONLINE
Label1.Caption = "Online"
Case MISTATUS_AWAY
Label1.Caption = "Away"
Case MISTATUS_BUSY
Label1.Caption = "Busy"
Case MISTATUS_BE_RIGHT_BACK
Label1.Caption = "Be Right Back"
Case MISTATUS_ON_THE_PHONE
Label1.Caption = "On The Phone"
Case MISTATUS_OUT_TO_LUNCH
Label1.Caption = "Out To Lunch"
Case MISTATUS_INVISIBLE
Label1.Caption = "Invisible"
End Select
و نشغل البرنامج ....
إيه رأيكم ؟
نيجى على أسهل حاجة فى الموضوع وهى
معرفة عدد الإيميلات الجديدة
و الكود بتاعها شديد البساطة و حنحطه مثلا فى الحدث Form_Load و هو :
كود PHP:
On Error Resume Next
Me.Caption = "You have " & (MSN.UnreadEmailCount(MessengerAPI.MUAFOLDER_INBOX)) & " New E-mails"
و طبعا عدد الإيميلات الجديدة حينكتبلك فى أعلى الفورم بتاعتك و ممكن تغيره و تحطه فى المكان اللى تحبه
و جزئية On Error Resume Next علشان البرنامج مايعلقش فى حالة لو كنت أوفلاين .
و دلوقتى ندخل فى الكركبة :
معرفة الأشخاص الOnline لديك
حانفرض الشخص الواحد اللى على لستة الماسنجر بإسم msncontact و يكون as IMessengerContact
و حانفرض مجموعة الأشخاص كلهم اللى على لستة الماسنجر لديك بإسم msncontacts و يكونوا as IMessengerContacts
و نعرف ال msncontacts على أنهم MSN.MyContacts
و يكون الكود :
كود PHP:
Dim msncontact As IMessengerContact
Dim msncontacts As IMessengerContacts
Set msncontacts = MSN.MyContacts
و بعد كده حنختبر حالة كل شخص فى اللستة على انفراد فلو كانت حالته أى حاجة غير Offline نضيفه إلى قائمة الأشخاص الأونلاين
و لكن أين قائمة الناس اللى أونلاين ؟
بسيطة .. نحط ListBox و ليكن إسمها مثلا List1
و علشان نختبر الContacts فى الMSN واحد واحد نستخدم قاعدة For Each ... In ... Next
و نقارن حالة كل شخص على انفراد بالحالات Busy , Away .... إلا الحالة Offline فإن كان منهم نضيف إيميله اللى حنجيبه من هنا (msncontact.SigninName) إلى List1 بتاعتنا و الكود بتاع الحتة دى أهوه :
كود PHP:
For Each msncontact In msncontacts
If msncontact.status = MISTATUS_ONLINE Or msncontact.status = MISTATUS_INVISIBLE Or msncontact.status = MISTATUS_UNKNOWN Or msncontact.status = MISTATUS_AWAY Or msncontact.status = MISTATUS_BE_RIGHT_BACK Or msncontact.status = MISTATUS_IDLE Or msncontact.status = MISTATUS_ON_THE_PHONE Or msncontact.status = MISTATUS_OUT_TO_LUNCH Or msncontact.status = MISTATUS_BUSY Then
List1.AddItem msncontact.SigninName
List1.Refresh
End If
Next
و مبدئيا حنحط الأكواد اللى فى المشاركة دى فى ال Form_Load
و بعد كده حنحتاج ننقلها إلى Function لسهولة تنفيذها لو أى حد كان أونلاين و بعد كده طلع أوفلاين علشان لو حطيناها فى ال Form_Load البرنامج حيقرأ الContacts الOnline عند بدء تشغيل البرنامج و بس .
لو الفكرة ما وصلتش مافيش مشاكل كل ده حييجى بعدين بإذن الله .
و حتة كده روشنة فى الموضوع
معرفة الNickName بتاعك
مافيش أسهل من كده
حانحط مثلا Label إسمها Label2 و نكتب برده فى الForm_Load
كود PHP:
Label2.Caption = MSN.MyFriendlyName
علشان مادخلش فى حتة جديدة و حد تايه منى :
متطلبات البرنامج لحد دلوقتى ListBox إسمها List1 و 2 Labels إسمهما Label1 و Label2
و الكود كله لحد دلوقتى :
كود PHP:
Public WithEvents MSN As MessengerAPI.Messenger
Public MsgrWindow As MessengerAPI.IMessengerWindow
Private Sub Form_Load()
Set MSN = New MessengerAPI.Messenger
Select Case MSN.MyStatus
Case MISTATUS_OFFLINE
Label1.Caption = "Offline"
Case MISTATUS_ONLINE
Label1.Caption = "Online"
Case MISTATUS_AWAY
Label1.Caption = "Away"
Case MISTATUS_BUSY
Label1.Caption = "Busy"
Case MISTATUS_BE_RIGHT_BACK
Label1.Caption = "Be Right Back"
Case MISTATUS_ON_THE_PHONE
Label1.Caption = "On The Phone"
Case MISTATUS_OUT_TO_LUNCH
Label1.Caption = "Out To Lunch"
Case MISTATUS_INVISIBLE
Label1.Caption = "Invisible"
End Select
On Error Resume Next
Me.Caption = "You have " & (MSN.UnreadEmailCount(MessengerAPI.MUAFOLDER_INBOX)) & " New E-mails"
Label2.Caption = MSN.MyFriendlyName
UpdateContacts
End Sub
Public Function UpdateContacts()
Dim msncontact As IMessengerContact
Dim msncontacts As IMessengerContacts
Set msncontacts = MSN.MyContacts
For Each msncontact In msncontacts
If msncontact.Status = MISTATUS_ONLINE Or msncontact.Status = MISTATUS_INVISIBLE Or msncontact.Status = MISTATUS_UNKNOWN Or msncontact.Status = MISTATUS_AWAY Or msncontact.Status = MISTATUS_BE_RIGHT_BACK Or msncontact.Status = MISTATUS_IDLE Or msncontact.Status = MISTATUS_ON_THE_PHONE Or msncontact.Status = MISTATUS_OUT_TO_LUNCH Or msncontact.Status = MISTATUS_BUSY Then
List1.AddItem msncontact.SigninName
List1.Refresh
End If
Next
End Function
تغيير الStatus
و حنستخدم فيها نفس الطريقة اللى استخدمناها فى معرفة الStatus و لكن بعكسها :
أولا نضع 7 CommandButtons و لتكن أسماؤهم command1 و Command2 و...... Command7
ثم نغير الCaption لكل منهم :
الأول ------- Online
الثانى ------- Appear Offline
الثالث ------- Away
الرابع ------- Busy
الخامس ------- Out To Lunch
السادس ------- On The Phone
السابع ------- Be Right Back
و الكود يكون كالآتى : MSN.MyStatus يساوى المتغير اللى بيعبر عن الحالة اللى إنت عاوزها و اللى كاتبهم فى بداية الموضوع
كود PHP:
Private Sub Command1_Click()
MSN.MyStatus = MISTATUS_ONLINE
End Sub
Private Sub Command2_Click()
MSN.MyStatus = MISTATUS_INVISIBLE
End Sub
Private Sub Command3_Click()
MSN.MyStatus = MISTATUS_AWAY
End Sub
Private Sub Command4_Click()
MSN.MyStatus = MISTATUS_BUSY
End Sub
Private Sub Command5_Click()
MSN.MyStatus = MISTATUS_OUT_TO_LUNCH
End Sub
Private Sub Command6_Click()
MSN.MyStatus = MISTATUS_ON_THE_PHONE
End Sub
Private Sub Command7_Click()
MSN.MyStatus = MISTATUS_BE_RIGHT_BACK
End Sub
و نجد أنه يمكن التغيير من حالة إلى أخرى فى منتهى السهولة
و يمكن استخدام هذه الإمكانية فى عمل Timer و استخدامه فى تغيير الحالة من Online إلى Appear Offline ثم إلى Online ثم Appear Offline و هكذا فيظهر عند الContacts بتوعك فلان Has signed in كذا مرة و بتوصل ساعات إنه الصفحة بتتملى والجهاز بيهنج عنده ....
فكرة غلسة بس لذيذة
بس خلى بالك إنه كده بتغلس على كل اللى Online عندك مش واحد بس و لو عايز واحد بس ممكن تعمله Block ثم UnBlock ... و هكذا عن طريق الكود اللى حاشرحه بإذن الله فى المشاركات القادمة مع Timer .
ايه رأيكم عايز ردود وتثبيت فتره من المشرف ان كام في اقبال من الاعضاء.