在 python 中关闭 OSK (tabtip)

Posted

技术标签:

【中文标题】在 python 中关闭 OSK (tabtip)【英文标题】:Closing OSK (tabtip) in python 【发布时间】:2021-06-18 10:15:17 【问题描述】:

我正在使用以下代码来显示 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.

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

感谢阅读:)

【问题讨论】:

这篇文章是关于显示 tabtip 没有关闭它,也没有在 python 中:? 是的,该帖子解释说 tabtip.exe 实际上正在调用 COM 对象,以便它可以调用切换方法来隐藏/显示由服务控制的窗口。显然,您需要使用win32com.client 在 python 中创建一个 COM 对象,但这确实留给读者作为练习。 哦,谢谢,我会查看细节并分享回来,谢谢 :) 不客气 - 祝你好运! :) C 版本的代码太复杂,我无法将其转换为 python。你能帮我理解一下吗。我了解我需要创建一个 COM 对象然后在其上调用切换方法的部分。但是我必须为什么类创建对象? 【参考方案1】:

我最终使用了 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()

【讨论】:

是的,我也在阅读 comtypes 同时 @Simon Mourier 建议我 here

以上是关于在 python 中关闭 OSK (tabtip)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 macOS 中关闭 OpenCV 窗口(Python 3)?

在 python unittest 中关闭一些打印

如何在 Python / Selenium 中关闭麦克风/相机弹出窗口?

如何在 python 程序中关闭 Ctrl-C 上的套接字连接

是否需要在 Flask 应用程序中关闭 python SQL 连接?

如何在命令窗口中关闭闪烁的光标?