PDA

View Full Version : تشخیص عدم کار با رایانه



alipoor2009
جمعه 07 تیر 1392, 01:47 صبح
سلام - تو برنامم می خوام کاری کنم که اگه کاربر 10 دقیقه با سیستم کار نکرد ، برنامه بره تو فرم ورود و رمزشو ازش بخواد؟ دقیقا مثل اسکرین سیور

mehran901
جمعه 07 تیر 1392, 02:37 صبح
چک کنین با ای پی آی اگه مختصات موس تغییر نکرد کلید هم زده نشد بعد 10 مین بره تو اسکرین

alipoor2009
جمعه 07 تیر 1392, 03:28 صبح
منظورتون اینه که اگه موس و کلید زده نشد تایمر شروع کنه به شمارش یا اینکه وقتی که ماوس و صفحه فشرده نشد زمان را ذخیره و با زمان حال مقاسه کنم اگه بیشتر از 10 دقیقه شد اون کاری که می خوام بکنم - ولی متاسفانه API را ندارم می شه بذارین؟؟

just4froum
جمعه 07 تیر 1392, 10:14 صبح
با سلام :

می تونی از کد زیر استفاده کنی.

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Dim TC As Long

Private Sub Form_Load()
Timer1.Enabled = True
Timer1.Interval = 1
Timer2.Enabled = True
Timer2.Interval = 1000
End Sub

Private Sub Timer1_Timer()
Dim x As Long
For x = 1 To 255
If GetAsyncKeyState(x) = -32767 Then TC = TC + 1
Next x
End Sub

Private Sub Timer2_Timer()
TC = TC + 1
If TC = 60 * 10 Then
MsgBox "You don't use your computer for 10 minutes !"
TC = 0
End If
End Sub


موفق باشید

AxissXs
جمعه 07 تیر 1392, 11:28 صبح
این کد ورودی ها رو بررسی میکنه و اگر توی تایم مشخص شده ورودی نداشته باشه
فرم مورد نظر رو نمایش میده(توی کد زیر به جای YourForm اسم فرم خودتون رو بنویسید)
برای استفاده ازش میتونید از دستور CheckInputIdle استفاده کنید
برای چک کردن 10 دقیقه به این شکل: CheckInputIdle 600

Private Declare Function GetQueueStatus Lib "user32" _
(ByVal fuFlags As Long) As Long

Private Const QS_KEY = &H1
Private Const QS_MOUSEMOVE = &H2
Private Const QS_MOUSEBUTTON = &H4
Private Const QS_MOUSE = (QS_MOUSEMOVE Or QS_MOUSEBUTTON)
Private Const QS_INPUT = (QS_MOUSE Or QS_KEY)

Public bCancel As Boolean
Public Sub CheckInputIdle(ByVal TimeOut_InSec As Long)
Dim t As Long
t = Timer
Do While bCancel = False
If GetQueueStatus(QS_INPUT) Then
t = Timer
DoEvents
End If
If Timer - t >= TimeOut_InSec Then Exit Do
Loop
If bCancel = False Then YourForm.Show
End Sub

امیدوارم کمکتون کنه

.:|AxissXs|:.

alipoor2009
جمعه 07 تیر 1392, 15:02 عصر
نمی دونم چرا کد AxissXs کار نکرد ؟ من بجای TimeOut_InSec مقدار 600 گذاشتم - اگه اشتباه کردم لطفا توضیح بیشتری بدین؟

AxissXs
جمعه 07 تیر 1392, 18:50 عصر
کد که درسته!
اروری نمیده؟
یعنی عکس العمل برنامه هیچی؟!!!
من کد رو چک کردم درسته و درست کار میکنه
وقتی کد رو به این شکل اجرا میکنی
CheckInputIdle 600
مثلا اگه کد بالا رو توی شروع برنامه بزاری
بعد از اجرا
اگر ماوس جرکت نکنه و از صفحه کلید استفاده نشه بهد از 600 ثانیه فرم YourForm نمایش داده میشه
من برات توی سورس نوشتم
خودت امتحان کن