2011-03-09 30 views
9

मुझे एक ऐसा प्रोग्राम बनाने की ज़रूरत है जो गतिविधि के लिए कंप्यूटर पर नज़र रखे। जैसे माउस मूव, माउस क्लिक या कीबोर्ड इनपुट। मुझे यह रिकॉर्ड करने की आवश्यकता नहीं है कि कंप्यूटर क्या उपयोग में है। यदि उनका कंप्यूटर किसी निश्चित अवधि के लिए उपयोग में नहीं है, यानी 15 मिनट, मुझे किसी ईवेंट को बंद करने की आवश्यकता है।उपयोगकर्ता गतिविधि का पता लगाने

क्या कोई तरीका है कि मैं इन घटनाओं के बारे में अधिसूचित हो सकता हूं?

उत्तर

8

this article देखें जो कंप्यूटर के निष्क्रिय समय को प्राप्त कर सकता है, और फिर आप अपनी घटना को मनमाने ढंग से स्थिति में आग लगा देंगे।

छद्म कोड:

If Computer_is_Idle > 15 minutes Then 
    Do this 
Else 
    Do that or Wait more... 

नोट: स्रोत लेख के भीतर उपलब्ध कोड।

0

आपको वैश्विक कीबोर्ड हुक और वैश्विक माउस हुक सेट करने की आवश्यकता है। इसके परिणामस्वरूप आपके कीबोर्ड पर सभी कीबोर्ड और माउस गतिविधि पारित की जाएगी। आप आखिरी ऐसी घटना के समय को याद कर सकते हैं, और समय-समय पर जांच कर सकते हैं कि उस समय से 15 मिनट बीत चुके हैं।

उदाहरण प्रोजेक्ट के लिए here पर एक नज़र डालें। आपको this उपयोगी भी मिल सकता है।

+1

समाधान GetLastInputInfo के आधार पर आम तौर पर बेहतर कर रहे हैं, क्योंकि यह हुक इंजेक्शन लगाने की आवश्यकता नहीं है: आप इस तरह एक टाइमर में उपयोग कर सकते हैं हर प्रक्रिया में कोड। –

6

धन्यवाद लॉर्डकॉवर। यह कोड here से है। यह कक्षा आपके लिए कीबोर्ड और माउस नियंत्रण का नियंत्रण लेती है।

private void timer1_Tick(object sender, EventArgs e) 
     { 
      listBox1.Items.Add(Win32.GetIdleTime().ToString()); 
      if (Win32.GetIdleTime() > 60000) //1minute 
      { 
       textBox1.Text = "SLEEPING NOW"; 
      } 
} 

// मुख्य कोड नियंत्रण के लिए, चिपकाएं आपके प्रपत्र कोड के लिए

internal struct LASTINPUTINFO 
{ 
    public uint cbSize; 
    public uint dwTime; 
} 
public class Win32 
{ 
    [DllImport("User32.dll")] 
    public static extern bool LockWorkStation(); 

    [DllImport("User32.dll")] 
    private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii); 

    [DllImport("Kernel32.dll")] 
    private static extern uint GetLastError(); 

    public static uint GetIdleTime() 
    { 
     LASTINPUTINFO lastInPut = new LASTINPUTINFO(); 
     lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut); 
     GetLastInputInfo(ref lastInPut); 

     return ((uint)Environment.TickCount - lastInPut.dwTime); 
    } 

    public static long GetTickCount() 
    { 
     return Environment.TickCount; 
    } 

    public static long GetLastInputTime() 
    { 
     LASTINPUTINFO lastInPut = new LASTINPUTINFO(); 
     lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut); 
     if (!GetLastInputInfo(ref lastInPut)) 
     { 
      throw new Exception(GetLastError().ToString()); 
     } 

     return lastInPut.dwTime; 
    } 


} 
संबंधित मुद्दे