تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
التأكد ان المستخدم اعاد تشغيل الجهاز
#1
السلام عليكم ورحمة الله
اريد ان اتاكد ان المستخدم قام باعادة تشغيل الكمبيوتر
وجزاكم الله خيرا
الرد }}}}
تم الشكر بواسطة:
#2
السلام عليكم...

يستعمل النظام Windows ما يسمى بجدول الذرات العام (Global Atom Table) لتخزين البيانات في الذاكرة كواحد من طرق تبادل البيانات بين التطبيقات (DDE). و لكن نستطيع أن نستفيد من ذلك في إنجاز المطلوب في السؤال.

يمكنك استعمال دوال API لوضع نص (String) في ذلك الجدول، و سيبقى ذلك النص هناك إلى أن يتم إيقاف أو إعادة تشغيل الحاسوب (أو طبعاً تزيله أنت باستعمال الدالة المخصصة لذلك).

بعد وضع النص يمكنك اختبار ما إذا مازال موجوداً في الجدول أم لا.

1. ضع التصريحات التالية في بداية الكود - التصريح الأخير GlobalDeleteAtom لا تحتاجه إذا لم تكن تريد حذف النص بالكود:

كود :
Private Declare Function GlobalAddAtom Lib "kernel32.dll" Alias "GlobalAddAtomA" (ByVal lpString As String) As Integer
Private Declare Function GlobalGetAtomName Lib "kernel32.dll" Alias "GlobalGetAtomNameA" (ByVal nAtom As Integer, ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Declare Function GlobalFindAtom Lib "kernel32.dll" Alias "GlobalFindAtomA" (ByVal lpString As String) As Integer
' Private Declare Function GlobalDeleteAtom Lib "kernel32.dll" (ByVal nAtom As Integer) As Integer

2. لإضافة نص إلى الجدول:

كود :
GlobalAddAtom("computer not restarted")

3. لاختبار ما إذا كان النص مازال موجوداً في الجدول (لم تتم إعادة التشغيل):

كود :
Dim s As String
        Dim lRet As Integer
        Const MAX_ATOM = 255

        iAtom = GlobalFindAtom("computer not restarted")

        s = Space$(MAX_ATOM)
        lRet = GlobalGetAtomName(iAtom, s, Len(s))
        s = s.Substring(0, lRet)
        If s = "computer not restarted" Then
            MsgBox("لم تتم إعادة تشغيل الحاسوب")
        Else
            MsgBox("كلو تمام")
        End If

* طبعاً بدل النص "computer not restarted" يمكنك أن تضع أي نص آخر بشرط أن لا يتجاوز طوله 255 رمزاً. و يستحسن أن يكون نصاً غريباً من المستبعد جداً أن يستخدمه برنامج آخر.

نرجو الاستفادة و السلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
الرد }}}}
#3
السلام عليكم

ما شاء الله اخى ناجي افتقدنا مثل هذه الافكار من زمن

معلش لى بعض الاسئلة لو تفضلت او تفضل احد الاخوة بالاجابة عليها حتي اتعلم

1 - لماذا قمت بعمل ثابت Const يحمل عدد الاحرف الـ 255 لماذا لم تمرر له العدد مباشر فى الدالة

2 - ما فائدة علامة الـ $

3 - هل يستطيع احد مراقبة برنامجي ويعرف القيم التى اخذنها ويقوم بحذفها

وجزاك الله خيرا
الرد }}}}
تم الشكر بواسطة:
#4
السلام عليكم...

إجابة 1 و 2: العتب على العادة (التعود) ! فمعظم خبرتي البرمجية اكتسبتها من خلال العمل على VB6.

= وجود علامة الدولار في نهاية اسم الدالة يعني أنها ستعيد String و ليس Variant (فيكون الأمر أسرع قليلاً و أقل استهلاكاً للذاكرة). و رغم أن VB.NET مازالت تدعم استعمال العلامة $ مع بعض الدوال (مثل الدالة $Space) فإن ذلك غير ضروري (حتى إذا حذفت العلامة فالدالة ستعيد String).

= بالطبع يمكنك تمرير العدد مياشرة إلى الدالة، لكنني شخصياً لا أحب استعمال ما يسمى بالأعداد السحرية (Magic Numbers) و هي الأعداد التي لا تعرف معناها إلا إذا سألت عنها! أما إذا عرفتها كثوابت فغالباً اسم الثابت يدل على المعنى أو الغرض المستعملة من أجله القيمة - ربما هذا ليس مهماً في هذا المثال القصير، لكنه يصبح مساعداً جداً عند العمل في برامج كبيرة ذات أكواد متعددة، حيث يصبح تذكر أسماء الثوابت أسهل من تذكر الأعداد، فمثلاً إذا استعملت الدالة ShowWindow لعرض نافذة فإني أستطيع أن أتذكر بسهولة الثابت SW_MAXIMIZE لعرضها مكبرة مع أني لا أتذكر قيمته.

