Powershellのプロセスですべてのウィンドウハンドルを取得するにはどうすればよいですか?

ロイナミール

私はこのスクリプトを持っています

Get-Process | Where-Object {$_.MainWindowTitle -like "*total*"}  

この情報をもたらすもの

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName                                                                     
-------  ------    -----      ----- -----   ------     -- -----------                                                                     
    362      23    19432      32744   324     3.86   6880 TotalCmd64                                                                      

だから私はプロセスIDを持っています。

*Total*アプリケーションは、独自の多くの開いているウィンドウを持っています。

質問

すべてのウィンドウを(powershellを使用して)反復するにはどうすればよいですか(ウィンドウハンドルを取得できるように)?

NB:私の目標は何ですか?

ここに画像の説明を入力してください

Visual Studioを(たとえば)見てください:アプリケーションを実行しています。
ただし、アプリケーションには独自の開いているウィンドウがあります。

サブウィンドウをTOPMOsTにしたい。ウィンドウを一番上にするスクリプトすでにあります。しかし、私はそのハンドル番号が必要です。

OK

まず、WASPをチェックして、ニーズに合っているかどうかを確認する必要があります:http//wasp.codeplex.com/

次に、ここにあるコードを変更しましたhttp://social.technet.microsoft.com/Forums/windowsserver/en-US/c3cd3982-ffc5-4c17-98fc-a09c555e121c/get-all-child-window-titles?forum= winserverpowershell

MainWindowHandleを入力として受け取り、子ハンドルIDを持つオブジェクトを返す関数を作成します(ウィンドウタイトルがある場合はそれも一覧表示します)。

これらの方法の1つがあなたに必要なものを与えることを願っています:)

