首页 > 解决方案 > 在 python 中关闭 OSK (tabtip)

问题描述

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

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

谢谢阅读 :)

标签: pythonpython-3.xkioskkiosk-modeon-screen-keyboard

解决方案


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

推荐阅读