كيفية اكتشاف المستخدم غير نشط
-
19-09-2019 - |
سؤال
كيفية اكتشاف مستخدم غير نشط (IDLE) في تطبيق Windows؟ أرغب في إيقاف تشغيل التطبيق عندما لم يكن هناك أي إدخال (لوحة المفاتيح أو الماوس) من المستخدم لفترة معينة من الوقت.
المحلول
لتتبع وقت الخمول للمستخدم يمكنك ربط لوحة المفاتيح ونشاط الماوس. ملاحظة، ومع ذلك، فإن تثبيت خطاف رسالة على مستوى النظام هو شيء غازي للغاية يجب القيام به ويجب تجنبه إن أمكن، لأنه سيطلب تحميل DLL الخطاف الخاص بك في جميع العمليات.
حل آخر هو استخدام GetLastInputInfo
وظيفة API (إذا كان التطبيق الخاص بك يعمل على آلات Win2000 (والأكثر)).GetLastInputInfo
يسترجع الوقت (في مللي ثانية) من آخر حدث الإدخال (عند استلام آخر نشاط مستخدم تم اكتشافه، سواء كان ذلك من لوحة المفاتيح أو الماوس).
إليك مثال بسيط. ال SecondsIdle
تقوم الدالة بإرجاع عدد من المرتبة الثانية دون أي نشاط مستخدم (يسمى في OnTimer
حدث أ TTimer
عنصر).
~~~~~~~~~~~~~~~~~~~~~~~~~
function SecondsIdle: DWord;
var
liInfo: TLastInputInfo;
begin
liInfo.cbSize := SizeOf(TLastInputInfo) ;
GetLastInputInfo(liInfo) ;
Result := (GetTickCount - liInfo.dwTime) DIV 1000;
end;
procedure TForm1.Timer1Timer(Sender: TObject) ;
begin
Caption := Format('System IDLE last %d seconds', [SecondsIdle]) ;
end;
نصائح أخرى
قد ترغب في رؤية الإجابة على هذا السؤال: كيف نقول عندما يكون Windows غير نشط [1 هو نفس السؤال هو الحل المقترح هو استخدام GetLastInputInfo
[2] API Call.
يشرح هذا المنشور بعض الجوانب أيضا: (مشروع التعليمات البرمجية) كيفية التحقق من عدم نشاط المستخدم مع وبدون استدعاء منصة في C # [3
[1] كيفية معرفة متى يعمل Windows غير نشط
[2] http://msdn.microsoft.com/en-us/library/ms646302٪28vs.85٪29.aspx.
[3] http://www.codeproject.com/kb/cs/uim.aspx.
سوف طلبك الحصول على WM_SYSCOMMAND
رسالة مع SC_SCREENSAVE
كمعرف أمر عندما يكون شاشة التوقف على وشك الانطلاق. هل هذه تفعل؟ هناك أيضا SC_MONITORPOWER
معرف الأمر عندما تكون الشاشة على وشك فارغة (أيضا رسالة WM_SYSCOMMAND).
تحرير: النظر في التعليقات، يبدو أنك لا تهتم بما إذا كان المستعمل هو عدم وجود، ولكن ما إذا كان لديك تطبيق غير نشط.
هذا سهل. إذا تم التقليل من تطبيقك، فإن المستخدم لا يتفاعل معه. إذا كان تطبيقك ليس التطبيق المقدمة، فهذا هو مائع جيد أيضا.
يمكنك أيضا الانتباه إلى الرسائل في المضخة الخاصة بك لإشعار إذا كان هناك أي رسائل إدخال المستخدم إلى التطبيق الخاص بك، في C ++ إضافة رمز إلى المضخة تافهة، في دلفي يمكنك استخدام هوك wh_getmessage لمراقبة المضخة ربط في حلقة الرسالة التي تنفذ tabplication. أو getlastinputinfo.
هذا الثواني لا تعمل على الإطلاق. الطريقة هي استخدام ttimer جنبا إلى جنب مع المتغير الثاني الذي يعيد تعيينه في كل مرة يدخل المستخدم الماوس أو لوحة المفاتيح.