C++ 如何在Linux/g++中读取Shift+插入(粘贴)字符串?

C++ 如何在Linux/g++中读取Shift+插入(粘贴)字符串?,c++,linux,keyboard,paste,C++,Linux,Keyboard,Paste,我知道如何在Linux中阅读键盘,而不会像在Windows下那样停止。所以,每当它返回时,我知道有一个按键活动 然后我将尝试通过getch函数读取密钥 我的问题是,在按下键盘后,我怎么知道按下了Shift+Insert组合键粘贴快捷键,就像Windows中的Ctrl+V一样?如上所述,没有全局可移植的方法来实现这一点,因为: 除了特定于Linux的程序使用特殊调用检测按键的特殊情况外,您的程序只会看到粘贴的文本,而没有关于它是如何到达那里的线索。 同样,没有线索表明何时粘贴结束粘贴不需要以换行符

我知道如何在Linux中阅读键盘,而不会像在Windows下那样停止。所以,每当它返回时,我知道有一个按键活动

然后我将尝试通过getch函数读取密钥

我的问题是,在按下键盘后,我怎么知道按下了Shift+Insert组合键粘贴快捷键,就像Windows中的Ctrl+V一样?

如上所述,没有全局可移植的方法来实现这一点,因为:

除了特定于Linux的程序使用特殊调用检测按键的特殊情况外,您的程序只会看到粘贴的文本,而没有关于它是如何到达那里的线索。 同样,没有线索表明何时粘贴结束粘贴不需要以换行符结束,它们可以是单词、空格等。 相反,一个可行的解决方案是使用POSIX termios使程序的输入流在原始模式下工作,并设置读取超时。然后,程序可以读取字符,只要它们足够快,你就可以决定读取的速度有多快

这些相关问题显示了POSIX termios的一些示例,包括超时的使用:

或者,还有选择调用:


这完全取决于您的实际GUI系统。没有全局可移植的方法来获取副本缓冲区。感谢您的响应。我正在Linux/C下编写一个程序,在我准备的提示下等待用户命令,并响应它。我想处理向上/向下键以使命令的历史记录可用。所以我没有使用fgets,因为它不知道用户是否按了向上/向下箭头键。我是这样做的:等待一个键,用getch读取它,然后在我的应用程序中插入一个字符串,直到按下ENTER键。当用户在提示符中粘贴一些字符串时,getch调用将在粘贴的字符串中给出第一个字母。如果我循环调用getch,它会给出整个粘贴的字符串,但不知道何时必须完成循环。重复-没有全局可移植的方法。粘贴不必以换行结束。对于给定的场景,您可以让程序等待一小段时间,然后停止阅读。谢谢您。我会尝试一下,然后写下我的经历。在你建议我等一段时间,打破getch的循环后,我正在考虑如何中断getch调用,而假设的时间已经过去了。但后来我意识到,如果我删除ifKeyboardHit/*的行为类似于Windows中的kbhit*/返回0,问题就会得到解决;从那个循环。我这样做了,现在,当粘贴一些字符串时,getch循环自动继续,直到粘贴字符串中的所有字符进入程序。非常感谢你。