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

دورة في برمجة الهواتف الذكية وحواسيب الكف

رائج
بدأه بن العيد في 9 أغسطس 2007 · 21 رد · 20,792 مشاهدة · في برمجة الأجهزة الكفية والمحمولة بالدوت نيت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

الهدف من هذا الموضوع هو المساعدة في تعلم برمجة الهواتف الذكية وحواسيب الكف ليس لمبرمجي الدوت نت فقط بل أيضا مبرمجي السي ولغة الآلة أيضا.

هذه بعض اللوازم الأولية, يمكن تحميلها وتنصيبها أو القيام بذلك لاحقا:

يمكن أيضا الإطلاع على موضوع كل ما يلزمك لبرمجة الأجهزة الكفية لأخي تمام بارك الله فيه

ملاحظة: ليس من الضروري أن يكون لديك حاسوب كف أو هاتف ذكي لتتعلم هذا النوع من البرمجة فالمحاكي كاف لذلك رغم محدوديته.

سأنتظر الأسئلة والإستفسارات لأجيب بالقدر المستطاع وكل ردود الشكر والمجاملات ستحذف مباشرة

تم تعديل هذه المشاركة بواسطة Ben_Laiid في 14 أغسطس 2007 في 15:07

#2

السلام عليكم

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

عند فتح الفيزوال ستوديو لإنشاء مشروع جديد نشاهد الصورة التالية:

post-91400-1186686526_thumb.jpg

الصورة رقم 1 : إنشاء مشروع جديد

نلاحظ أن هناك إمكانية إنشاء مشاريع تخص حواسيب الكفSmartphones2003 والهواتف الذكيةPocket PC 2003 من جيل 2003 دون الحاجة الي تنصيب أو تعديل على عكس البقية (جيل 2005 و 2006 ) التي لابد من إضافتها وقد أشرت سابقا لروابط التحميل. بالإضافة الى هذه الميزة نلاحظ أيضا أن الفيزوال ستوديو يوفر مجموعة من الأدوات الفرعية التي تيسر التعامل مع حواسيب الكف و الهواتف الذكية:

post-91400-1186688180_thumb.jpg

الصورة رقم 2 :الأدوات الفرعية للتعامل مع حواسيب الكف و الهواتف الذكية

Remote Registry: هذه الأداة تماثل في باقي الحواسيب ولها نفس الوضائف وينبغي الحذر الشديد عند التعامل مع بيانات التي توفرها هذه الأداة كي لا يحدث خلل في عمل نظام التشغيل في حاسوب الكف أو الهاتف.

بما أنه يوجد دائما محبي المجازفة, فأنصح بحفظ نسخة من التعديل الأصلي لهذه الأداة قبل إحداث أي تغير لكي تسهل العودة الى الوضع الأصلي وذلك عبر إختيار Registry -> Export Registry File...

post-91400-1186689668_thumb.jpg

الصورة رقم 3: الأداة Remote Registry

Process viewer: يمكن من الإطلاع على ملفات التشغيل النشطة في حاسوب الكف أو المحاكي, مكان تواجده, المكتبات التي تدعمها ومزيد من التفاصيل الأخرى مع إمكانية إيقاف أحد هذه الملفات عند توفر الصلاحيات الكافية للقيام بذلك.

post-91400-1186689697_thumb.jpg

الصورة رقم 4: الأداة Process viewer

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

post-91400-1186689726_thumb.jpg

الصورة رقم 5: الأداة File viewer

Remote Spy : إثر تحقيق الربط بين حاسوب الكف أو الهاتف أو المحاكي والحاسوب يكون هناك تبادل لرسائل بين الطرفين.Remote Spy يمكن من تتبع هذه الرسائل.

post-91400-1186689747_thumb.jpg

الصورة رقم 6: الأداة Remote Spy

Remote Zoom In: تمكن هذه الأداة أساسا من تعديل حجم الواجهة الرسومية الرئيسية لحاسوب الكف/الهاتف

post-91400-1186693260_thumb.jpg

الصورة رقم 7: الأداة Remote Zoom In

Remote Heap Walker: لتوفير تفاصيل دقيقة حول ملفات التشغيل النشطة

post-91400-1186694071_thumb.jpg

الصورة رقم 8: الأداة Remote Heap Walker

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

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

سؤال: وهل كل الاجهزه لازم يتركب عليها الويندوز ولا فيه اجهزه عليها لينكس...

هذه أبرز نظم التشغيل للهواتف الذكية حسب نسبة تقاسم السوق:

اقتباس
Symbian OS from Symbian Ltd. (72.8% Market Share)

Linux operating system (16.7% Market Share)

Windows Mobile from Microsoft (5.6% Market Share)

RIM BlackBerry operating system (2.8% Market Share)

