Я пытаюсь понять, как записать ввод с клавиатуры и мыши в порт. В моем коде каждые 15 миллисекунд координаты мыши записываются в порт.

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    writeToPort(new Point(e.X, e.Y));
}

public void writeToPort(Point coordinates)
{
    if (watch.ElapsedMilliseconds > 15)
    {
        watch = Stopwatch.StartNew();

        port.Write(String.Format("X{0}Y{1}",
        (coordinates.X / (Size.Width / 180)),
        (coordinates.Y / (Size.Height / 180))));

Затем у меня был int с именем Key, который менял его значение в зависимости от того, какую клавишу вы нажали (w изменил его значение на 1, изменил его значение на 2, s изменил его значение на 3, d изменил его значение на 4), и я попытался напишите что в порт ну.

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    writeToPort(new Point(e.X, e.Y));
}

public void writeToPort(Point coordinates)
{
    if (watch.ElapsedMilliseconds > 15)
    {
        watch = Stopwatch.StartNew();

        port.Write(String.Format("X{0}Y{1}K{2}",
        (coordinates.X / (Size.Width / 180)),
        (coordinates.Y / (Size.Height / 180)),
        Key));

Однако я обнаружил, что когда мышь оставалась неподвижной, ключ не записывался в порт.

Как сделать так, чтобы ключ записывался в порт при нажатии?

c#
0
sketch 29 Ноя 2020 в 07:15

1 ответ

Лучший ответ

Вы можете использовать глобальную переменную и хранить свои координаты там, когда когда-либо перемещается мышь, при движении мыши вы можете обновлять эти координаты, а с помощью таймера вы можете записывать эти координаты каждые 15 миллисекунд,

Вы не можете запускать запись каждые 15 миллисекунд с событием перемещения мыши, оно срабатывает только при перемещении мыши.

System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
Point lastCoords;
private void Form1_Load(object sender, System.EventArgs e){
   myTimer.Tick += new EventHandler(TimerEventProcessor);
   myTimer.Interval = 15;
   myTimer.Start();
}
private void TimerEventProcessor(Object myObject,
                                        EventArgs myEventArgs) {
   if(lastCoords != null)
      writeToPort(lastCoords);
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    lastCoords = new Point(e.X, e.Y);
    //writeToPort(new Point(e.X, e.Y));
}


public void writeToPort(Point coordinates)
{
   

        port.Write(String.Format("X{0}Y{1}K{2}",
            (coordinates.X / (Size.Width / 180)),
            (coordinates.Y / (Size.Height / 180)),
            Key));
     
}
2
Vilsad P P 29 Ноя 2020 в 05:11