在python中关闭OSK(tabtip)

问题描述 投票:0回答:2

我正在使用以下代码来显示 osk

os.system("C:\\PROGRA~1\\COMMON~1\\MICROS~1\\ink\\tabtip.exe")

这段代码成功打开了osk,但是当我尝试使用下面的代码关闭它时

os.system("TASKKILL /F /IM tabtip.exe")

它给出的错误是

ERROR: The process "TabTip.exe" with PID 10188 could not be terminated.
Reason: Access is denied.

发生此错误是因为我的脚本没有管理员权限,但我不明白为什么我需要它,因为我自己启动了程序,而且通常当我使用鼠标关闭应用程序时,它不需要管理员权限。 关于如何解决它的任何想法....

感谢您的阅读:)

python python-3.x kiosk kiosk-mode on-screen-keyboard
2个回答
2
投票

我最终使用 comtypes 而不是 win32com:

import win32gui
from ctypes import HRESULT
from ctypes.wintypes import HWND
from comtypes import IUnknown, GUID, COMMETHOD
import comtypes.client

class ITipInvocation(IUnknown):
    _iid_ = GUID("{37c994e7-432b-4834-a2f7-dce1f13b834b}")
    _methods_ = [
        COMMETHOD([], HRESULT, "Toggle",
                  ( ['in'], HWND, "hwndDesktop" )
                  )
        ]

dtwin = win32gui.GetDesktopWindow();
ctsdk = comtypes.client.CreateObject("{4ce576fa-83dc-4F88-951c-9d0782b4e376}", interface=ITipInvocation)
ctsdk.Toggle(dtwin);
comtypes.CoUninitialize()

0
投票

我也遇到了同样的问题。

就像你说的,用

os.system("C:\\PROGRA~1\\COMMON~1\\MICROS~1\\ink\\tabtip.exe")
打开 TabTip 可以,但最小化后它不会再次打开。

我发现使用

os.system('wmic process where name="TabTip.exe" delete'
来停止键盘进程是有效的。

由于某种原因,键盘将保留在屏幕上,直到最小化,但现在再次运行该过程时,它会为您弹出。

此答案中的评论归功于@OmerSS:https://stackoverflow.com/a/61326383/4322062

© www.soinside.com 2019 - 2024. All rights reserved.