Palm OS developed by PalmSource (now a subsidiary of ACCESS). (1.8% Market Share)

سؤال: والمنتد ده اسمه البرمجه بالدوت نت هل لان الدوت نت افضل وسيله للبرمجه من هزا النوع ام فيه امكانية استخدام لغات اخرى قديمه

الدوت نت ليست لغات البرمجة الوحيدة للبرمجة في الهواتف الذكية بل هناك عدة لغات أخرى مثل الجافا, السيمبيان, السي/سي ++...

إختيار الدوت نت هنا لا يعني أنها الأفضل فهناك هواتف ذكية لاتدعم هذه البيئة مثل هواتف ذات نظام التشغيل السيمبيان وأغلب هواتف Motorola

سؤال:فما هى برمجة الهواتف فيما تفيد وياحبزا لو تعطينى امثله للتطبيقات الممكن عملها فى ظل محدودية امكانات الهاتف طبعا لا اتكلم عن عمل الالعاب

هناك عدة تطبيقات وبرامج يمكن إضافتها للهاتف الذكي. مثال بسيط على ذلك برامج الآذان وتلاوة القرآن, إضافة اللغة العربية للهاتف وعديد من التطبيقات الأخرى بإمكانك الإطلاع على بعضها في قسم اخبار البوكت ومكتبة أكواد قسم برمجة الأجهزة الكفية

سؤال:كيف يتصرف نظام التشغيل اللزى به واين يوضع وهل هناك حدود لوضع البرامج

نظام التشغيل يعمل بشكل مماثل لنظيره في الحواسيب العادية إلا أنه أنموذج مصغر نظرا لمحدودية وضائفه وقلة الموارد المتصرف فيها مقارنة بنظم التشغيل لحواسيب المكتب مثل الويندوز XP, vista ...

يتم تنصيب نظام التشغيل في القرص الصلب. وحدود إضافة البرامج للهواتف الذكية مرتبطة بعدة عوامل أبرزها المساحة التبقية في الذاكرة, توافق البرنامج مع نظام التشغيل في الهاتف ...

سؤال: بسى انا عاوز اعرف الاول ما هو تعرفكم للهاتف الزكى يعنى ماانواعه هل له مواصفات معينه ...

تم تعديل هذه المشاركة بواسطة Ben_Laiid في 16 أغسطس 2007 في 15:24

#3

السلام عليكم ورحمة الله وبركاته :

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

أشد على يدك وفقك الله ..

أخوك عماد

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#4

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

#5

السلام عليكم

الشكر الجزيل اخي الكريم على هذه المعلومات

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

والسلام

#6

السلام عليكم

أبدأ الآن في إبراز كيفية إنشاء مشروع جديد لحاسوب الكف حسب اللغة ونوع المشروع:

بيئة الدوت نت

رغم إختلاف لغات لغات الدوت نت فإن مراحل إنشاء مشروع جديد متشابهة حسب نوع التطبيق. أنواع هذه التطبيقات أبرزتها في الصورة رقم 9.

post-91400-1186997870_thumb.jpg

الصورة رقم 9: إنشاء مشروع جديد لحاسوب الكف في بيئة الدوت نت

في المعقف الأحمر أبرزت نظم التشغيل التي يمكن إعتمادها والتي تتطلب إضافة ال SDKالخاصة بجيل 2005 من حواسيب الكف والهواتف الذكية و 2006 لحواسيب الكف و في الإطار الأحمر معلومات حول نوع المشروع الذي تم إختياره/تظليل أيقونته.

Device Application, Device Application 1.0: تهم التطبيقات ذات واجهة/واجهات رسومية حسب لغة الدوت نت المنتمي لها التطبيق المطور, والإختلاف بينهما في المكتبات المعتمدة عليها وجيلها والتي تسمى .Net compact .FrameWork

Console Application, Console Application 1.0: تهم التطبيقات التي تعمل في الخلفية أي دون وجود واجهات رسومية. هذا النوع من التطبيقات يماثل تلك التي ترجع الشاشة السوداء في نظام التشغيل لكن في حواسيب الكف لاتوجد تلك الشاشة ويستحسن الإعتماد على الملفات لتتبع سير البرنامج. والإختلاف بين هاتين التطبيقات هو جيل المكتبات المعتمد عليها.

Control Library:هذا النوع من التطبيقات يوفر مكتبة ديناميكية تحتوي واجهة/ رسومية, مكونات ومجالات يمكن إستغلالها في تطبيقات أخرى.

Class Library, Class Library 1.0: هذا النوع من التطبيقات يوفر أيضا مكتبة ديناميكية تساعد في تعليب جزء من الكود وإخفاءه ليتم إستغلاله في تطبيقات أخرى. والإختلاف بين هذين النوعين من التطبيقات هو جيل ال .Net compact .FrameWorkالمعتمد المعتمد عليه.