إجابة 3: الجدول Global Atom Table هو جدول عام يمكن لكل البرامج الوصول إليه. لكن لا يوجد في دوال API دالة لمسح محتوياته أو قراءة كافة محتوياته. فالدوال المتوفرة للتعامل مع هذا الجدول هي:

= GlobalAddAtom لإضافة نص إلى الجدول و الحصول على رقم تعريف ذلك النص.
= GlobalFindAtom للبحث عن نص في الجدول و الحصول على رقم تعريف ذلك النص (أو صفر في حالة عدم وجود النص).
= GlobalGetAtomName للحصول على نص بمعلومية رقم تعريفه.
= GlobalDeleteAtom لحذف نص من الجدول بمعلومية رقم تعريفه.

و لا أعلم شيئاً غير ذلك حول هذا الجدول.

نرجو الاستفادة و السلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
الرد }}}}
تم الشكر بواسطة: kslawy
#5
السلام عليكم ورحمة الله
جزاك الله خيرا اخى ناجى
توضيح وشرح رائع للغاية
زادك الله علما ونفع بك
وجعله فى موازين حسناتك

لى سؤال اخر
الدالة GlobalGetAtomName تعود بـ Len
لماذا تخزنها فى Integer

اليس هذا ربما يحدث خطاء
الرد }}}}
تم الشكر بواسطة:
#6
السلام عليكم...

آه المعذرة! يجب تعديل تصريح الدالة GlobalGetAtomName (في جملة Declare) بحيث يصبح نوع الدالة Integer و كذلك نوع البارامتر nSize (التصريحات أخذتها من برنامج قديم مكتوب بـ VB6 حيث Long تعني Integer في VB.NET).

سلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
الرد }}}}
تم الشكر بواسطة:
#7
السلام عليكم
اخى ناجى الله عليك
طيب سؤال
هل المعطيات هذه انتا بتتحم فيها ولا هي مقيدة بمتغيرات الدالة الاساسية فى api
يعنى المتغير انتجر اقدر اخليه دبل
الكلام بشكل عام فى التعامل مع دوال api
لا اقصد المثال الحالي
الرد }}}}
تم الشكر بواسطة:
#8
السلام عليكم
اريد ان اعرف طريقة استخدام دالة الحذف
وجزاكم الله خيرا
الرد }}}}
تم الشكر بواسطة:
#9
السلام عليكم...

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

أما إذا لم يكن لديك رقم التعريف و لديك النص فإننا نستعمل الدالة GlobalFindAtom للبحث عن النص في الجدول و الحصول على رقم تعريفه، و الذي بدوره نمرره للدالة GlobalDeleteAtom لحذفه:
كود :
Dim iAtom As Integer

iAtom = GlobalFindAtom("computer not restarted")
GlobalDeleteAtom(iAtom)

نرجو الاستفادة و السلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
الرد }}}}
تم الشكر بواسطة:
#10
السلام عليكم ورحمة الله
جزاك الله خيرا اخي ناجي
وجعله الله في موازين حسناتك
وبارك لك في علمك
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  احتاج كود يظهر اسم المستخدم في الواجهات ramimohammed 0 6 منذ 56 دقيقة مضت
آخر رد: ramimohammed
  [سؤال] كيف اجعل زر او نافذة تساوى صورة ليست فى الريسورس ولكن على الجهاز؟؟؟ Mohamed371 3 133 24-03-17, 10:21 AM
آخر رد: أسامة السالمي
  [سؤال] أريد كود لتشغيل صوت مخصص عند تشغيل المشروع أو البرنامج محمد سعيد عبد الظاهر 2 101 17-03-17, 06:13 PM
آخر رد: محمد سعيد عبد الظاهر
  [سؤال] مشكلة في تشغيل البرنامج من الفيجوال بيسك عزوز هزازي 1 81 16-03-17, 05:07 PM
آخر رد: Amir_alzubidy
  [سؤال] خطأ اثناء تشغيل البروجكت VB.Net Amir_alzubidy 13 327 12-03-17, 12:56 PM
آخر رد: Amir_alzubidy
  مشكلة في اجبار المستخدم ان يحفظ صورة في قاعدة بيانات shado1796 96 6,740 25-02-17, 04:03 AM
آخر رد: khodor1985
  طريقة ظهور اسم المستخدم في جميع صفحات الويب عباسة 0 106 14-02-17, 03:17 PM
آخر رد: عباسة
  منع المستخدم من التعديل على أكثر من معلومة في نفس الوقت اليوم مبتدئة وغداً محترفة 5 137 07-02-17, 08:35 PM
آخر رد: Amir_alzubidy
Exclamation [سؤال] التاكيد من موجد برامج قبل تشغيل البرنامج MOONMICROSYSTEM 1 200 22-01-17, 04:54 PM
آخر رد: thevirus
  ياشباب ارجو المساعده رنامج لا جلب اي قاعده بيانات في الجهاز اكسس او اكسل وعرضها ammaraliali 5 226 15-01-17, 06:11 PM
آخر رد: khodor1985

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم