web-dev-qa-db-ja.com

WSH、WMIなどを使用してWindowsのウィンドウハンドルにアクセスする方法はありますか?

WSH、WMIなどを使用してWindowsのウィンドウハンドルにアクセスする方法はありますか?ウィンドウに常時表示のフラグを付けたいだけです。理想的には、これにはWindowsスクリプトHostを使用します。

(WSHとしてもタグ付けする必要があります)。

よろしく、

4
Jotham

WSHで取得するには、COM DLLにあります このCodeProjectの記事 )を使用できます。これを使用すると、次のようにウィンドウハンドルを取得できます。

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

これは PowerShell でも非常に簡単です。

例:

(Get-Process powershell).MainWindowHandle

このグラブは、PowerShellプロセスのウィンドウハンドルです。


あなたの主な目標がウィンドウを一番上にすることである場合でも、 DeskPins :のような多くのプログラムがあります。

alt text

3
John T

それがすでに解決されていれば、それは大規模なネクロと許しであることを私は知っていますが、私はしばらくの間それと苦労してきました、そしてここに私が書いた本当に簡単な解決策があります:

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
    }
}

ウィンドウが見つからなかった場合は「0」を返し、ウィンドウハンドルを返します。 $ winTitle文字列に一致するウィンドウがさらに見つかった場合は、$ instance番号を返します(0は最初のウィンドウ、1秒などを意味します)。

例:

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

ウィンドウに常時表示のフラグを付けたいだけです。

eusingの自動ウィンドウマネージャーを見てください。指定したすべてのウィンドウを自動的に常に上に保持するだけでなく、透明効果を適用することもできます0%(完全に透明)から100%(固体)まで。

自動ウィンドウマネージャーはフリーウェアです。

0
Molly7244