【问题标题】:Closing OSK (tabtip) in python在 python 中关闭 OSK (tabtip)
【发布时间】: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 对象然后在其上调用切换方法的部分。但是我必须为什么类创建对象?

标签: python python-3.x kiosk kiosk-mode on-screen-keyboard


【解决方案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
猜你喜欢
  • 1970-01-01
  • 2013-12-11
  • 2013-01-22
  • 2023-03-20
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多