السلام عليكم ورحمة الله وبركاته
سأحاول في هذا الموضوع طرح مجموعة من الأسئلة والإجابة عنها في الآن ذاته. ربما تكون مفيدة للبعض و إن كانت هناك إضافة أو تصحيح فالمجال مفتوح طبعا للجميع و من الله العون.
سؤال: كيف أستطيع التواصل مع FTP server عبر إتصالGPRS؟
إجابة: لا يوجد تعريف لFTP في CompactFramework الإصدار الأول والثاني لذلك بإمكانك إستعمال مكتبة OpenNETCF.Net.Ftp التي يوفرها فريق OpenNETCF. أما بالنسبة لتواصل عبرGPRS فراجع هذا الموضوع حيث يوجد ملف فيه كل ما تحتاج
سؤال:هل يمكنني إخفاء مجلد/ملف أو جعله غير قابل للتعديل؟
إجابة: بما أنك في منتديات الفريق العربي للبرمجة فكل شيء ممكن, يكفي أن تجرب المثال التالي بعد التأكد من وجود المجلد/الملف في المسار المحدد:
System.IO.FileInfo fileInfo = new System.IO.FileInfo("labels.txt");
fileInfo.Attributes = System.IO.FileAttributes.ReadOnly;لو قمت بإختيار Go To Definition إثر النقر بيمين الفأرة فوق كلمةFileAttributes فستحملك إلى التعديلات الخاصة بالملفات والتي يمكن قرائتها أو تغيرها
سؤال:أريد إستعمال توابع ال RILمثل RIL_Dial, RIL_Answer, RIL_Hangup, RIL_SendDTMF, RIL_SetDTMFMonitoring, RIL_GetCallListو RIL_ManageCalls في التعامل مع الإتصالات الواردة والصادرة من حاسب الكف الذي أستعمله ولكني لم أستطع تعريفها؟ هل من مساعدة؟
إجابة: لو قمت بمراجعة تعريفRIL_Dial مثلا ستشاهد الصورة التالية:
كما هو مكتوب في الصورة فإن هذه الدوال غير متوفرة في نظام التشغيل Windows Mobile إنما فقط في نظام التشغيل Win CE. ربما هنا يطرح تساؤل حول الفرق بينهما. الإجابة بكل بساطة أن الويندوز Win CE هو النواة التي بني عليها Windows Mobile. أعود للسؤال المطروح مذكرا أن تلك الدوال معرفة في الإصدار 4.2 من Win CE و ما يليه
سؤال: لدي حاسوب كف من جيل 2006 وأريد حذف الرسائل الواردة على هاتفي مباشرة إذا كانت تحتوي جملة معينة أو من شخص معين. هل يمكن ذلك؟ وإن أمكن كيف أقوم بذلك؟
إجابة:أجل بإمكانك ذلك بإستعمال كل من MessageInterceptor و MessagePropertyComparisonType ينتمي هذين القسمين إلى المجال Microsoft.WindowsMobile.PocketOutlook لذلك يتوجب إضافته إلى المشروع منذ البداية
النوع
MessagePropertyComparisonTypeيحتوي على جملة من الخصائص وهي: Equal, NotEqual, Contains, StartsWithو EndsWith. هذه الخاصائص تمكن من البحث في نص الرسالة بإعتماد أوله, آخره, مقارنته بنص آخر ما إن كان يعادله أم لا. لذلك ينبغي الحذر عند مقارنة نص الرسالة الواردة بالنص الموجود لأن أبسط فرق كفراغ زائد أو حرف... يفشل المقارنة رغم أن النصيه متشابهين.
إثر ذلك بإمكانك إستعمال الكود التالي:
MessageInterceptor SmsInterceptor = null;
private void Form1_Load(object sender, EventArgs e)
{
SmsInterceptor = new MessageInterceptor();
SmsInterceptor.MessageCondition =
new MessageCondition(MessageProperty.Sender,
MessagePropertyComparisonType.Contains, "Karim ", false);
SmsInterceptor.MessageReceived += SmsInterceptor_MessageReceived;
}ما إن يتم تشغيل البرنامج و تحميل الواجهة الرسومية تبدأ عملية التصنت والتي تعدم على الدالةSmsInterceptor_MessageReceived
void SmsInterceptor_MessageReceived(object sender, MessageInterceptorEventArgs e)
{
SmsMessage newMessage = e.Message as SmsMessage;
if (newMessage != null)
{
statusBar1.Text = "From:" + newMessage.From.Address;
Debug.WriteLine(string.Format("Sender:{0} - Body:{1}", _
newMessage.From.Address, newMessage.Body));
}
}يمكن الإطلاع على هذا الربط للمزيد من التفاصيل
يتبع...
سؤال: أريد إعادة إرسال رسالة من نوع MMSتم إرسالها لي
إجابة: غير ممكن الوصول لمحتوى الرسائل القصيرة من هذا النوع و من الممكن إستخدام عدة البرمجة المتوفرة في هذا الموقع.
سؤال: كيف يمكنني تحويل الإتصال بشبكة الأنترنت بين ActiveSync و الشبكة اللاسلكية WLAN.
الإجابة: يمكن تحديد نوع الإتصال بشبكة الأنترنت عبر تحديد قيمة المتغيرguidDestNet في اللائحة CONNMGR_CONNECTIONINFO. هذه اللائحة مستخدمة من قبل دالة الإتصال ConnMgrEstablishConnection.
يجب التذكر أنه من الممكن الإتصال عبر الشركة اللاسلكية المرتبط بها حاسوب المكتب، إذا كان الإختيارAllow wireless connection on device when connected to desktop فيActiveSync مفعّل.
سؤال: هل يوجد حل أيسر للسؤال السابق؟
إجابة: يمكن إستخدام الدالة Socket.Bind لحصر عناوين التي يمكن الإتصال بها. أما بالنسبة للشبكة اللاسلكية يمكن البحث عن مختلف الشبكات المتوفرة و الربط بها ب OpenNETCF.Net.NetworkInformation.AccessPoint .
سؤال: أريد إستخدام إحدى دوالRAS و لذلك قمت بنسخ المكتبة cellcore.lib في C:\Program Files\Windows Mobile 6 SDK\PocketPC\Lib\Armv4iلأن المشروع تعديل لكود كان موجه لحواسيب كف من جيل 2003. لكنني لم أستطع الترجمة و تظهر لي رسالة الخطء التالية:
cellcore.lib failed to load. 193: %1 is not a valid Win32 application.
الإجابة: المشكلة تكمن في طريقة إدراج المكتبة في المشروع. يوجد طريقتان لإدراج هذه المكتبة:
1. إدراج المكتبة في إعدادات المشروع في الفيزوال ستوديو "Configuration Properties"->"Linker"->"Input"->"Additional Dependencies"
2. إدراج المكتبة في الشفرة مباشرة بإستخدام
#pragma comment(lib, "cellcore.lib")