我需要一个批处理文件,当我运行时,它会在隐藏时显示触摸输入面板(虚拟键盘),否则如果已经可见,则隐藏它。触摸输入面板的路径是:
C:\Program Files\Common Files\microsoft共享\ink abtip.exe
这是我迄今为止尝试过的:
FOR /f "tokens=*" %%a IN ('TASKLIST ^| FINDSTR /i TabTip.exe') DO
( IF "%ErrorLevel%"=="0"
( TASKKILL /IM TabTip )
ELSE
( start "C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe" )
)
PAUSE
这应该有效:
# Settings
$ProcessName = "TabTip"
$Executable = "C:\Program Files\Common Files\microsoft shared\ink\TabTip.exe"
# Get process
$Process = Get-Process -Name $ProcessName -ErrorAction SilentlyContinue
# Is it running?
If($Process)
{
# Running
# Kill this process
$Process.Kill()
}
Else
{
# Not running
# Start the process
Start-Process $Executable
}
我试过用
杀死它Stop-Process $Process
以及
Stop-Process $Process.Id
但我总是被拒绝访问(不知道为什么)。
但是,Kill() 方法工作得很好,你应该使用这个
PowerShell 现在可能是更好的选择(请参阅现有答案),但它可以通过一行轻松地批量完成(甚至不需要
for
循环):
TASKLIST | FINDSTR /i "TabTip.exe" && TASKKILL /f /IM TabTip.exe || "C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe"
为了更好的可读性和可扩展性:
TASKLIST | FINDSTR /i "TabTip.exe" && (
TASKKILL /f /IM TabTip.exe 2>nul
echo killed.
) || (
"C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe"
echo started.
)
为什么你的代码不起作用:
for
语法:开头 (
必须与 do
%errorlevel%
在这里没有意义,因为for
循环中的命令是在一个新的独立进程中执行的,所以你不会在原始进程(你的脚本)中返回错误级别(又名。它和以前一样循环)。/f
(强制)开关 taskkill
,因为 TabTip 是少数几个在关闭请求时无法正确退出的程序之一。start
语法错误:start
将第一个带引号的字符串作为窗口标题(可以为空),所以它应该是start "" "blahblah\app.exe"
start
命令,因为您正在启动 GUI 应用程序。你们有更新吗?
这对我不起作用。关闭脚本的操作是我使用物理键盘。 Kill() 本身不会关闭我电脑上的 TabTip。
# Settings
$ProcessName = "TabTip"
$Executable = "C:\Program Files\Common Files\microsoftshared\ink\TabTip.exe"
# Get process
$Process = Get-Process -Name $ProcessName -ErrorAction SilentlyContinue
Start-Process $Executable
sleep 2
If($Process)
{
# Kill this process
$Process.Kill()
}
计划是只快速打开Tabtip并再次关闭。