【问题标题】:Making a mouse cursor visible programmatically when no mouse is connected未连接鼠标时以编程方式使鼠标光标可见
【发布时间】:2018-03-20 08:40:57
【问题描述】:

我正在尝试构建a touchless interface using C#。我使用此界面来控制其他程序或 Windows UI 元素。为此,我主要使用 user32.dll 来执行鼠标控制操作。

当我尝试使用the touchless interface时,当没有鼠标连接到电脑时,我仍然可以移动鼠标光标,但它是不可见的。

我知道通过使用鼠标键选项,可以使鼠标光标可见。但是,我更愿意在代码中以编程方式使其可见。

可以使用.Net 使光标可见吗?

【问题讨论】:

  • 当电脑没有连接鼠标时,我仍然可以移动鼠标光标,但是它是不可见的。你怎么移动光标,你怎么知道它是如果看不见就移动?
  • 当不可见的光标经过它们时,背景中的图标会突出显示。我通过 user32.dll 中的鼠标功能移动光标。

标签: c# wpf windows xaml user-interface


【解决方案1】:

您可以使用 user32.dll。

internal static class WinCursors
{
    [DllImport("user32.dll")]
    private static extern int ShowCursor(bool bShow);


    internal static void ShowCursor()
    {
        while (ShowCursor(true) < 0)
        {
             ShowCursor(true);
        }
    }

    internal static void HideCursor()
    {
        while (ShowCursor(false) >= 0) 
        {
             ShowCursor(false);
        }
    }
}

【讨论】:

  • 我已经尝试了您的代码,并进行了更正。它确实使光标消失并重新出现在已连接鼠标的计算机上。但是,ShowCursor 方法不会使鼠标光标在没有连接鼠标的计算机上可见。
  • 是的,但我不明白,如果您没有任何连接的鼠标或任何模拟鼠标/设备,那么显示鼠标有什么意义?不知何故,您应该能够模拟设备并触发鼠标事件。而且触摸界面与鼠标界面无关。
  • 界面是非接触式的。
【解决方案2】:

您是在谈论自己的应用程序表单还是想与其他应用程序交互?

如果是你自己的,我认为 Windows.Forms 命名空间下的这种方法会让你失望: https://msdn.microsoft.com/en-us/library/system.windows.forms.cursor.hide(v=vs.110).aspx

如果不是,恐怕你做不到,C# 不太适合做 Windows 方面的东西,当谈到 Windows shell 接口时,最好的路线几乎总是通过 user32.dll,就像这里: https://msdn.microsoft.com/en-us/library/windows/desktop/ms648396(v=vs.85).aspx

我个人不喜欢将外星 DLL 导入 C# 托管系统,这听起来不够好,我会为此使用 C/C++,但如果它太复杂,我认为是这样,a不错的选择是 golang,它具有更丰富的标准库,并且比 C/C++ 更容易处理,但当然,这取决于您的需求。

干杯

【讨论】:

  • 我在我的程序中使用透明的、点击通过wpf界面。所以我主要关心的是与其他程序和/或 windows 元素交互。我也无法使 user32.dll 的 ShowCursor 函数工作。
【解决方案3】:

这(或一些变体)会让你成为一个可见的光标吗?

this.Cursor = System.Windows.Forms.Cursors.Hand;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多