Empty Project : يوفر مشروع فارغ تكون نتيجته مرتبطة بنوعية الملفات المضافة وتنسيق الكود للحصول على تطبيق من إحدى التطبيقات السابقة أو مزج بينها.

لو أعدنا النظر الى محتويات ذلك المعقف الأحمر ربما يخطر في بالنا سؤال وهو:

مالفرق بين Windows Mobile وWindows CE ؟

الإجابة أن ال Windows Mobileيعتمد علىWindows CE وهو الجزء المركزي فيه. فالWM 2003 يرتكز علىWinCE 4.x , WM 5.0 يرتكز على الإصدار الخامس للWinCEمع إضافة بعض التطبيقات,APIs و Standard shell.

بيئة السي والسي++

post-91400-1187005625_thumb.jpg

الصورة رقم 10: إنشاء مشروع جديد لحاسوب الكف في بيئة السي والسي

توفر هذه البيئة إمكانيات كبيرة في تطوير البرامج لحواسيب الكف والهواتف الذكية والكثير من الوضائف التي تعجز بيئة الدوت نت على توفيرها

ما يهمنا هو القسم Smart Deviceوفيه يمكن تطوير برامج ذات واجهة/واجهات رسومية MFC بإختيارأو تطبيقات من نوع "شاشة سوداء" و مكتبات ديناميكية عند إختيارWin32 Smart Device Project

بيئة لغة الآلة

يمكن إدراج الكود بلغة الآلة في كود سي, وحسب نوع المشروع المطور يمكن تتبع مخرجات الكود. أما إذا كان المرجو إستخدام كود بلغة الآلة في مشروع مطور في بيئة الدوت نت فلابد من إدراجه في مكتبة ديناميكية من نوع سي/سي++ وإستدعائها في كود الدوت نت وسأشرح كيفية القيام بذلك لاحقا.

ملاحظة : يستعمل الجافا أيضا لبرمجة حواسيب الكف والهواتف الذكية ويعتبر eclipseمن أبرز ال IDEالذي ييسر ذلك.

#7
اقتباس
مالفرق بين Windows Mobile وWindows CE ؟

الإجابة أن ال Windows Mobileيعتمد علىWindows CE وهو الجزء المركزي فيه. فالWM 2003 يرتكز علىWinCE 4.x , WM 5.0 يرتكز على الإصدار الخامس للWinCEمع إضافة بعض التطبيقات,APIs و Standard shell.

في السابق لم يكن هناك لا Pocket pc ولا windows mobile وكان هناك فقط windows ce حيث ان كلا من الاثنين السابقين يعتمدان في جزء كبير منهما على windows ce

مثلاً عند عمل تطبيق نختار windows ce من القائمة لكي يعمل على Pocket pc و windows mobile و العكس غير صحيح..

هناك الكثير من الفروقات بين النظامين من حيث البرامج المضمنة و الشكل, ماشاء الله عنك شرح مميز من شخص متميز و إن شاء الله متابع معك..

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#8

السلام عليكم

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

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

للبدأ الفعلي في برمجة الهواتف الذكية ينبغي تحميل البرنامج من الرابط الذي أشرت له في البداية وتنصيبه.

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

post-91400-1187023451_thumb.jpg

الصورة رقم 11:ActiveSync قبل الربط

إذا كان لديك حاسوب كف أوهاتف ذكي فالبرنامجActiveSync يكتشفه مباشرة عند ربطه بحاسوبك ويأسس ربط بين الطرفين, طالبا منك تحديد نوع الربط.

نعود الآن لإستعمال المحاكي -Emulator-لتطوير برنامج ما لحواسيب الكف/الهواتف الذكية. يمكن إختيار نوع المشروع والبيئة كما فسرت في الموضوع السابق. نفترض Smartphone 2003->Device Applicationب C#.

post-91400-1187025057_thumb.jpg

الصورة رقم 12:إنشاء مشروع جديد للهواتف الذكية 2003

كما نشاهد في الصورة رقم 12 الواجهة الرئيسية للبرنامج لها شكل هاتف مما يقرب تصور إخراج البرنامج. في قائمة الإختيارات المفتوحة وضعت الإختيارDevice Emulator Manager... في إطار لأشير الى أنه هو المعني في المرحلة القادمة. وكما يوحي نصها فهي تهدف للتحكم في المحاكي من تشغيل, إيقاف, ربط,...

post-91400-1187026604_thumb.jpg

الصورة رقم 13:الربط عبر المتصرف في المحاكي

