01-11-13, 02:32 AM
السلام عليكم...
يستعمل النظام Windows ما يسمى بجدول الذرات العام (Global Atom Table) لتخزين البيانات في الذاكرة كواحد من طرق تبادل البيانات بين التطبيقات (DDE). و لكن نستطيع أن نستفيد من ذلك في إنجاز المطلوب في السؤال.
يمكنك استعمال دوال API لوضع نص (String) في ذلك الجدول، و سيبقى ذلك النص هناك إلى أن يتم إيقاف أو إعادة تشغيل الحاسوب (أو طبعاً تزيله أنت باستعمال الدالة المخصصة لذلك).
بعد وضع النص يمكنك اختبار ما إذا مازال موجوداً في الجدول أم لا.
1. ضع التصريحات التالية في بداية الكود - التصريح الأخير GlobalDeleteAtom لا تحتاجه إذا لم تكن تريد حذف النص بالكود:
2. لإضافة نص إلى الجدول:
3. لاختبار ما إذا كان النص مازال موجوداً في الجدول (لم تتم إعادة التشغيل):
* طبعاً بدل النص "computer not restarted" يمكنك أن تضع أي نص آخر بشرط أن لا يتجاوز طوله 255 رمزاً. و يستحسن أن يكون نصاً غريباً من المستبعد جداً أن يستخدمه برنامج آخر.
نرجو الاستفادة و السلام.
يستعمل النظام 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 Integer2. لإضافة نص إلى الجدول:
كود :
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 رمزاً. و يستحسن أن يكون نصاً غريباً من المستبعد جداً أن يستخدمه برنامج آخر.
نرجو الاستفادة و السلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
