Is there a way to get access to a window handle in windows using WSH, or WMI or similar?

To grab it with WSH, you can use the COM DLL found in this CodeProject article. Using this, you can then grab a window handle like so:

Set obj = CreateObject("APIWrapperCOM.APIWrapper")
winHandle = obj.FindWindow("test.txt - Notepad")

This is also very easy in PowerShell.

example:

(Get-Process powershell).MainWindowHandle

This grab's the window handle of the PowerShell process.


Although if your main goal is to make a window topmost, there are many programs for this such as DeskPins:

alt text


I know it's a massive necro and pardon if it was solved already, but I've been struggling with it for some time now and here's a really simple solution I wrote:

function WinExist($winTitle, $instance = 0)
{
    $h = Get-Process | Where-Object { $_.MainWindowTitle -match $winTitle } | ForEach-Object { $_.MainWindowHandle }
    if ( $h -eq $null )
    {
        return 0
    }
    else
    {
        if ( $h -is [System.Array] )
        {

            $h = $h[$instance]
        }
        return $h
    }
}

Returns "0" if window wasn't found, or the window handle. If found more windows matching the $winTitle string it returns the $instance number (0 means first window, 1 second, etc.).

Example:

# WinExist str_WindowTitle int_WindowNumber
# returns the handle of second notepad window (if more than 1 opened)
$hwnd = WinExist "notepad" 1