在 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.

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

感谢阅读:)

解决方法

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...