【问题标题】:Control mouse and keyboard from C# Mono on Linux在 Linux 上从 C# Mono 控制鼠标和键盘
【发布时间】:2011-10-19 15:37:01
【问题描述】:

我一直在编写一个在 Windows 上运行良好的 C# 应用程序。它控制键盘和鼠标,并将击键发送到当前打开的程序。

但是,我想将我的应用程序移植到 Linux,因此我无法使用我目前使用的 MouseKeyboardLibrary.dll 正在执行非常特定于 Windows 的事情。

是否有一个库可以让我轻松地将键盘和鼠标移动发送到 X11 或 Xorg 中的程序?

【问题讨论】:

  • 我怀疑你最终可能不得不为此编写自己的库

标签: c# ubuntu mono x11 xorg


【解决方案1】:

我找不到任何已经制作好的东西。但我为您找到了一个起点:xdotool 是一个从命令行控制鼠标和键盘的项目。它也是开源的,所以如果你愿意,你可以在 C# 中本地实现相同的功能(或者如果需要,可以使用一些 P/Invokes)。

【讨论】:

  • xdotool 似乎是一个可行的选择,我也只是在这里linux.die.net/man/1/xte 偶然发现了 xte(也称为 xautomation)。他们似乎相当平等,所以感谢您的帮助!
  • @Kasper 我看到的唯一区别是 xdotool 包括用于搜索窗口和执行除直接键盘和鼠标输入之外的其他操作的命令。不过,这听起来与您的项目不太相关。
【解决方案2】:
    public static bool LinuxOS
    {
        get { return Path.DirectorySeparatorChar == '/'; }
    }

    public static void SendKeys(String output)
    {
        if (LinuxOS)
        {
            var args = "";
            switch (output)
            {
                case "{RIGHT}":
                    args = "key Right";
                    break;
                case "{LEFT}":
                    args = "key Left";
                    break;
                default:
                    if (output.StartsWith("{") && output.EndsWith("}"))
                        output = output.Substring(1, output.Length - 2);

                    args = "type \"" + output + "\"";
                    break;
            }

            var proc = new Process
                       {
                               StartInfo =
                               {
                                       FileName = "xdotool",
                                       Arguments = args,
                                       UseShellExecute = false,
                                       RedirectStandardError = false,
                                       RedirectStandardInput = false,
                                       RedirectStandardOutput = false
                               }
                       };
            proc.Start();
        }
        else
        {
            System.Windows.Forms.SendKeys.Send(output);
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2010-12-29
    • 1970-01-01
    相关资源
    最近更新 更多