إثر تأكيد العملية رقم1 في الصورة رقم 13 يشتغل الActiveSync ويسعى للربط بين المحاكي والحاسوب. فتظهر النافذة المجسدة في الصورة رقم 14,في الآن ذاته تتغير أيقونة البرنامج من اللون الرمادي إلى اللون الأخضر كما هو في الصورة رقم 15.

post-91400-1187028167_thumb.jpg

الصورة رقم 14:تحديد طبيعة الربط

لتعريف نوعية الربط بين الطرفين يمكن الرجوع الى نص المساعدة المكتوب في الواجهة أسفل كل زر. سنكتفي بالإختيار الثانيGuest partnership والإتصال بالجهاز فقط لتبادل الملفات والبيانات.

post-91400-1187039676_thumb.jpg

الصورة رقم 15:ActiveSync بعد الربط

سيكون لنا لقاء آخر مع ضيفنا ال ActiveSync.

سؤال: هل من الممكن أن أعرف برمجيا ما إن كان الجهاز/المحاكي متصل عبر الActiveSync أم لا؟

أجل من الممكن ذلك. إذا كان جيل الجهاز/المحاكي 2005 فبإمكانك إضافة المجالين لبرنامجك عبر الإختيار Project->Add Reference->.Net

اقتباس
Microsoft.WindowsMobile.Status

Microsoft.WindowsMobile

ثتم تطلع على النتيجة بالكيفية التالية

label1.Text = "ActiveSync Cradled: " + Microsoft.WindowsMobile.Status.SystemState.CradlePresent.ToString();

أما إذا كان الجهاز/المحاكي من جيل 2003 فبالإمكان الإعتماد على الProcesses النشطة. عندما يكون هناك إتصال فإنrapisrv.exe يكون نشط. لقد وفرت كود في مكتبة أكواد قسم برمجة الأجهزة الكفية مسمى ActiveSyncMgr.cيوفر هذه الوضيفة علما أن هذه الطريقة تتوافق مع مختلف أجيال الأجهزة.

post-91400-1187269592_thumb.jpg

الصورة س1: حال الإتصال برمجيا

سؤال:كيف يمكنني الحصول على مساحة أكبر في ذاكرة المحاكي؟

بالإمكان إتباع المراحل التالية للوصول ملفاتك الخارجية والمجلد الذي يتم إختياره يضاف كبطاقة تخزين خارجية للمحاكي ويصبح إسمهStorage card ويضاف في المجلدFile Explorer

post-91400-1187270734_thumb.jpg

الصورة س2: خيارات التعديل للمحاكي

post-91400-1187270752_thumb.jpg

الصورة س3: إختيار المجلد الخارجي

post-91400-1187271353_thumb.jpg

الصورة س4: الوصول الى ملفاتك عبر المحاكي

أقترح تطوير تطبيق بالسي شارب ويستدعي مكتبة ديناميكية dllنقوم بتطويرها بالسي ولغة الآلة لجمع تفاصيل حول جهاز الكف ثم يتم تخزين البيانات في قاعدة بياناتSQL وملف XMLفي الآن ذاته. مارأيكم؟؟

الآن وقد جمعنا اللوازم سنبدأ إن شاء الله في البرمجة وتطوير تطبيق ما.

تم تعديل هذه المشاركة بواسطة Ben_Laiid في 16 أغسطس 2007 في 16:43

#9
اقتباس
أقترح تطوير تطبيق بالسي شارب ويستدعي مكتبة ديناميكية dllنقوم بتطويرها بالسي ولغة الآلة لجمع تفاصيل حول جهاز الكف ثم يتم تخزين البيانات في قاعدة بياناتSQL وملف XMLفي الآن ذاته. مارأيكم؟؟

جميل جدا انا موافق و معك في التطوير بإذن الله.

شيئ اخر فقط للمعلومية:في الويندوز vista لا يمكن العمل على active sync و تم تطوير منتج جديد من مايكروسوفت يعمل نفس عمل active sync اسمه windows mobile device center

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#10

السلام عليكم

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

#11
اقتباس
شيئ اخر فقط للمعلومية:في الويندوز vista لا يمكن العمل على active sync و تم تطوير منتج جديد من مايكروسوفت يعمل نفس عمل active sync اسمه windows mobile device center

أيضاً أنا صارت معي نفس القصة لم يعمل الـ ActiveSync على الـ Vista .

تم تعديل هذه المشاركة بواسطة imadouzoun في 15 أغسطس 2007 في 00:24

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#12

السلام عليكم

post-91400-1187303393_thumb.jpg

الصورة رقم 16: الواجهة الرئيسية للبرنامج

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

المراحل هي إنشاء برنامج جديد من نوعDevice Application لحواسيب الكف 2003 بلغة السي شارب -الصورة رقم 9-. سأحاول تبسيط الكود كي يتمكن مبرمجي ال VB.Net من كتابة المقابل لذلك.

