View Full Version : حرفه ای: تعيين زمان استفاده نشدن موس و كيبرد
  
kiarashk
شنبه 01 بهمن 1390, 23:10 عصر
دوستان كسي ايده اي داره كه بشه باهاش فهميد كاربر چه مدت هست كه به موس و كيبردش دست نزده اگه بخوام دقيق تر بگم مثل اسكرين سيور اين تايم رو چطور مي شه به دست اور.
اگه حتي يه ايده كوچيك هم داريد مي تونه كمك كنه؟!
shadi khanum
شنبه 01 بهمن 1390, 23:27 عصر
نمیدونم راه درستش چیه ولی میشه یه کلاس تعریف کنی و توش یه  with event Timer و یه متغیر از نوع int64 به صورت shared تعریف کنی، بعد تو همون کلاس متد tick اون timer رو raise کنی و تو اون متد اون متغیر Shared رو یکی اضافه کنی. حالا تو فرم های برنامت واسه همشون متد keydown رو raise کنی و تو اون متد اون متغیر shared رو 0 کنی.. اینجوری هر وقت به keyboard دست بزنه کاربر اون متغیر reset میشه و تا keydown بعدی تو تیک تایمر یکی یکی اضافه میشه.. یعنی هروقت خواستی ببینی کاربر چقده که دست به کیبرد نزده، مقدار اون متغیر shared میشه جوابت..
موفق باشی
kiarashk
یک شنبه 02 بهمن 1390, 01:12 صبح
نمیدونم راه درستش چیه ولی میشه یه کلاس تعریف کنی و توش یه  with event Timer و یه متغیر از نوع int64 به صورت shared تعریف کنی، بعد تو همون کلاس متد tick اون timer رو raise کنی و تو اون متد اون متغیر Shared رو یکی اضافه کنی. حالا تو فرم های برنامت واسه همشون متد keydown رو raise کنی و تو اون متد اون متغیر shared رو 0 کنی.. اینجوری هر وقت به keyboard دست بزنه کاربر اون متغیر reset میشه و تا keydown بعدی تو تیک تایمر یکی یکی اضافه میشه.. یعنی هروقت خواستی ببینی کاربر چقده که دست به کیبرد نزده، مقدار اون متغیر shared میشه جوابت..
موفق باشی
 مساله اينجاست كه بايد اگه كاربر داشت توي يه برنامه ديگه مثلا ورد از كيبرد استفاده كنه متغيير reset بشه اما نمي دونم چه طوري مي شه اين key down رو به كل سيستم ربط داد نه فقط به يرنامه من اگه بخوام بيشتر توضيح بدم مي تونيد اينطوري فرض كنيد كه برنامه من minimaize باشه و اگه كاربر مدت ٥ دقيقه به موس و كيبرد دست نزد اون وقت برنامه من مثل اسكرين سيور ماكزيمايز بشه و تازه كاربر ببينتش
به هر حال از پاسختون ممنون
klinton
یک شنبه 02 بهمن 1390, 02:04 صبح
http://barnamenevis.org/showthread.php?86919-ط²ظ…ط§ظ†-ط¨غŒع©ط§ط±-ط¨ظˆط¯ظ†-ع©ط§ط±ط¨ط±
shadi khanum
یک شنبه 02 بهمن 1390, 13:10 عصر
این لینکی که گذاشتین که جواب ایشون نبود. کدها درست کار نمیکرد.. فک کنم شما باید با APIها کار کنی اگه میخوای تو برنامه های دیگه رو هم چک کنی
kiarashk
یک شنبه 02 بهمن 1390, 15:43 عصر
این لینکی که گذاشتین که جواب ایشون نبود. کدها درست کار نمیکرد.. فک کنم شما باید با APIها کار کنی اگه میخوای تو برنامه های دیگه رو هم چک کنی
 
