控制屏幕键盘python
我有一个触摸屏应用程序,正在尝试在应用程序需要输入时启动屏幕键盘,然后关闭键盘以释放屏幕空间 下面的代码将启动键盘,但当我尝试终止()进程时,子进程返回0(成功),但应用程序保持打开状态 如何关闭/最小化键盘以释放屏幕空间控制屏幕键盘python,python,windows,subprocess,on-screen-keyboard,Python,Windows,Subprocess,On Screen Keyboard,我有一个触摸屏应用程序,正在尝试在应用程序需要输入时启动屏幕键盘,然后关闭键盘以释放屏幕空间 下面的代码将启动键盘,但当我尝试终止()进程时,子进程返回0(成功),但应用程序保持打开状态 如何关闭/最小化键盘以释放屏幕空间 import subprocess import platform class keyboard_mixin(object): def __init__(self): self.keyboard_process = None def sho
import subprocess
import platform
class keyboard_mixin(object):
def __init__(self):
self.keyboard_process = None
def show(self):
if platform.system() == "Linux":
try:
cmd_path = "xvkbd"
self.keyboard_process = subprocess.Popen([cmd_path])
return
except OSError:
pass
elif platform.system() == "Windows":
try:
cmd_path = "C:\\Program Files\\Common Files\\Microsoft Shared\\ink\\TabTip.exe"
self.keyboard_process = subprocess.Popen([cmd_path], shell=True)
return
except OSError:
pass
try:
cmd_path = "C:\\WINDOWS\\system32\\osk.exe"
self.keyboard_process = subprocess.Popen([cmd_path], shell=True)
return
except OSError:
pass
def hide(self):
# TODO: This does not close on windows platform
if self.keyboard_process is not None:
self.keyboard_process.terminate()
self.keyboard_process = None
if __name__ == '__main__':
osk = keyboard_mixin()
osk.show()
osk.hide()
实际上正在调用哪个Windows屏幕键盘?TabTip,或osk?您使用了
shell=True
,因此进程句柄用于cmd.exe
。没有理由使用shell=True
。TabTip和osk都无法关闭。不管哪一个最终能起作用,我都提供了简单的选项。至于'shell=True',如果没有此Popen,则会引发“WindowsError:[Error 740]请求的操作需要提升”,我明白了。当CreateProcess
失败时,shell会返回到ShellExecuteEx
。这又设置了调用CreateProcess
来运行osk.exe的方法,该方法无法通过Popen
复制。在这种情况下,您可以使用Windowstaskkill
命令杀死cmd及其子进程。或者,如果你有PyWin32,你可以调用它。或者使用ctypes调用这些WinAPI函数。