إثر ذلك القيام بالربط مع ActiveSync -الصور11,12,13,14و15

أضف ListBoxمن قائمة الأدوات:ToolBox للواجهة الرئيسية لحاسوب الكف. سنضع البيانات التي نجمعها فيListBox كحل مبدئي.

قمت بتعريف الدوال بشكل مستقل الواحدة عن الأخرى ليسهل فهمها و إستغلالها و في الوقت الحالي البيانات هي:

مقاييس الشاشة طول وعرض:

هاته البيانات متوفرة في القسمScreen الذي تم تعريفه في المجالSystem.Windows.Forms

											   static public String getDisplayHorzRes()
												{return Screen.PrimaryScreen.Bounds.Width.ToString(); }
												/*==**==*/
												static public String getDisplayVertRes()
												{ return Screen.PrimaryScreen.Bounds.Height.ToString(); }

إسم نظام التشغيل وإصداره

Systemالقسم OperatingSystemيوفر العديد من التفاصيل حول نظام التشغيل. هذا القسم معرف في المجال.

static public String getOSName()
										  { OperatingSystem os = Environment.OSVersion;
											PlatformID pid = os.Platform;
											return pid.ToString();
										  }
										  /*==**==*/
										  static public String getOSVers()
										  { OperatingSystem os = Environment.OSVersion;
											return os.ToString();;
										  }

OEM: المزود الأصلي للجهاز

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

		 [DllImport("Coredll.dll", EntryPoint = "SystemParametersInfoW", CharSet = CharSet.Unicode)]
										   static extern int SystemParametersInfo4Strings(uint uiAction, uint uiParam, StringBuilder pvParam, uint fWinIni);
										   //OEM info
										   public static bool GetOemInfo()
										   {   StringBuilder oemInfo = new StringBuilder(50);
											   uint SPI_GETOEMINFO = 258;
											   if (SystemParametersInfo4Strings(SPI_GETOEMINFO, (uint)oemInfo.Capacity, oemInfo, 0) == 0)
												   throw new Exception("Error getting OEM info.");
											 return Equals(oemInfo.ToString(), "Microsoft DeviceEmulator");
										   }

الكود يعتمد على دالة خارجيةSystemParametersInfo4Strings Coredll.dllمعرفة في المكتبة الديناميكية. هذه المكتبة الديناميكية كما يوحي إسمحها تعتبر القلب النابض للجهاز وتظم أغلب الدوال الرئيسية

مستوى البطارية

نعود مجددا للمكتبة لكن في هذه المرة للحصول على مستوى البطارية. طبعا بطارية الجهاز وفي المحاكي لاتوجد بطارية

		[DllImport("coredll")]
									 public static extern uint GetSystemPowerStatusEx(SYSTEM_POWER_STATUS_EX lpSystemPowerStatus, bool fUpdate);

									 public class SYSTEM_POWER_STATUS_EX
									 {
										 public byte ACLineStatus;
										 public byte BatteryFlag;
										 public byte BatteryLifePercent;
										 public byte Reserved1;
										 public uint BatteryLifeTime;
										 public uint BatteryFullLifeTime;
										 public byte Reserved2;
										 public byte BackupBatteryFlag;
										 public byte BackupBatteryLifePercent;
										 public byte Reserved3;
										 public uint BackupBatteryLifeTime;
										 public uint BackupBatteryFullLifeTime;
									 }
									static public string getBatterylevel()
									 {
										 SYSTEM_POWER_STATUS_EX PilDurum = new SYSTEM_POWER_STATUS_EX();
										 int BatLev = 0;
										 if (GetSystemPowerStatusEx(PilDurum, true) == 1)
										 { BatLev = PilDurum.BatteryLifePercent; }
										 return BatLev.ToString() + "%";
									 }

تفاصيل حول الذاكرة

بما أننا تحدثنا على المكتبة , سنواصل إستغلالها للحصول على تفاصيل حول ذاكرة حاسوب الكف

  public struct MEMORYSTATUS 
						   {  public uint Length; 
							  public uint MemoryLoad; 
							  public uint TotalPhys; 
							  public uint AvailPhys; 
							  public uint TotalPageFile; 
							  public uint AvailPageFile; 
							  public uint TotalVirtual; 
							  public uint AvailVirtual; 
						   }
						   [DllImport("CoreDll.Dll")]
						   public static extern int GlobalMemoryStatus(ref MEMORYSTATUS ms);
						   [DllImport("CoreDll.Dll")]
						   public static extern int GetSystemMemoryDivision(ref uint lpdwStorePages, ref uint ldpwRamPages, ref uint ldpwPageSize);

						 ... 
						   uint storePages = 0;
							uint ramPages = 0;
							uint pageSize = 0;
							int res = GetSystemMemoryDivision(ref storePages, ref ramPages, ref pageSize);
							MEMORYSTATUS MM_Status = new MEMORYSTATUS();
							GlobalMemoryStatus(ref MM_Status);
						 ...