خودم هم فكر مي كنم بايد از API استفاده كنم اما تابع لازم رو بلد نيستم و لينك دوستمون هم كمكي نكرد ؟ كسي پيشنهادي نداره به هر حال برنامه هايي هستن كه اين كار رو انجام مي دن پس بايد يه راهي باشه؟؟!
mafmaf
دوشنبه 03 بهمن 1390, 20:40 عصر
سلام دوست عزیز من این کد رو زمانی برای خاموش شدن صفحه مانیتورم نوشته بودم.با کمی تغییر به نتیجه دلخواهت میرسی.البته خیلی سادست.اگر سوالی بود در خدمتم.
Public Class Form1
    Dim ax As Integer
    Dim cx As Integer
    Dim bx As Integer
    Dim sx As Integer
    Dim txt As Integer = 0
    Dim result As Integer
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Integer) As Integer
    Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Int32, ByVal wMsg As Int32, ByVal wParam As Int32, ByVal lParam As Int32) As Int32
    Const MONITOR_ON As Int32 = -1
    Const MONITOR_OFF As Int32 = 2
    Const SC_MONITORPOWER As Long = &HF170&
    Const WM_SYSCOMMAND As Long = &H112
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run  ", True).SetValue("sleep.exe", Application.ExecutablePath, Microsoft.Win32.RegistryValueKind.String)
        Timer1.Enabled = True
        Timer1.Interval = 1
        Timer2.Enabled = True
        Timer2.Interval = 10000
        Timer8.enabled = True
        Timer8.Interval = 50
        Timer4.Enabled = True
        Timer4.Interval = 600000
        Timer5.Enabled = True
        Timer5.Interval = 9800
        Timer6.Enabled = True
        Timer6.Interval = 20000
        Timer1.Start()
        Timer2.Start()
        Timer4.Start()
        Timer5.Start()
        Timer6.Start()
        Timer8.start()
        Me.Opacity = 0
        Me.Hide()
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        ax = Cursor.Position.X
        Timer1.Interval = 20000
        Timer1.Start()
    End Sub
    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        bx = Cursor.Position.X
        Timer2.Interval = 20000
        Timer2.Start()
    End Sub
    
    
    
    Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick
        If txt = 55 Then
            Timer3.Interval = 500000
            Timer3.Start()
            Dim gg As String
            gg = "e:\Bubbles.scr".ToString
            Process.Start(gg)
            Timer4.Enabled = False
        End If
    End Sub
    
    Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
        If txt = 55 Then
            SendMessage(Me.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF)
            Timer3.Stop()
        End If
    End Sub
    Private Sub Timer5_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer5.Tick
       
        If ax = bx Then
            txt = txt + 1
            
        Else
            txt = 0
            Timer4.Interval = 600000
            Timer4.Start()
        End If
        If txt > 55 Then
            txt = 55
        End If
        Label1.Text = txt
    End Sub
    Private Sub Timer6_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer6.Tick
        If txt < 10 And Timer4.Enabled = False Then
            Timer4.Enabled = True
            Timer4.Interval = 600000
            Timer4.Start()
        End If
    End Sub
    
    
    Private Sub Timer8_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer8.Tick
        For i = 1 To 255
            result = 0
            result = GetAsyncKeyState(i)
            If result = -32767 Then
                txt = 0
            End If
        Next
    End Sub
End Class
shadi khanum
سه شنبه 04 بهمن 1390, 11:06 صبح
نمیدونم این لینک به دردت میخوره یا نه.. ولی یه نگاه بهش بندازی بد نیست
http://barnamenevis.org/showthread.php?23899-Hotkey-%D8%AF%D8%B1-vb.net
kiarashk
دوشنبه 10 بهمن 1390, 21:44 عصر
سلام دوست عزیز من این کد رو زمانی برای خاموش شدن صفحه مانیتورم نوشته بودم.با کمی تغییر به نتیجه دلخواهت میرسی.البته خیلی سادست.اگر سوالی بود در خدمتم.
Public Class Form1
    Dim ax As Integer
    Dim cx As Integer
    Dim bx As Integer
    Dim sx As Integer
    Dim txt As Integer = 0
    Dim result As Integer
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Integer) As Integer
    Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Int32, ByVal wMsg As Int32, ByVal wParam As Int32, ByVal lParam As Int32) As Int32
    Const MONITOR_ON As Int32 = -1
    Const MONITOR_OFF As Int32 = 2
    Const SC_MONITORPOWER As Long = &HF170&
    Const WM_SYSCOMMAND As Long = &H112
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run  ", True).SetValue("sleep.exe", Application.ExecutablePath, Microsoft.Win32.RegistryValueKind.String)
        Timer1.Enabled = True
        Timer1.Interval = 1
        Timer2.Enabled = True
        Timer2.Interval = 10000
        Timer8.enabled = True
        Timer8.Interval = 50
        Timer4.Enabled = True
        Timer4.Interval = 600000
        Timer5.Enabled = True
        Timer5.Interval = 9800
        Timer6.Enabled = True
        Timer6.Interval = 20000
        Timer1.Start()
        Timer2.Start()
        Timer4.Start()
        Timer5.Start()
        Timer6.Start()
        Timer8.start()
        Me.Opacity = 0
        Me.Hide()
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        ax = Cursor.Position.X
        Timer1.Interval = 20000
        Timer1.Start()
    End Sub
    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        bx = Cursor.Position.X
        Timer2.Interval = 20000
        Timer2.Start()
    End Sub
    
    
    
    Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick
        If txt = 55 Then
            Timer3.Interval = 500000
            Timer3.Start()
            Dim gg As String
            gg = "e:\Bubbles.scr".ToString
            Process.Start(gg)
            Timer4.Enabled = False
        End If
    End Sub
    
    Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
        If txt = 55 Then
            SendMessage(Me.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF)
            Timer3.Stop()
        End If
    End Sub
    Private Sub Timer5_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer5.Tick
       
        If ax = bx Then
            txt = txt + 1
            
        Else
            txt = 0
            Timer4.Interval = 600000
            Timer4.Start()
        End If
        If txt > 55 Then
            txt = 55
        End If
        Label1.Text = txt
    End Sub
    Private Sub Timer6_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer6.Tick
        If txt < 10 And Timer4.Enabled = False Then
            Timer4.Enabled = True
            Timer4.Interval = 600000
            Timer4.Start()
        End If
    End Sub
    
    
    Private Sub Timer8_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer8.Tick
        For i = 1 To 255
            result = 0
            result = GetAsyncKeyState(i)
            If result = -32767 Then
                txt = 0
            End If
        Next
    End Sub
End Class
 
ممنون البته هنوز امتحان نکردم ولی فکر کنم نتیجه بده تنها نگرانیم اینه که چون توی خود برنامه ار تایمر بازم استفاده شده این تعداد تایمر ها باعث کندی برنامه بشه به هرحال خیلی ممنون
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.