鱼C论坛

 找回密码
 立即注册
查看: 2681|回复: 16

[已解决]如何让程序在运行期间,禁用输入法

[复制链接]
发表于 2022-8-25 14:59:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题,有一个特殊需求,需要在程序运行期间,禁止输入任何字符,有懂的大佬吗
在线等
最佳答案
2022-8-25 17:23:47

这样可以吗
import keyboard
from pynput.keyboard import Key, Controller
fast_write = {'Q':'这是一条测试信息'}
rekeyboard = Controller()
def callback(x):
    if x.event_type == 'down':
        if x.name in fast_write:
            rekeyboard.type("\b"+fast_write[x.name])
keyboard.hook(callback)
keyboard.wait()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-25 15:10:25 | 显示全部楼层
你不去读取stdin不就可以了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-25 15:15:33 | 显示全部楼层
人造人 发表于 2022-8-25 15:10
你不去读取stdin不就可以了?

不太明白什么意思,大佬可以说的简单一些吗,我刚解除这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-25 15:43:19 From FishC Mobile | 显示全部楼层
慕岚 发表于 2022-8-25 15:15
不太明白什么意思,大佬可以说的简单一些吗,我刚解除这个

在啥地方输入呢是控制台程序还是窗口程序
人造人大侠的意思是禁用input一类的api
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-25 16:17:27 | 显示全部楼层
wp231957 发表于 2022-8-25 15:43
在啥地方输入呢是控制台程序还是窗口程序
人造人大侠的意思是禁用input一类的api

是在窗口程序,类似QQ,微信,这种
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-25 16:34:03 | 显示全部楼层
慕岚 发表于 2022-8-25 16:17
是在窗口程序,类似QQ,微信,这种

代码是谁写的?是你写的吗?
你有源代码吗?你可以修改源代码吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-25 16:37:02 | 显示全部楼层
人造人 发表于 2022-8-25 16:34
代码是谁写的?是你写的吗?
你有源代码吗?你可以修改源代码吗?

是我写的,我现在只把功能实现了,但是不是我想要的效果
import keyboard
from pynput.keyboard import Key, Controller
fast_write = {'Q':'这是一条测试信息'}
rekeyboard = Controller()
def callback(x):
    if x.event_type == 'down':
        if x.name in fast_write:
            rekeyboard.type(fast_write[x.name])
keyboard.hook(callback)
keyboard.wait()

我想要最终实现,按下Q之后,只输出内容,不输出我按下的按键,现在按下大写的Q键是这个效果
Q这是一条测试信息
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-25 16:41:31 | 显示全部楼层
慕岚 发表于 2022-8-25 16:37
是我写的,我现在只把功能实现了,但是不是我想要的效果

在打印文本之前让程序按下退格键
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-25 16:41:47 | 显示全部楼层
人造人 发表于 2022-8-25 16:34
代码是谁写的?是你写的吗?
你有源代码吗?你可以修改源代码吗?

我正在找PYQT5的方法解决这个问题,但是目前还是没有查到我想要的答案


                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-25 16:42:18 | 显示全部楼层
乙方al 发表于 2022-8-25 16:41
在打印文本之前让程序按下退格键

这并不是解决问题的好方法。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-25 17:12:54 | 显示全部楼层
自己顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-25 17:23:47 | 显示全部楼层    本楼为最佳答案   

这样可以吗
import keyboard
from pynput.keyboard import Key, Controller
fast_write = {'Q':'这是一条测试信息'}
rekeyboard = Controller()
def callback(x):
    if x.event_type == 'down':
        if x.name in fast_write:
            rekeyboard.type("\b"+fast_write[x.name])
keyboard.hook(callback)
keyboard.wait()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-25 17:27:12 | 显示全部楼层
本帖最后由 慕岚 于 2022-8-25 17:28 编辑


可以这样实现,这是按退格键来实现吗,因为有些时候,我的运行环境下不允许使用字母,一旦检测到字母,就不会有后面的操作了,不太明白这种方式
这个是通过快速退格来实现吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-25 17:30:50 | 显示全部楼层
慕岚 发表于 2022-8-25 17:27
可以这样实现,这是按退格键来实现吗,因为有些时候,我的运行环境下不允许使用字母,一旦检测到字母, ...

用了退格键的转义字符\b
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-25 17:33:06 | 显示全部楼层
临时号 发表于 2022-8-25 17:30
用了退格键的转义字符\b

好的,大佬除了用退格键这种方式,还有其他方式吗,我想输出的时候直接一句话,因为应用到部分环境下时会有检测,不允许出现数字以外的字符,一旦检测到其他字符就会停止输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-25 17:46:05 | 显示全部楼层
慕岚 发表于 2022-8-25 17:33
好的,大佬除了用退格键这种方式,还有其他方式吗,我想输出的时候直接一句话,因为应用到部分环境下时会 ...

这样呢
import keyboard
from pynput.keyboard import Key, Controller
fast_write = {'Q':'这是一条测试信息'}
rekeyboard = Controller()
def callback(x):
    if x.event_type == 'down':
        if x.name in fast_write:
            try:
                import msvcrt
                while msvcrt.kbhit():
                    msvcrt.getch()
            except ImportError:
                import sys, termios    #for linux/unix
                termios.tcflush(sys.stdin, termios.TCIOFLUSH)
            rekeyboard.type(fast_write[x.name])
keyboard.hook(callback)
keyboard.wait()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-25 17:51:15 | 显示全部楼层

这样依然会显示【Q这是一条测试信息】
大佬我想到了一个新的解决方法,就是我创建一个pyqt5的程序,然后绑定一个热键,这样执行任务的时候,是不是就不会再显示Q键了,我还没有实验,正在找解决办法,pyqt5的绑定热键方法也在查
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 00:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表