خاصية اللمس لشاشة الجهاز

هذه المعطيات تمكن من التفقد ما إن كانت شاشة الجهاز تعمل باللمس أم لا. لم نستغني بعد على المكتبةcoredll.dll وقمت بإضافة مجالين إضافيين

Microsoft.Win32 للتعامل مع Registryوالبحث ما إن كانت المكتبةtouch.dll متوفرة أم لا. ولذلك البحث نحتاج المجالSystem.IO .للتعامل مع مجلدات نظام التشغيل وتحديد المسارات.

post-91400-1187291116_thumb.jpg

الصورة رقم 17: مسار المكتبة Touch.dll


public static string GetSpecialFolder(SpecialFolders specialFolder)
{ StringBuilder path = new StringBuilder(260);
if (SHGetSpecialFolderPath(IntPtr.Zero, path, (int)specialFolder, 0) == 0)
throw new Exception("Error getting Windows path.");
return path.ToString();
}

[DllImport("Coredll.dll")]
static extern int SHGetSpecialFolderPath(IntPtr hwndOwner, StringBuilder lpszPath, int nFolder, int fCreate);

public enum SpecialFolders : int
{ CSIDL_WINDOWS = 0x0024, }

public static bool IsEmulator()
{return Equals(GetOemInfo(),"Microsoft DeviceEmulator");}

public static bool IsSmartphone()
{
uint SPI_GETPLATFORMTYPE = 257; // this is used elsewhere for Smartphone/PocketPC detection

StringBuilder platformType = new StringBuilder(50);
if (SystemParametersInfo4Strings((uint)SPI_GETPLATFORMTYPE,
(uint)platformType.Capacity, platformType, 0) == 0)
throw new Exception("Error getting platform type.");
return Equals(platformType.ToString(), "SmartPhone");


}
// Main method
public static bool IsTouchScreen()
{
string driverFileName = Registry.GetValue(@"HKEY_LOCAL_MACHINE\Hardware\DeviceMap\Touch",
"DriverName", "touch.dll").ToString();
string windowsFolder = GetSpecialFolder(SpecialFolders.CSIDL_WINDOWS);
string driverPath = Path.Combine(windowsFolder, driverFileName);
bool driverExists = File.Exists(driverPath);

return
driverExists && // Windows Mobile 5.0 Smartphone emulator and earlier has a driver, but no touch screen.
!(IsSmartphone() && IsEmulator() && Environment.OSVersion.Version.Major < 6);
}
	 // To browse the registry files

معطيات إضافية حول الهاتف ومستعمله

