delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف اعرف ان المستخدم توقف عن العمل داخل البرنامج ؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله وبركاته

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

كيف لي ان اعرف ان المستخدم توقف عن العمل داخل البرنامج ؟
نضرب مثال من الواقع :
عندما يتوقف المستخدم عن العمل على الجهاز مدة 5 دقائق مثلا يقوم الوندوز بتشغيل شاشة التوقف .
في امان الله
وعليكم السلام ورحمة الله وبركاته
إقتباس :كيف لي ان اعرف ان المستخدم توقف عن العمل داخل البرنامج ؟
العمل داخل البرنامج يعني: تحريك مؤشر الماوس أو العبث بلوح المفاتيح
غير ذلك المستخدم لا يستعمل البرنامج
لالتقاط حدث تحريك الماوس -> 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
و عليكم السلام و رحمة الله و بركاته

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: .
بالتوفيق,,
بارك الله فيكم وزادكم علما

بالتوفيق للجميع
السلام عليكم

هذا مثال وجدته في 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; 
وعليكم السلام

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

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

في امان الله