تقييم الموضوع :
  • 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
السلام عليكم ورحمة الله
جزاك الله خيرا اخي ناجي
وجعله الله في موازين حسناتك
وبارك لك في علمك
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] معرفة بيانات الجهاز محمد بوقزاحة 1 328 21-02-24, 11:44 PM
آخر رد: AHMED213
  [VB.NET] ارغب في كود إلزام المستخدم ادخال الأرقام محصور بعددين loay775 2 210 18-01-24, 05:02 PM
آخر رد: loay775
  [VB.NET] معرفة بيانات الجهاز محمد بوقزاحة 7 678 12-01-24, 07:31 PM
آخر رد: Kamil
  [سؤال] كيفية تشغيل ملف باتش دون ظهور "نافذةالـ Consol "؟ AmeenRashed 9 685 14-12-23, 12:07 PM
آخر رد: asmarsou
  غير مسجل على الجهاز المحلي 'Microsoft.ace.oledb.12.0' ان الموفر Adel27213 2 409 30-11-23, 09:19 PM
آخر رد: Adel27213
  تشغيل الماكرو عن طريق اكواد الفجوال نيمو 0 271 03-11-23, 11:14 AM
آخر رد: نيمو
  [VB.NET] أين الخطأ فى تشغيل هذا التطبيق AhmedEissa 0 242 27-10-23, 04:05 PM
آخر رد: AhmedEissa
  [كود] ما الخطأ فى الـ Functions المستخدم فى vb.net 2010 AhmedEissa 9 509 21-10-23, 11:44 PM
آخر رد: Ahmed5
  إجبار المستخدم على إدخال عدد معين من الأرقام Ahmed.vb 6 662 20-10-23, 10:25 AM
آخر رد: atefkhalf2004
  [VB.NET] كيف اقوم بمنع المستخدم من استخدام الكيبورد وخصوصا مفتاح Print screen Ameenh 0 237 07-10-23, 10:45 PM
آخر رد: Ameenh

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


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