delphi4arab منتديات دلفي للعرب
كيف اعرف ان المستخدم توقف عن العمل داخل البرنامج ؟ - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : كيف اعرف ان المستخدم توقف عن العمل داخل البرنامج ؟ (/showthread.php?tid=2277)



كيف اعرف ان المستخدم توقف عن العمل داخل البرنامج ؟ - abdelmalek - 08-08-2010

السلام عليكم ورحمة الله وبركاته

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

كيف لي ان اعرف ان المستخدم توقف عن العمل داخل البرنامج ؟
نضرب مثال من الواقع :
عندما يتوقف المستخدم عن العمل على الجهاز مدة 5 دقائق مثلا يقوم الوندوز بتشغيل شاشة التوقف .
في امان الله


كيف اعرف ان المستخدم توقف عن العمل داخل البرنامج ؟ - kachwahed - 08-08-2010

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



كيف اعرف ان المستخدم توقف عن العمل داخل البرنامج ؟ - TF6M - 08-08-2010

و عليكم السلام و رحمة الله و بركاته

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: .
بالتوفيق,,


كيف اعرف ان المستخدم توقف عن العمل داخل البرنامج ؟ - abdelmalek - 08-08-2010

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

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


كيف اعرف ان المستخدم توقف عن العمل داخل البرنامج ؟ - shagrouni - 08-08-2010

السلام عليكم

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



كيف اعرف ان المستخدم توقف عن العمل داخل البرنامج ؟ - abdelmalek - 08-08-2010

وعليكم السلام

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

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

في امان الله