Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
控制屏幕键盘python_Python_Windows_Subprocess_On Screen Keyboard - Fatal编程技术网

控制屏幕键盘python

控制屏幕键盘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

我有一个触摸屏应用程序,正在尝试在应用程序需要输入时启动屏幕键盘,然后关闭键盘以释放屏幕空间

下面的代码将启动键盘,但当我尝试终止()进程时,子进程返回0(成功),但应用程序保持打开状态

如何关闭/最小化键盘以释放屏幕空间

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
复制。在这种情况下,您可以使用Windows
taskkill
命令杀死cmd及其子进程。或者,如果你有PyWin32,你可以调用它。或者使用ctypes调用这些WinAPI函数。