Find all window titles of application through command line
You can use the following PowerShell script:
Add-Type @"
using System;
using System.Runtime.InteropServices;
using System.Text;
public class Win32 {
public delegate void ThreadDelegate(IntPtr hWnd, IntPtr lParam);
[DllImport("user32.dll")]
public static extern bool EnumThreadWindows(int dwThreadId,
ThreadDelegate lpfn, IntPtr lParam);
[DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern int GetWindowText(IntPtr hwnd,
StringBuilder lpString, int cch);
[DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern Int32 GetWindowTextLength(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern bool IsIconic(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern bool IsWindowVisible(IntPtr hWnd);
public static string GetTitle(IntPtr hWnd) {
var len = GetWindowTextLength(hWnd);
StringBuilder title = new StringBuilder(len + 1);
GetWindowText(hWnd, title, title.Capacity);
return title.ToString();
}
}
"@
$windows = New-Object System.Collections.ArrayList
Get-Process | Where { $_.MainWindowTitle } | foreach {
$_.Threads.ForEach({
[void][Win32]::EnumThreadWindows($_.Id, {
param($hwnd, $lparam)
if ([Win32]::IsIconic($hwnd) -or [Win32]::IsWindowVisible($hwnd)) {
$windows.Add([Win32]::GetTitle($hwnd))
}}, 0)
})}
Write-Output $windows
I wrote a program that allows filtering this list and brings the selected window to the front: activatewindow
Related videos on Youtube
AndroidX
Updated on September 18, 2022Comments
-
AndroidX over 1 year
In Windows if I want to list all instances (and window titles) of a given application from the command line I run this command:
tasklist /fi "IMAGENAME eq notepad.exe" /v
However I can't do the same thing for applications such as LibreOffice. For example no matter how many different Writer windows I may have open, there always is only one
soffice.bin
and onesoffice.exe
process. Using thetasklist
command I can only see one window title associated withsoffice.bin
process.Same thing happens with Microsoft Word (only one
winword.exe
process exists and is associated with only one window title).Is there any way I can list all the window titles of such applications through the command line?
-
LotPings almost 6 yearscmdow shows some more entries.
-
Aulis Ronkainen almost 6 yearsDoes this help: superuser.com/questions/378790/… ? See the answer with no AutoHotkey.
-
AndroidX almost 6 yearsThanks, both
cmdow
andAutoHotkey
give me the window titles. I was hoping for a native solution without third party software though but I don't think it is possible.
-
-
AndroidX over 2 yearsIt works (not in PowerShell 2.0 though).