PDA

View Full Version : سوال: غیر فعال شدن برنامه در زمان مشخص



gohari244
دوشنبه 25 بهمن 1389, 06:37 صبح
سلام دوستان
با چه دستوری میشه کاری کرد که اگر کاربر بعد از زمان مشخصی مثلا 5 دقیقه با برنامه کار نکرد برنامه غیر فعال شود

محسن واژدی
دوشنبه 25 بهمن 1389, 07:52 صبح
سلام
میتونین این کار رو با یک تایمر ساده انجام دهید، ابتدا 5 دقیقه را به ثانیه تبدیل کنید که میشود (300=60*5)
بعد تایمر را بر روی 1000 میلی ثانیه تنظیم کرده دستورات زیر را در آ کپی کنین:


Private Sub Timer1_Timer()
Static tim%
tim%=tim%+1
if tim%>=300 then '300s=5min
MsgBox "Finished idle time..."
Timer1.Enabled=False
EndIf
End Sub

موفق باشید

REZADG
دوشنبه 25 بهمن 1389, 10:28 صبح
در تصحیح کد دوتمون هم میتونید یک مقدار در رجیستری و یا یک جایی دلخواه ذخیره کنید و هر بار اون رو بخونید

gohari244
دوشنبه 25 بهمن 1389, 10:58 صبح
ممنون دوستان عزیز
آره اینجوری کار می کنه ولی من اینو نمی خوام
در واقع من می خوام که اگه کاربر به مدت 5 دقیقه با برنامه کار نکرد اون موقه پیغام بده مثلاً هیچ کدوم از کلیدهای روی صفحه رو نزنه(مثل صفحه دسکتاپ که وقتی با هاش کار نمی کن بعد از زمان مشخصی غیر فعال میشه یا همون خواب می ره)
نمی دونم منظورم رو گرفتید یا نه امیدوارم بتونید کمک کنید

محسن واژدی
دوشنبه 25 بهمن 1389, 13:30 عصر
ممنون دوستان عزیز
آره اینجوری کار می کنه ولی من اینو نمی خوام
در واقع من می خوام که اگه کاربر به مدت 5 دقیقه با برنامه کار نکرد اون موقه پیغام بده مثلاً هیچ کدوم از کلیدهای روی صفحه رو نزنه(مثل صفحه دسکتاپ که وقتی با هاش کار نمی کن بعد از زمان مشخصی غیر فعال میشه یا همون خواب می ره)
نمی دونم منظورم رو گرفتید یا نه امیدوارم بتونید کمک کنید

در زیر دوتا سورس هست: یکیش یه ماژول هست که میتونه هر کلیدی رو در هرجای ویندوز که فشرده شد را بهتون گزارش بده و دومیش هم کلیدهای فشرده شده موس رو براتون گزارش میکنه؛ شما میتونین یه تایمر بزارین که اگه کلیدی در مدت زمان 5 دقیقه فشرده نشد برنامه standby یا در عمل دیگری رو انجام بدهد

موفق باشید

gohari244
دوشنبه 25 بهمن 1389, 15:38 عصر
کدش میشه بنویسید
اولی ارور میده
دومی هم نمیدونم چجوری میشه
لطفی بکنید و یک فایل تست خودتون درست کنید

محسن واژدی
دوشنبه 25 بهمن 1389, 16:01 عصر
کدش میشه بنویسید
اولی ارور میده
دومی هم نمیدونم چجوری میشه
لطفی بکنید و یک فایل تست خودتون درست کنید

با عرض معذرت اینجایی که بنده نشستم وی بی نداره وگرنه ویرایششون میکردم واستون :ناراحت:

lord_viper
دوشنبه 25 بهمن 1389, 16:58 عصر
سلام دوستان
با چه دستوری میشه کاری کرد که اگر کاربر بعد از زمان مشخصی مثلا 5 دقیقه با برنامه کار نکرد برنامه غیر فعال شود

با استفاده از کد زیر میتونین چک کنین اگه کاربر مدتی با برنامه کار نکرد و بقولی برنامه Idle شد



Private Type PLASTINPUTINFO
cbSize As Long
dwTime As Long
End Type

Private Declare Function GetLastInputInfo Lib "user32.dll" (ByRef plii As PLASTINPUTINFO) As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long

Option Explicit

Private Sub Form_Load()
' tmr = timer
tmr.Enabled = True
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
tmr.Enabled = False
End Sub

Private Sub tmr_Timer()
Dim plii As PLASTINPUTINFO

' Setup the size
plii.cbSize = Len(plii)

' Get the time of the last user input
GetLastInputInfo plii

' Display the idle time
' (last user input is the last ms of the input, not idle time...
' to get idle time, take the current tick count - the last input
' time)
' EX (for clarification): if last user input was at 2:00pm, and
' it's now 2:01, 60 seconds, or 60*1000 ms have elapsed
' (2:00 - 2:01 = :01 = 60sec, = 60*1000)

txt.Text = GetTickCount - plii.dwTime ' / 1000 for seconds
End Sub

gohari244
دوشنبه 25 بهمن 1389, 18:47 عصر
ممنون دوست عزیز کارت عالی بود
ولی تنها مشکلش اینه که اگه موس در تمام صفحه دسکتاب تکون بخوره تایمر از اول شروع می کنه اگه بتونید کاری کنید که فقط اگه تو صفحه برنامه تکون نخوره غیر فعال بشه کارتون واقعاً عالی تر میشه ممنون می شم اگه زود جواب بدید

محسن واژدی
سه شنبه 26 بهمن 1389, 09:26 صبح
چون میگین میخواین فقط اگه موقعیت موس از روی فرم برنامه تون تغییر کرد تایمر غیرفعال بشه نه رو کل زمینه میتونین این کار رو در رویداد MouseMove فرم برنامه تون انجام بدین
برای این کار:
1- داخل ماژول فرمتون کدهای زیر رو بریزین:

Dim oldX!,oldY!,IntervalToStandBy%2- داخل رویداد Form1_MouseMove کدهای زیر رو بریزین:

if X<>oldX or Y <> oldY then
oldX!=X
oldY!=Y
IntervalToStandBy=0

end if

3- و بالاخره داخل رویداد تایمر هم کدهای زیر رو بریزین:

Private Sub tmr_Timer()
IntervalToStandBy%=IntervalToStandBy%+1
if IntervalToStandBy%>300 then '300=5min
'STANDBY COMMANDS
endif

End Sub

موفق باشید