function Get-ChildWindow{
[CmdletBinding()]
param (
    [Parameter(ValueFromPipeline = $true, ValueFromPipelinebyPropertyName = $true)]
    [ValidateNotNullorEmpty()]
    [System.IntPtr]$MainWindowHandle
)

BEGIN{
    function Get-WindowName($hwnd) {
        $len = [apifuncs]::GetWindowTextLength($hwnd)
        if($len -gt 0){
            $sb = New-Object text.stringbuilder -ArgumentList ($len + 1)
            $rtnlen = [apifuncs]::GetWindowText($hwnd,$sb,$sb.Capacity)
            $sb.tostring()
        }
    }

    if (("APIFuncs" -as [type]) -eq $null){
        Add-Type  @"
        using System;
        using System.Runtime.InteropServices;
        using System.Collections.Generic;
        using System.Text;
        public class APIFuncs
          {
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            public static extern int GetWindowText(IntPtr hwnd,StringBuilder lpString, int cch);

            [DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
            public static extern IntPtr GetForegroundWindow();

            [DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
            public static extern Int32 GetWindowThreadProcessId(IntPtr hWnd,out Int32 lpdwProcessId);

            [DllImport("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
            public static extern Int32 GetWindowTextLength(IntPtr hWnd);

            [DllImport("user32")]
            [return: MarshalAs(UnmanagedType.Bool)]
            public static extern bool EnumChildWindows(IntPtr window, EnumWindowProc callback, IntPtr i);
            public static List<IntPtr> GetChildWindows(IntPtr parent)
            {
               List<IntPtr> result = new List<IntPtr>();
               GCHandle listHandle = GCHandle.Alloc(result);
               try
               {
                   EnumWindowProc childProc = new EnumWindowProc(EnumWindow);
                   EnumChildWindows(parent, childProc,GCHandle.ToIntPtr(listHandle));
               }
               finally
               {
                   if (listHandle.IsAllocated)
                       listHandle.Free();
               }
               return result;
           }
            private static bool EnumWindow(IntPtr handle, IntPtr pointer)
           {
               GCHandle gch = GCHandle.FromIntPtr(pointer);
               List<IntPtr> list = gch.Target as List<IntPtr>;
               if (list == null)
               {
                   throw new InvalidCastException("GCHandle Target could not be cast as List<IntPtr>");
               }
               list.Add(handle);
               //  You can modify this to check to see if you want to cancel the operation, then return a null here
               return true;
           }
            public delegate bool EnumWindowProc(IntPtr hWnd, IntPtr parameter);
           }
"@
        }
}

PROCESS{
    foreach ($child in ([apifuncs]::GetChildWindows($MainWindowHandle))){
        Write-Output (,([PSCustomObject] @{
            MainWindowHandle = $MainWindowHandle
            ChildId = $child
            ChildTitle = (Get-WindowName($child))
        }))
    }
}
}

次のように、Get-Processの結果から直接パイプすることができます。

Get-Process | Where-Object {$_.ProcessName -eq 'OUTLOOK'} | Get-ChildWindow

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Windowsで現在のプロセスのすべての子プロセスのハンドルを取得するにはどうすればよいですか?

分類Dev

VBA MsgBoxのウィンドウハンドルを取得するにはどうすればよいですか?

分類Dev

Javaで現在開いているウィンドウ/プロセスのリストを取得するにはどうすればよいですか?

分類Dev

MatLabでマウスの位置/動作を介してプロットラインハンドルを取得するにはどうすればよいですか?

分類Dev

すべてのグローバル変数をウィンドウから非表示にし、ウィンドウ自体にアクセスするようにTypeScriptを構成するにはどうすればよいですか?

分類Dev

特定のプロセスウィンドウサイズを取得するにはどうすればよいですか?

分類Dev

別のプロセスからモーダルダイアログウィンドウを表示するにはどうすればよいですか?

分類Dev

プロンプトの確認ウィンドウで削除アクションをキャンセルするにはどうすればよいですか?

分類Dev

virt-managerプロセスは、すべてのウィンドウを閉じた後も実行を続けます。どうすればよいですか?

分類Dev

Xorgのすべてのウィンドウのリストを取得するにはどうすればよいですか?

分類Dev

すべてのbashプロセスをバックグラウンドとして実行するにはどうすればよいですか?

分類Dev

ウィンドウを他のすべてのウィンドウの上に表示するにはどうすればよいですか?

分類Dev

ドロップダウンリストの値を取得するにはどうすればよいですか

分類Dev

JNAを使用してJavaでChromeプロセスのハンドルを取得するにはどうすればよいですか

分類Dev

特定のモニターに存在するすべてのウィンドウのHWNDを取得するにはどうすればよいですか?

分類Dev

ウィンドウの最小化をインターセプトしてキャンセルするにはどうすればよいですか?

分類Dev

Visual C ++のウィンドウからコントロールのリストを取得するにはどうすればよいですか?

分類Dev

Excel VBAを使用してWindowsアプリケーションプロセスのmainwindowtitleプロパティとウィンドウステータスプロパティを取得するにはどうすればよいですか?

分類Dev

スクリプトからの引数を使用して新しいPowershellウィンドウを開始するにはどうすればよいですか?

分類Dev

PostMessage:ウィンドウのないプロセスにメッセージを投稿するにはどうすればよいですか?

分類Dev

ウィンドウを閉じる前に、未完了の待機中のプロセスを検出するにはどうすればよいですか?

分類Dev

文字列APIで始まるすべての呼び出しをエクスプレスミドルウェアのハンドラーにルーティングするにはどうすればよいですか?

分類Dev

ADのDepartmentからすべてのstaffNamesをプルして、ドロップダウンに配置するにはどうすればよいですか?

分類Dev

winapiを使用するウィンドウで現在アクティブなウィンドウのプロセス名を取得するにはどうすればよいですか?

分類Dev

セキュリティグループを使用してAWSEC2インスタンスからのすべてのアウトバウンドトラフィックを拒否するにはどうすればよいですか?

分類Dev

XMonadのすべてのフローティングウィンドウから境界線を削除するにはどうすればよいですか?

分類Dev

スナップショットのプロセスウォークを実行した後、すべてのプロセスの完全なコマンドラインを取得するにはどうすればよいですか?

分類Dev

19.10でエクスプローラウィンドウのパスを取得するにはどうすればよいですか?

分類Dev

Javaの文字列配列のすべてのドロップダウン値を取得するにはどうすればよいですか?

Related 関連記事

  1. 1

    Windowsで現在のプロセスのすべての子プロセスのハンドルを取得するにはどうすればよいですか?

  2. 2

    VBA MsgBoxのウィンドウハンドルを取得するにはどうすればよいですか?

  3. 3

    Javaで現在開いているウィンドウ/プロセスのリストを取得するにはどうすればよいですか?

  4. 4

    MatLabでマウスの位置/動作を介してプロットラインハンドルを取得するにはどうすればよいですか?

  5. 5

    すべてのグローバル変数をウィンドウから非表示にし、ウィンドウ自体にアクセスするようにTypeScriptを構成するにはどうすればよいですか?

  6. 6

    特定のプロセスウィンドウサイズを取得するにはどうすればよいですか?

  7. 7

    別のプロセスからモーダルダイアログウィンドウを表示するにはどうすればよいですか?

  8. 8

    プロンプトの確認ウィンドウで削除アクションをキャンセルするにはどうすればよいですか?

  9. 9

    virt-managerプロセスは、すべてのウィンドウを閉じた後も実行を続けます。どうすればよいですか?

  10. 10

    Xorgのすべてのウィンドウのリストを取得するにはどうすればよいですか?

  11. 11

    すべてのbashプロセスをバックグラウンドとして実行するにはどうすればよいですか?

  12. 12

    ウィンドウを他のすべてのウィンドウの上に表示するにはどうすればよいですか?

  13. 13

    ドロップダウンリストの値を取得するにはどうすればよいですか

  14. 14

    JNAを使用してJavaでChromeプロセスのハンドルを取得するにはどうすればよいですか

  15. 15

    特定のモニターに存在するすべてのウィンドウのHWNDを取得するにはどうすればよいですか?

  16. 16

    ウィンドウの最小化をインターセプトしてキャンセルするにはどうすればよいですか?

  17. 17

    Visual C ++のウィンドウからコントロールのリストを取得するにはどうすればよいですか?

  18. 18

    Excel VBAを使用してWindowsアプリケーションプロセスのmainwindowtitleプロパティとウィンドウステータスプロパティを取得するにはどうすればよいですか?

  19. 19

    スクリプトからの引数を使用して新しいPowershellウィンドウを開始するにはどうすればよいですか?

  20. 20

    PostMessage:ウィンドウのないプロセスにメッセージを投稿するにはどうすればよいですか?

  21. 21

    ウィンドウを閉じる前に、未完了の待機中のプロセスを検出するにはどうすればよいですか?

  22. 22

    文字列APIで始まるすべての呼び出しをエクスプレスミドルウェアのハンドラーにルーティングするにはどうすればよいですか?

  23. 23

    ADのDepartmentからすべてのstaffNamesをプルして、ドロップダウンに配置するにはどうすればよいですか?

  24. 24

    winapiを使用するウィンドウで現在アクティブなウィンドウのプロセス名を取得するにはどうすればよいですか?

  25. 25

    セキュリティグループを使用してAWSEC2インスタンスからのすべてのアウトバウンドトラフィックを拒否するにはどうすればよいですか?

  26. 26

    XMonadのすべてのフローティングウィンドウから境界線を削除するにはどうすればよいですか?

  27. 27

    スナップショットのプロセスウォークを実行した後、すべてのプロセスの完全なコマンドラインを取得するにはどうすればよいですか?

  28. 28

    19.10でエクスプローラウィンドウのパスを取得するにはどうすればよいですか?

  29. 29

    Javaの文字列配列のすべてのドロップダウン値を取得するにはどうすればよいですか?

ホットタグ

アーカイブ