كيف اعرف ان المستخدم توقف عن العمل داخل البرنامج ؟
#1
السلام عليكم ورحمة الله وبركاته

حياكم الله يااحبائنا الكرام

كيف لي ان اعرف ان المستخدم توقف عن العمل داخل البرنامج ؟
نضرب مثال من الواقع :
عندما يتوقف المستخدم عن العمل على الجهاز مدة 5 دقائق مثلا يقوم الوندوز بتشغيل شاشة التوقف .
في امان الله
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#2
وعليكم السلام ورحمة الله وبركاته
إقتباس :كيف لي ان اعرف ان المستخدم توقف عن العمل داخل البرنامج ؟
العمل داخل البرنامج يعني: تحريك مؤشر الماوس أو العبث بلوح المفاتيح
غير ذلك المستخدم لا يستعمل البرنامج
لالتقاط حدث تحريك الماوس -> OnMouseMove
لالتقاط حدث ضغط المفاتيح -> OnKeyDown
مثال:
يمكن استخدام TTimer يتم تعطيله عند أحد الحدثين السابقين
يمكن جعل هذا الأخير يقوم بتفعيل TTimer آخر يقوم بأي مهمة
ضع Timer1, Timer2 ثم اضبط Interval للـ Timer1 على المدة التي تريد:
PHP كود :
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  
Y: Integer);
begin
  Timer1
.Enabled := False;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  SendMessage
(Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  Timer1
.Enabled := True;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  
Shift: TShiftState);
begin
  FormMouseMove
(Sender, [], 0, 0)
end; 
بالتوفيق Smile
الرد
#3
و عليكم السلام و رحمة الله و بركاته

1-
كيف لي ان اعرف ان المستخدم توقف عن العمل داخل البرنامج ؟
- ببساطة نراقب الـ CurrentThread , أو الثريد الحالي و هو للبروسس الشغال أو الـ Active
- لجلب Id للثريد الحالي , GetCurrentThreadId أو System.MainThreadID
PHP كود :
Caption:= ConCat('SystemThr :' , IntToStr(System.MainThreadID)
                 , 
' Or SystemThr :' + IntToStr(GetCurrentThreadId())); 
PHP كود :
procedure TForm1.tmr1Timer(Sender: TObject);
begin
 Label1
.Caption:= Format('%d',[
                  
GetWindowThreadProcessId(
                  
GetForegroundWindow ,nil)
                   And 
$FFFF]);
end; 
2- عندما يتوقف المستخدم عن العمل على الجهاز مدة 5 دقائق مثلا يقوم الوندوز بتشغيل شاشة التوقف ?
- يمكن عمل Timer أو Thread أو Object , لتحرير شاشة التوقف !
PHP كود :
SendMessage(Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 1); 
- راجع WM_SYSCOMMAND , بالإظافة إلى خيارات أخرى SC_MONITORPOWER :laugh: .
بالتوفيق,,
I'M Fly Like A G6

الرد
#4
بارك الله فيكم وزادكم علما

بالتوفيق للجميع
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#5
السلام عليكم

هذا مثال وجدته في delphi.about.com
كود :
http://delphi.about.com/od/adptips2004/a/bltip1104_4.htm

باستخدام GetLastInputInfo

PHP كود :
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; 
الرد
#6
وعليكم السلام

بارك الله فيك استادنا الغالي shagrouni

روعة ممتاز جدا

في امان الله
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد


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


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