在 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 / Selenium 中关闭麦克风/相机弹出窗口?
如何在 python 程序中关闭 Ctrl-C 上的套接字连接