سؤال

كيفية اكتشاف مستخدم غير نشط (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;

http://delphi.about.com/od/adptips2004/a/bltip1104_4.htm.

نصائح أخرى

سوف طلبك الحصول على WM_SYSCOMMAND رسالة مع SC_SCREENSAVE كمعرف أمر عندما يكون شاشة التوقف على وشك الانطلاق. هل هذه تفعل؟ هناك أيضا SC_MONITORPOWER معرف الأمر عندما تكون الشاشة على وشك فارغة (أيضا رسالة WM_SYSCOMMAND).

تحرير: النظر في التعليقات، يبدو أنك لا تهتم بما إذا كان المستعمل هو عدم وجود، ولكن ما إذا كان لديك تطبيق غير نشط.

هذا سهل. إذا تم التقليل من تطبيقك، فإن المستخدم لا يتفاعل معه. إذا كان تطبيقك ليس التطبيق المقدمة، فهذا هو مائع جيد أيضا.

يمكنك أيضا الانتباه إلى الرسائل في المضخة الخاصة بك لإشعار إذا كان هناك أي رسائل إدخال المستخدم إلى التطبيق الخاص بك، في C ++ إضافة رمز إلى المضخة تافهة، في دلفي يمكنك استخدام هوك wh_getmessage لمراقبة المضخة ربط في حلقة الرسالة التي تنفذ tabplication. أو getlastinputinfo.

هذا الثواني لا تعمل على الإطلاق. الطريقة هي استخدام ttimer جنبا إلى جنب مع المتغير الثاني الذي يعيد تعيينه في كل مرة يدخل المستخدم الماوس أو لوحة المفاتيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top