【问题标题】:Disabling paste in console application在控制台应用程序中禁用粘贴
【发布时间】:2011-04-18 05:34:23
【问题描述】:

所以,这里有一个奇怪的问题:我有没有办法禁用按控制台左上角的“C:\”按钮时获得的菜单?

我正在制作一款游戏,只是为了好玩,但如果玩家能够将文字粘贴到命令行中,它会带走很多乐趣。

我还没有找到任何关于它的主题,所以我想知道是否有人知道如何完成这项工作,或者至少有一个解决方法。

提前致谢!

编辑:任何 ^ 字符的简单正则表达式都可以吗?还是控制台不使用^C和^V?

【问题讨论】:

    标签: c# command-line console-application copy-paste


    【解决方案1】:

    我不确定控制台是否支持通过键盘组合粘贴,您可以通过菜单粘贴或直接在控制台中单击鼠标右键(但这取决于控制台的设置方式)。

    我建议更好的解决方案是创建一个 winforms 应用程序,而不是在其中您可以比控制台应用程序更容易控制输入/输出。

    否则,一种解决方法可能是每 100 毫秒左右调用一次 Clipboard.Clear,以确保他们在您清除之前永远没有时间复制和粘贴任何内容,但这当然可能会令人不安和/或如果用户在后台运行您的应用程序并试图在其他软件中做一些工作,这会让用户感到困惑。

    【讨论】:

      【解决方案2】:

      a) 使用GetConsoleWindow 获取窗口句柄;使用子类和钩子来过滤鼠标和键盘事件。尽管由于 Windows 控制台实现的特殊性,这种方法可能有很多隐藏的障碍。

      b) 使用时序分析。测量击键之间的时间间隔,如果此间隔过短,则忽略输入。您可能需要进行试验才能找到最有效的标准。也许最好测量词条的输入持续时间,而不是字符间隔。

      请注意,将文本粘贴到 Windows 控制台是通过键盘输入模拟实现的,即当您将某些内容粘贴到控制台时,控制台应用程序会观察到一系列按键/按键事件。

      【讨论】:

      • 这听起来是个好主意,虽然我对整个控制台应用程序有点陌生。所以我觉得目前对我来说有点困难,但我会尝试稍后进行时序分析。谢谢
      • 别忘了您也可以使用以下键盘快捷键(在英文 Windows 版本上)粘贴:Alt+Space、E、P。
      • @0xA3 - 你是对的。 IE。如果使用钩子方法,则必须过滤键盘事件以及鼠标事件。我会修改答案,谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 2012-10-11
      相关资源
      最近更新 更多