C# 按键启动计时器

C# 按键启动计时器,c#,timer,keypress,C#,Timer,Keypress,我正在尝试制作一个程序,它可以: 如果您按下开始(按钮1),它应该开始工作 如果您按下停止(按钮2),它将停止,直到您再次按下开始 我的目标:当它打开,空格被按下时,它应该“垃圾邮件”空格(你按住空格,它在游戏中不断跳跃(cs)) 基本上,我正在尝试为游戏创建兔子跳跃。 我对c#form应用程序非常陌生,所以我不知道我的代码出了什么问题 什么不起作用:按键向下和向上事件 这是我的密码: namespace Bunny { public partial class Form1 : Form

我正在尝试制作一个程序,它可以: 如果您按下开始(按钮1),它应该开始工作 如果您按下停止(按钮2),它将停止,直到您再次按下开始

我的目标:当它打开,空格被按下时,它应该“垃圾邮件”空格(你按住空格,它在游戏中不断跳跃(cs)) 基本上,我正在尝试为游戏创建兔子跳跃。 我对c#form应用程序非常陌生,所以我不知道我的代码出了什么问题

什么不起作用:按键向下和向上事件

这是我的密码:

namespace Bunny
{
    public partial class Form1 : Form
    {            
        Timer timer = new Timer();
        Boolean isOn = false;

        public Form1()
        {
            InitializeComponent();
            timer.Tick += new EventHandler(timer1_Tick);
            timer.Interval = 50;                      
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {            
            timer.Enabled = true;
            timer.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if(isOn)
            {
                SendKeys.Send(" ");                    
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            timer.Enabled = false;
            timer.Stop();
        }
        private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Space)
            {
                isOn = true;
            }
        }
        private void Form1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Space)
            {
                isOn = false;
            }
        }

    }
}

为了让你们的钥匙在游戏中被检测到,它需要被编程为一个全局热键。我的猜测是,当窗体聚焦时,会检测到您的按键,但在游戏中不会

请参阅下面的链接。

程序在做什么?你现在得到的是什么行为?如果我手动设置isOn true(在初始化时),它可以工作,但它不适用于空间(也尝试了其他键),你在哪里使用方法
bunny\u KeyUp
?哦,我想这不应该是bunny,而是form1,但仍然不起作用,这起作用:protected override bool ProcessCmdKey(参考消息消息消息,按键数据)但它无法检测按键是否仍在按下…这是整个程序,当您单击按钮时,按钮会获得焦点。SendKeys键现在转到按钮,而不是任何程序应该获得的键。您需要重新调整窗口焦点。需要Pinvoke、GetForeGroundIndow和SetForeGroundIndow。