用于切换显示触摸输入面板的 PowerShell 批处理文件

问题描述 投票:0回答:3

我需要一个批处理文件,当我运行时,它会在隐藏时显示触摸输入面板(虚拟键盘),否则如果已经可见,则隐藏它。触摸输入面板的路径是:

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
windows powershell batch-file process
3个回答
1
投票

这应该有效:

# 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() 方法工作得很好,你应该使用这个


0
投票

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 应用程序。

-1
投票

你们有更新吗?

这对我不起作用。关闭脚本的操作是我使用物理键盘。 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并再次关闭。

© www.soinside.com 2019 - 2024. All rights reserved.