2011-12-11 74 views
1

我想和一个计时器,并在事件timer_tick我想我的电脑自动按空格键我怎样才能每隔5分钟按空间?

+4

你试过了什么?你卡在哪里? – Thomas

+0

如果您有按下空格键时应触发的事件,则只需手动调用处理程序。 – Tudor

+0

所以我做了一个计时器和一个按钮的形式。当我按下按钮计时器,哪个间隔是600000(5分钟)开始,并在timer1_tick方法我想告诉我的电脑按空格键 – user1074030

回答

3

只是设置了一个定时器并使用System.Windows.Forms.SendKeys.Send方法!

2

另外,您可以的平台,USER32调用PostMessage的:

[return: MarshalAs(UnmanagedType.Bool)] 
[DllImport("user32.dll", SetLastError = true)] 
static extern bool PostMessage(HandleRef hWnd, uint Msg, IntPtr wParam, IntPtr lParam); 

这无疑是一个更好的方法,因为它允许您指定的hWnd,从而允许您将击键发送到AREN”窗口t本地呼叫者:

/// <summary> 
    /// Sends keystrokes to the specified window 
    /// </summary> 
    /// <param name="hWnd">Window's hWnd</param> 
    /// <param name="keys">String of keys to send</param> 
    /// <returns>Returns number of keystrokes sent, -1 if an error occurs</returns> 
    public int SendKeys(int hWnd, string keys) 
    { 
     if(hWnd <= 0 || keys.Length == 0) 
      return -1; 

     int ret = 0, i = 0; 

     System.Text.StringBuilder str = new System.Text.StringBuilder(keys.ToUpper()); 

     str.Replace(Convert.ToChar("`"), Convert.ToChar(0xC0)); 
     str.Replace(Convert.ToChar("~"), Convert.ToChar(0xC0)); 
     str.Replace(Convert.ToChar("-"), Convert.ToChar(0xBD)); 
     str.Replace(Convert.ToChar("="), Convert.ToChar(0xBB)); 
     str.Replace("{TAB}", Convert.ToChar(0x9).ToString()); 
     str.Replace("{ENTER}", Convert.ToChar(0xD).ToString()); 
     str.Replace("{ESC}", Convert.ToChar(0x1B).ToString()); 
     str.Replace("{F5}", Convert.ToChar(0x74).ToString()); 
     str.Replace("{F12}", Convert.ToChar(0x7B).ToString()); 
     str.Replace("{SHIFTD}", Convert.ToChar(0xC1).ToString()); 
     str.Replace("{SHIFTU}", Convert.ToChar(0xC2).ToString()); 

     for(int ix = 1; ix <= str.Length; ++ix) 
     { 
      char chr = str[i]; 

      if(Convert.ToInt32(chr) == 0xC1) 
      { 
       _PostMessage(hWnd, 0x100, 0x10, 0x002A0001); 
       _PostMessage(hWnd, 0x100, 0x10, 0x402A0001); 
       Thread.Sleep(1); 
      } 
      else if(Convert.ToInt32(chr) == 0xC2) 
      { 
       _PostMessage(hWnd, 0x101, 0x10, 0xC02A0001); 
       Thread.Sleep(1); 
      } 
      else 
      { 
       ret = _MapVirtualKey(Convert.ToInt32(chr), 0); 
       if(_PostMessage(hWnd, 0x100, Convert.ToInt32(chr), MakeLong(1, ret)) == 0) 
        return -1; 

        Thread.Sleep(1); 

       if(_PostMessage(hWnd, 0x101, Convert.ToInt32(chr), (MakeLong(1, ret) + 0xC0000000)) == 0) 
        return -1; 
      } 
      i++; 
     } 
     return i; 
    }