الوظيفة التي أريد تحقيقها هي استدعاء البرنامج عندما لا يكون هناك إدخال من لوحة المفاتيح أو حركة الماوس أو إجراء النقر. أول ما يتبادر إلى الذهن هو استخدام الخطاف HOOK للحصول على إجراءات لوحة المفاتيح أو الماوس، واستدعاء البرنامج إذا لم يكن هناك أي إجراء. نتيجة محاولاتي هي أن هناك دائمًا مشكلة عند التثبيت والربط.
لاحقًا، اعتقدت أن شاشة التوقف الخاصة بنظام Windows تدخل إلى شاشة التوقف عندما لا تتحرك لوحة المفاتيح والماوس، لذلك غيرت رأيي وأردت جعل البرنامج بهذا الشكل عندما لا تتحرك لوحة المفاتيح والماوس يدخل إلى شاشة التوقف، ثم يكتشف ما إذا كان النظام يقوم بتشغيل شاشة التوقف أم لا، ويتم استدعاء البرنامج إذا كان قيد التشغيل. تستخدم هذه الطريقة شاشة التوقف كوسيط وتترك مهمة اكتشاف حركات لوحة المفاتيح والماوس لشاشة التوقف. يمكن لـ SystemParametersInfo تنفيذ وظائف للحصول على معلومات شاشة التوقف. الرمز المرجعي هو كما يلي:
'استدعاءات واجهة برمجة التطبيقات والتعريفات الشائعة: الإعلان الخاص عن وظيفة SystemParametersInfo _ Lib "user32" _ الاسم المستعار "SystemParametersInfoA" _ (ByVal uiAction As Long، _ ByVal uiParam As Long، _ pvParam As Any، _ ByVal fWInIni As Long) كخاص منطقي Const SPI_GETSCREENSAVEACTIVE بطول = &H10 'ثابت لما إذا كانت شاشة التوقف ممكّنةPrivate Const SPI_GETSCREENSAVERRUNNING As Long = &H72 'ثابت لما إذا كانت شاشة التوقف قيد التشغيلPrivate Sub Timer1_Timer() Dim bRunning As Boolean 'متغير لمعرفة ما إذا كانت شاشة التوقف قيد التشغيل، بالطبع يمكنك تحديد المتغير العام SystemParametersInfo SPI_GETSCREENSAVERRUNNING، 0، تشغيل، خطأ 'Call API، bRunning يُرجع حالة تشغيل شاشة التوقف Debug.Print Time؛ "Screen saver Running = "; bRunning 'عرض توضيحي: طباعة معلومات حول ما إذا كانت شاشة التوقف قيد التشغيل End Sub' بالإضافة إلى ذلك، للتحقق مما إذا كانت شاشة التوقف ممكّنة أم لا ، يمكنك أيضًا استخدام الطريقة التالية: SystemParametersInfo SPI_GETSCREENSAVEACTIVE, 0 , bActive, False 'bActive هي القيمة المرجعة (النوع المنطقي)
لكنني لا أعرف لماذا لا أزال أواجه مشكلات في تصحيح الأخطاء ضمن WIN7، مما يطالب SystemParametersInfo SPI_GETSCREENSAVERRUNNING, 0, bRunning, False
نوع bRunning غير صحيح ولا يمكن التخلي عنه إلا.
وأخيرًا، الحل النهائي هو استخدام الدالة GetLastInputInfo للحصول على وقت الخمول للنظام، ويكون الرمز المرجعي كما يلي:
الخيار ExplicitPrivate أعلن عن الدالة GetLastInputInfo Lib "user32" (plii كـ LASTINPUTINFO) كـ BooleanPrivate أعلن عن الدالة GetTickCount Lib "kernel32" () كنوع LongPrivate LASTINPUTINFO cbSize بطول dwTime كنوع LongEnd Type Private Sub Form_Load() Timer1.Interval = 1000 End Sub Private Sub Timer1_Timer() Dim lii As LASTINPUTINFO lii.cbSize = Len(lii) إذا كان GetLastInputInfo(lii) ثم إذا (GetTickCount - lii.dwTime) / 60000 >= 15 ثم اتصل بـ MsgBox("لأن الجهاز لم يعمل لمدة 15 دقيقة، إذا 3 دقائق إذا لم تكن هناك استجابة، فسيضطر النظام إلى إيقاف التشغيل"، vbYesNo + vbExclamation + vbDefaultButton2، "prompt") End If End IfEnd Subما ورد أعلاه هو محتوى هذه المقالة بالكامل، وآمل أن تنال إعجابكم جميعًا.