المعرف العالمي للجهاز النقال ( International Mobile Equipment Identity ( IMEI

تتابع رقمي من 15-خانة يتم اسناده الى الجهاز النقال في طور التصنيع (رقم فريد لكل جهاز )

في كل شبكة GSM يوجد قسم يسمى ( Equipment Identity Register (EIR وهو قاعدة بيانات تخزن قائمة بأرقام IMEI للأجهزة الجوالة المرخصة على الشبكة حيث ان هذا المعرف يجري تعريفه في EIR بأنه غير مرخص اذا بلغ ان الجهاز مسروق أو لأسباب أمنية .

المعرف العالمي للمشترك المتنقل ( [International Mobile Subscriber Identity ( IMSI

تتابع رقمي من 15-خانة مخزن في بطاقة الSIM يمثل رقم الهاتف وهو مهم في عملية الارسال والاستقبال الراديوي حيث يتم ربطه بالاشارة الحاملة الخاصة بالمستخدم حيث يتعرف النظام الى المشتركين عبر هذا المعرف .

ومعطيات أخرى مثل manufacture, model, revision

  public void details()
				 {
					 IntPtr hLine;
					 int dwNumDev;
					 int num1 = 0x20000;
					 LINEINITIALIZEEXPARAMS lineInitializeParams = new LINEINITIALIZEEXPARAMS();
					 lineInitializeParams.dwTotalSize = (uint)Marshal.SizeOf(lineInitializeParams);
					 lineInitializeParams.dwNeededSize = lineInitializeParams.dwTotalSize;
					 lineInitializeParams.dwOptions = 2;
					 lineInitializeParams.hEvent = IntPtr.Zero;
					 lineInitializeParams.hCompletionPort = IntPtr.Zero;

					 // lineInitializeEx
					 int result = Tapi.lineInitializeEx(out hLine, IntPtr.Zero, IntPtr.Zero, null, out dwNumDev, ref num1, ref lineInitializeParams);

					 if (result != 0)
					 {
						 MessageBox.Show(string.Format("lineInitializeEx failed!\n\nError Code:{0}", result.ToString()));
						 this.Close();
						 return;
					 }

					 // lineNegotiateAPIVerison
					 int version;
					 int dwAPIVersionLow = 0x10004;
					 int dwAPIVersionHigh = 0x20000;
					 LINEEXTENSIONID lineExtensionID;
					 result = Tapi.lineNegotiateAPIVersion(hLine, 0, dwAPIVersionLow, dwAPIVersionHigh, out version, out lineExtensionID);
					 // navigation failed
					 if (result != 0)
					 {
						 MessageBox.Show(string.Format("lineNegotiateAPIVersion failed!\n\nError Code: {0}", result.ToString()));
						 this.Close();
						 return;
					 }

					 // lineOpen
					 IntPtr hLine2 = IntPtr.Zero;
					 result = Tapi.lineOpen(hLine, 0, out hLine2, version, 0, IntPtr.Zero, 0x00000002, 0x00000004, IntPtr.Zero);
					 // lineOpen failed
					 if (result != 0)
					 {
						 MessageBox.Show(string.Format("lineNegotiateAPIVersion failed!\n\nError Code: {0}", result.ToString()));
						 this.Close();
						 return;
					 }

					 // lineGetGeneralInfo
					 int structSize = Marshal.SizeOf(new LINEGENERALINFO());
					 byte[] bytes = new byte[structSize];
					 byte[] tmpBytes = BitConverter.GetBytes(structSize);

					 for (int index = 0; index < tmpBytes.Length; index++)
					 { bytes[index] = tmpBytes[index]; }

					 // make initial query to retrieve necessary size
					 result = Tapi.lineGetGeneralInfo(hLine2, bytes);

					 // get the needed size
					 int neededSize = BitConverter.ToInt32(bytes, 4);

					 // resize the array
					 bytes = new byte[neededSize];

					 // write out the new allocated size to the byte stream
					 tmpBytes = BitConverter.GetBytes(neededSize);
					 for (int index = 0; index < tmpBytes.Length; index++)
					 { bytes[index] = tmpBytes[index]; }

					 // fetch the information with properly size buffer
					 result = Tapi.lineGetGeneralInfo(hLine2, bytes);

					 if (result != 0)
					 {
						 MessageBox.Show(Marshal.GetLastWin32Error().ToString());
						 this.Close();
						 return;
					 }

					 int size;
					 int offset;
					 // Now all the required information are stored in the variable "bytes"
					 //  which we well have to parse.

					 // manufacture
					 size = BitConverter.ToInt32(bytes, 12);
					 offset = BitConverter.ToInt32(bytes, 16);
					 manufacture = Encoding.Unicode.GetString(bytes, offset, size);
					 manufacture = manufacture.Substring(0, manufacture.IndexOf(''));

					 // model
					 size = BitConverter.ToInt32(bytes, 20);
					 offset = BitConverter.ToInt32(bytes, 24);
					 model = Encoding.Unicode.GetString(bytes, offset, size);
					 model = model.Substring(0, model.IndexOf(''));

					 // revision
					 size = BitConverter.ToInt32(bytes, 28);
					 offset = BitConverter.ToInt32(bytes, 32);
					 revision = Encoding.Unicode.GetString(bytes, offset, size);
					 revision = revision.Substring(0, revision.IndexOf(''));

					 // serial number
					 size = BitConverter.ToInt32(bytes, 36);
					 offset = BitConverter.ToInt32(bytes, 40);
					 serialNumber = Encoding.Unicode.GetString(bytes, offset, size);
					 serialNumber = serialNumber.Substring(0, serialNumber.IndexOf(''));

					 // subscriber id
					 size = BitConverter.ToInt32(bytes, 44);
					 offset = BitConverter.ToInt32(bytes, 48);
					 subscriberID = Encoding.Unicode.GetString(bytes, offset, size);
					 subscriberID = subscriberID.Substring(0, subscriberID.IndexOf(''));

					 // lineClose for hLine2
					 Tapi.lineClose(hLine2);

					 // lineShutdown for hLine
					 Tapi.lineShutdown(hLine);

				 }

الآن وقد تم جمع مجموعة هامة من البيانات سنقوم بحفضها في ملف XML

		 public  void xmlSaver()
			   {  Cursor.Current = Cursors.WaitCursor;  // inform user implicitly to wait 
				  // Create the XmlDocument.
				   XmlDocument doc = new XmlDocument();
				   doc.LoadXml("<DeviceInfo><Arabteam2000WMTutorial>Ben_Laiid</Arabteam2000WMTutorial></DeviceInfo>");
				   // Add a price element.
				   foreach (string data in Store.Items)
				   {
					   string[] SubData = data.Split(':');
					   XmlElement newElem = doc.CreateElement(SubData[0].Replace(' ', '_'));/****/
					   newElem.InnerText = SubData[1];
					   doc.DocumentElement.AppendChild(newElem);
				   }
				   // Save the document to a file and auto-indent the output.
				   XmlTextWriter writer = new XmlTextWriter("data.xml", null);
				   writer.Formatting = Formatting.Indented;
				   doc.Save(writer);
				   Cursor.Current = Cursors.Default; 
				}

في السطر المرمز ب/****/ قمت بتغير تسميات البيانات كي تتناسب مع شروط معمارية xmlالتي تمنع الفراغات

يبقى الآن أن أبرز كيفية تطوير مكتبة ديناميكية لحاسوب الكف بلغة السي ولغة الآلة ثم حفظ هذه البيانات في قادة بيانات SQL

ArabteamWMTutorial.zip

#13

جزاك الله خيرا على هذه الجهود المباركة إن شاء الله , الموضوع يستحق الاهتمام وأنا متابع

أولا -- لست أرى السعادة جمع مال ** ولكن التقي هو السعيد

ثانيا-- وإن ضاق رزق اليوم فاصبر إلى غد *** عسى نكبات الدهر عنك تزول

ثالثا-- أصون عرضي بمالي لا أدنسه *** لا بارك الله بعد العرض بالمال

وأخيرا -- قال تعالى ( يوم لا ينفع مال ولا بنون إلا من أتى الله بقلب سليم )

#14

أخي العزيز Ben_Laiid أشكرك على هذا المجهود الرائع

بصراحة أنا منذ زمن وأنا أبحث في برمجة الهواتف

وجزاك الله خير وأكثر الله من أمثالك

أنا قرأت في أحد مشاركاتك أن البرمجة بـ الدوت نت لا تدعمها أجهزة الموتورولا ولا الأجهزة التي تشتغل على نظام التشغيل السمبيان ( نوكيا مثلاً )

هل هذا يعني أن هذه الدورة لا تشمل برمجة هواتف النوكيا ؟

وإذا كان ذلك صحيحاً هل هنالك من طريقة أخرى ( مثلاً برمجة برامج بالدوت نت لأجهزة النوكيا 6680 ، N70 , . . . . إلخ )

تحياتي لك

تم تعديل هذه المشاركة بواسطة f-a-l-c-o-n في 28 سبتمبر 2007 في 04:51

#15

السلام عليكم

اقتباس
بصراحة أنا منذ زمن وأنا أبحث في برمجة الهواتف

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

اقتباس
أنا قرأت في أحد مشاركاتك أن البرمجة بـ الدوت نت لا تدعمها أجهزة الموتورولا ولا الأجهزة التي تشتغل على نظام التشغيل السمبيان ( نوكيا مثلاً )

أجل لا تدعم ولكن هناك حل وهو الان برمج سيمبيان بلغات الدوت نت . لم أجرب ذلك

هناك هواتف موطورولا تدعم الدوت نت بشكل مباشر

#16

هل يمكننا تشغيل ويندوز موبايل على فيجوال بي سي

#17

السلام عليكــم ورحمـة الله وبركاتــة ،،

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

المهم أنه مطلوب مني عمل تطبيق ألة حاسبة للجوال لنظام أندرويد و تبغى الصراحة و الله ماني عارف من فين أبدأ ,,

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

شاااااااااااااااكر لكم أخوكم

مبتعث إلى أستراليا

#18

السلام عليكــم ورحمـة الله وبركاتــة ،،

جهد مشكور عليه .. و متابعين للدورة حبة حبة

#19

السلام عليكم ورحته الله وبركاته

شكرا لتقديم هذه المعلومات :lol:

#20

السلام عليكــم ورحمـة الله وبركاتــه ،

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

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

اذا كان لديك المزيد الرجاء لا تبخل بيهة على اخوتك

#21

السلام عليكم

يعطيك العافية اخي الكريم ابن العيد

اريد ان استفسر عن جهاز dell axim x50v

هل يمكن ازالة و يندوز موبايل عنه و هي 5 و فرمتته بالكامل و اعادة تنصيب ويندوز موبايل 6

الفكرة اني اريد فرمتته بالكامل كما في الكمبيوتر العادي فهل هذا الشء صحيح؟

و السبب انه في اغلب الاحيان (يعلق) مثلا و انا اتصفح بالنت و اذا ما اخرجت البطارية و اعدتها يبقى متوقف على الشاشة الزرقاء المكتوب عليها ديل

شكرا

#22

كل عام وانتم بخير

الله يزيدك علم وكرم في العلم اخي

عندي سوال لو تسمح

ازاي اعمل zoom

علي image

في الموبيل picturebox

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