如何从shell获取windows中的窗口标题

lov*_*nux 8 windows shell

我可以使用命令通过 Windows shell 设置标题,title some string 但是如何获取某个进程的标题?

我试过 command tasklist /v,但我的标题非常非常长,这就是为什么我只收到部分标题。我也在考虑 wmic 实用程序,但找不到所需的标志。

Krz*_*ski 10

现在的 shell 是 Powershell:

Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle -AutoSize
Run Code Online (Sandbox Code Playgroud)

对于所选过程的标题:

(Get-Process -id 8748 -ErrorAction SilentlyContinue).MainWindowTitle
Run Code Online (Sandbox Code Playgroud)


Jos*_*efZ 8

下面的脚本显示tasklist /v /FO:CSV不截断长窗口标题并独立解决两个任务:

  • 第 1 部分以格式显示所有有用的窗口标题以及图像名称和 PID csvfindstr用于将输出范围缩小到真正有用的标题。
  • 第 2 部分显示从(我自己的cmd)执行脚本的命令提示符窗口的 PID 和标题。

脚本

@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion

rem Part 1: ALL USEFUL WINDOW TITLES
echo(
set "_myExcludes=^\"conhost ^\"dwm ^\"nvxdsync ^\"nvvsvc ^\"dllhost ^\"taskhostex"
for /F "tokens=1,2,8,* delims=," %%G in ('
  tasklist /V /fo:csv ^| findstr /V "%_myExcludes%"
                                        ') do (
    if NOT "%%~J"=="N/A" echo %%G,%%~H,%%J
)

rem Part 2: MY OWN cmd WINDOW TITLE
echo(
set "_myTitleTail= - %~0"
for /F "tokens=1,2,8,* delims=," %%G in ('
  tasklist /V /fo:csv ^| findstr /I /C:"%_myTitleTail%"
                                        ') do (
    set "_myTitleBatch=%%~J"
    set "_myCmdPIDno=%%~H"
)
call set "_myCmdTitle=%%_myTitleBatch:%_myTitleTail%=%%"
echo _myCmdPIDno=%_myCmdPIDno%
SETLOCAL EnableDelayedExpansion
  echo _myCmdTitle=!_myCmdTitle!
ENDLOCAL
Run Code Online (Sandbox Code Playgroud)

输出

==> TITLE ...but my title is very, very long, that's why I receive only partial title. Also 
I was thinking about wmic utility, but can't find desired flag!!!

==> .\SU\378790.bat

"Image Name",PID,"Window Title"
"VDeck.exe",4032,"VIA HD Audio Deck"
"chrome.exe",5760,"How to get window title in windows from shell - Super User - Google Chrom
e"
"powershell_ise.exe",5568,"Windows PowerShell ISE"
"cmd.exe",4980,"...but my title is very, very long, that's why I receive only partial title.
 Also I was thinking about wmic utility, but can't find desired flag!!! - .\SU\378790.bat"
"PSPad.exe",5108,"378790.bat"
"cmd.exe",3888,"d:\bat"
"cmd.exe",5648,"Administrator: Command Prompt"

_myCmdPIDno=4980
_myCmdTitle=...but my title is very, very long, that's why I receive only partial title. Als
o I was thinking about wmic utility, but can't find desired flag!!!

==>
Run Code Online (Sandbox Code Playgroud)

资源(必读):


igl*_*vzx 5

AutoHotkey可以帮助您实现这一目标。让我们编写一个脚本,将所有打开的窗口的进程和标题输出到stdout

WinGet, windows, list

Loop, %windows%
{
    id := windows%A_Index%
    WinGet, process, ProcessName, ahk_id %id%
    WinGetTitle, title, ahk_id %id%
    FileAppend, %process% %title%`n, *
}

ExitApp
Run Code Online (Sandbox Code Playgroud)

编译脚本以获得可移植的.exe

现在,我们可以从 Windows 命令行运行以下命令:

MyScript.exe | more
Run Code Online (Sandbox Code Playgroud)

例子:

截屏