PDA

View Full Version : حرفه ای: محاسبه زمان بیکاری سیستم



m.4.r.m
جمعه 13 دی 1392, 22:25 عصر
سلام دوستان من زمان بیکاری سیستم رو محاسبه کردم مثلا وقتی ماوس و کیبورد بدون حرکت میمونه تا N ثانیه می خوام یه عملی تو برنامه انجام بده مثلا بره به Login برنامه که از کاربر دوباره کلمه عبور بخواد حالا سوال بنده اینجاست من چه جوری یه تعریف کلی انجام بدم ؟ دیگه لازم نباشه تو تمام فرم ها تو فرم لودشون تکرار کنم آیا میشه همچین چیزی یا نه ؟ ... ممنون میشم توضیح کوچولو بدین

vbhamed
شنبه 14 دی 1392, 08:29 صبح
سلام
يك فرم مخفي با يك تايمر روي اون ايجاد كنيد و در اون تايمر زمان بيكاري رو حساب كنيد و اگر وقتش بود فرم Login رو نمايش بديد و Enable ساير فرمها رو False كنيد يا از صفحه عكس بگيريد و عكس رو در زمينه فرم Login قرار بدين، ضمنا فرم Login بايد Always on top باشه
اينطوري ديگه نياز نيست تو كل فرمها دستكاري كنيد

m.4.r.m
شنبه 14 دی 1392, 14:17 عصر
منظور از فرم مخفی یعنی زمان لود کردن هر فرم تایمر فرم مخفی رو True کنم درسته ؟

m.4.r.m
شنبه 14 دی 1392, 14:35 عصر
یه جور دیگه درستش کردم مرسی از حامد عزیز

h_jafarnezhad
شنبه 14 دی 1392, 15:02 عصر
سلام دوستان من زمان بیکاری سیستم رو محاسبه کردم مثلا وقتی ماوس و کیبورد بدون حرکت میمونه تا N ثانیه می خوام یه عملی تو برنامه انجام بده مثلا بره به Login برنامه که از کاربر دوباره کلمه عبور بخواد حالا سوال بنده اینجاست من چه جوری یه تعریف کلی انجام بدم ؟ دیگه لازم نباشه تو تمام فرم ها تو فرم لودشون تکرار کنم آیا میشه همچین چیزی یا نه ؟ ... ممنون میشم توضیح کوچولو بدین

سلام
من هم مي خوام اين كار رو براي پروژه ام انجام بدم ولي نمي دونم چه طوري و از كجا شروع كنم.(پروژه من ويندوز اپليكيشن هست كه با زبان c#2010 نوشتمش)
ممنون ميشم راهنمايي كنين

m.4.r.m
شنبه 14 دی 1392, 15:54 عصر
اینجا چون مباحث وی بی 6 هست کسی جواب شما رو نمیده شما باید تو قسمت C# مطرح کنین براتون جواب بدن

آقا من درست کردم تا اینجا مشکلی نیست فقط یه جا به مشکل خوردم هر کاری می کنم جواب نمیده حالا توضیح میدم چیکار کردم

یه ماژول دارم محاسبه بیکاری سیستم رو انجام میده

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
Dim Frm As Form
t = Timer
Do While bCancel = False
If GetQueueStatus(QS_INPUT) Then
t = Timer
DoEvents
End If
If Timer - t >= TimeOut_InSec Then Exit Do
DoEvents
Loop
If bCancel = False Then
For Each Frm In Forms
Frm_Login.Show
Unload Frm
Next
End If
End Sub

و در زمان لود کردن فرم ها این تابع رو فراخوانی میکنم که مثلا بعد از 10 ثانیه بیاد بیرون

CheckInputIdle 10

تا اینجا خوب پیش میره فقط مشکل من خروج از کل فرم هاست میگه نمی تونه با این مدل فرم ها رو Hide کنی

For Each Frm In Forms
Frm_Login.Show
Unload Frm
Next
End If


من یک فرم اصلی دارم به عنوان Frm_Main که زمان باز کردن فرم های دیگه از این دستور استفاده می کنم
form2.show 1
فکر کنم به همین خاطر مشکل پیش میاد به نظر دوستان چیکار می تونم بکنم ؟

vbhamed
یک شنبه 15 دی 1392, 15:08 عصر
سلام
خب مشخصه، دستور 1 show فرم رو به صورت Modal نشون ميده و ممكنه شما بخواين فرم زيريش رو Hide كنيد كه امكانپذير نيست
براي نمايش فرمها مي‌تونيد با توابع API اونها رو به صورت Always on top نمايش بديد (تابع SetWindowPos)، اينطوري ميشه Hide كرد

m.4.r.m
یک شنبه 15 دی 1392, 23:13 عصر
ممنون ولی من با این دستور مشکلو حل کردم میزارم اینجا کسی خواست استفاده کنه

Public Sub CheckInputIdle(ByVal TimeOut_InSec As Long)
On Error Resume Next
Dim t As Long
Dim Frm As Form
t = Timer
Do While bCancel = False
If GetQueueStatus(QS_INPUT) Then
t = Timer
DoEvents
End If
If Timer - t >= TimeOut_InSec Then Exit Do
DoEvents
Loop
If bCancel = False Then
Do Until Screen.ActiveForm Is Nothing
Unload Screen.ActiveForm
Loop
Frm_Login.Show
End If
End Sub


با اضافه کردن این خط مشکل حل میشه

Do Until Screen.ActiveForm Is Nothing
Unload Screen.ActiveForm
Loop
Frm_Login.Show