C# 如何在控制台应用程序中检测鼠标单击?

问题描述 投票:0回答:2

我需要知道如何检测控制台应用程序(不是 WinForms!)中的鼠标单击。我现在尝试的方法不起作用。

static void Main (string[] args)
{                      
    while (true)
    {
        if (Mouse.LeftButton == MouseButtonState.Pressed)
        {
            Console.WriteLine("Left mouse button was pressed");
        }
    }
}
c# console-application
2个回答
1
投票

如果您可以使用 nuGet 软件包,请安装此软件包:https://www.nuget.org/packages/MouseKeyHook/5.6.0?_src=template 并浏览/修改示例或如下所示:

using System;
using System.Threading;
using Gma.System.MouseKeyHook;

namespace ConsoleHook
{
    internal class LogMouse
    {
        public static void Do(Action quit)
        {
            Console.WriteLine("Press Q to quit.");
            Hook.GlobalEvents().MouseDown += (sender, e) =>
            {
                Console.Write(e.Button);
            };
            Hook.GlobalEvents().KeyPress += (sender, e) =>
            {
                //Console.Write(e.KeyChar);
                if (e.KeyChar == 'q') quit();
            };
        }
    }
}

ps。它在控制台应用程序中工作。 pps。您可以自定义它来检测鼠标左/右键。


0
投票

也许是这样的:

// --------------------- Program.cs ---------------------
using System.Runtime.InteropServices;

MouseClickHandler.StartMouseClickHandling();

// --------------------- Declaration --------------------
class MouseClickHandler
{
  const int LEFT_BTN = 0x01;
  const int RIGHT_BTN = 0x02;
  const int MIDDLE_BTN = 0x04;
  const int KEY_PRESSED_FLAG = 0x8001;

  public static void StartMouseClickHandling()
  {
    while (true)
    {
      if (MouseButtonClicked(LEFT_BTN))
      {
        Console.WriteLine($"Left mouse clicked!");
        WaitUntilMouseButtonReleased(LEFT_BTN);
      }

      if (MouseButtonClicked(MIDDLE_BTN))
      {
        Console.WriteLine($"Middle mouse clicked!");
        WaitUntilMouseButtonReleased(MIDDLE_BTN);
      }

      if (MouseButtonClicked(RIGHT_BTN))
      {
        Console.WriteLine($"Right mouse clicked!");
        WaitUntilMouseButtonReleased(RIGHT_BTN);
      }
    }
  }

  private static void WaitUntilMouseButtonReleased(int MOUSE_BTN)
  {
    while (MouseButtonClicked(MOUSE_BTN))
      Thread.Sleep(10);
  }

  private static bool MouseButtonClicked(int BTN)
  {
    [DllImport("user32.dll", SetLastError = true)]
    static extern short GetAsyncKeyState(int vKey);
    return (GetAsyncKeyState(BTN) & KEY_PRESSED_FLAG) != 0;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.