ホームページ > バックエンド開発 > C++ > .NET の特定のプロセスに関連付けられたすべての Windows を取得する方法

.NET の特定のプロセスに関連付けられたすべての Windows を取得する方法

Mary-Kate Olsen
リリース: 2025-01-06 01:27:38
オリジナル
954 人が閲覧しました

How to Retrieve All Windows Associated with a Specific Process in .NET?

.NET の特定のプロセスに属するすべてのウィンドウを取得する

特定のプロセスに関連付けられたすべてのウィンドウを列挙することは、さまざまな自動化にとって重要なタスクですプロセス間通信シナリオ。 .NET では、これは EnumThreadWindows API を活用することで実現できます。これにより、特定のスレッドによって作成されたすべてのウィンドウの反復が可能になります。

プロセス ID (PID) に基づいてプロセスに属するウィンドウを列挙するには、次の手順を実行します。これらの手順:

  1. 必要な DLL をインポートします。 [DllImport("user32.dll")]
  2. 列挙を処理するデリゲートを定義します: delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam)
  3. ウィンドウ ハンドルを保存する IEnumerable を作成します: varハンドル = 新しいList()
  4. EnumThreadWindows を使用してターゲット プロセスのすべてのスレッドを反復処理します:

    foreach (ProcessThread thread in Process.GetProcessById(processId).Threads)
         EnumThreadWindows(thread.Id, 
             (hWnd, lParam) => { handles.Add(hWnd); return true; }, IntPtr.Zero);
    ログイン後にコピー

使用例:

使用例を次に示します。 Windows Explorer プロセスによって作成されたすべてのウィンドウのウィンドウ タイトルを取得する EnumerateProcessWindowHandles メソッド:

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public class Program
{
    const uint WM_GETTEXT = 0x000D;

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, 
        StringBuilder lParam);

    [STAThread]
    static void Main(string[] args)
    {
        foreach (var handle in EnumerateProcessWindowHandles(
            Process.GetProcessesByName("explorer").First().Id))
        {
            StringBuilder message = new StringBuilder(1000);
            SendMessage(handle, WM_GETTEXT, message.Capacity, message);
            Console.WriteLine(message);
        }
    }

    static IEnumerable<IntPtr> EnumerateProcessWindowHandles(int processId)
    {
        var handles = new List<IntPtr>();

        foreach (ProcessThread thread in Process.GetProcessById(processId).Threads)
            EnumThreadWindows(thread.Id, 
                (hWnd, lParam) => { handles.Add(hWnd); return true; }, IntPtr.Zero);

        return handles;
    }
}
ログイン後にコピー

以上が.NET の特定のプロセスに関連付けられたすべての Windows を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート