使用EnumWindowsは、要件を満たすために、ウィンドウを見つけます

オリジナル: 使用EnumWindowsはあなたの窓の要件を満たすことが見いださ

Windowsアプリケーションの開発では、あなたが使用することができ、他のウィンドウを操作する必要がありEnumWindows、これらのウィンドウを列挙するために、このAPIを。

この記事では、使用について説明EnumWindows列挙すると、あなたは(そのようなQQ / TIMウィンドウなど)を気にウィンドウを見つけること。


EnumWindows

あなたは、Microsoftの公式サイトで学ぶことができますEnumWindows

C#のコードを使用するにはEnumWindows、あなたはP /呼び出しコード呼び出し書き込みプラットフォームに必要です。私は、ブログ内の別のメソッドが自動的にコードを呼び出し、このようなプラットフォームを生成することができます使用します。

私はここに直接投稿しました:

[DllImport("user32.dll")]
public static extern int EnumWindows(WndEnumProc lpEnumFunc, int lParam);

   
   
  
  
  • 1
  • 2

すべてのトップレベルの窓から

公式のAPIは、この文書に記述されています。

アプリケーション定義のコールバック関数に、順番に、各ウィンドウのハンドルを渡すことによって、画面上のすべてのトップレベルウィンドウを列挙します。

画面上のすべてのトップレベルウィンドウを通じ、その後、コールバックハンドラトラバース各ウィンドウに渡されました。

:ただし、すべてのウィンドウがトップレベルウィンドウを横断している、いくつかの非ウィンドウシステムを参照してくださいトップに横断するがある発言セクションをEnumWindows

すべてのウィンドウのセットがに到達するために横断する必要がある場合はそのため、あなたは以下のコードを使用することができます。

public static IReadOnlyList<int> EnumWindows()
{
    var windowList = new List<int>();
    EnumWindows(OnWindowEnum, 0);
    return windowList;

    bool OnWindowEnum(int hwnd, int lparam)
    {
        // 可自行加入一些过滤条件。
        windowList.Add(hwnd);
        return true;
    }
}

   
   
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

指定されたクラス名またはウィンドウのタイトルとトラバーサル

我々は、ウィンドウをフィルタリングするために使用することができますいくつかのWin32 APIを追加する必要があります。以下は、私たちが使用される2つのとおりです。

// 获取窗口的类名。
[DllImport("user32.dll")]
private static extern int GetClassName(int hWnd, StringBuilder lpString, int nMaxCount);

// 获取窗口的标题。
[DllImport("user32")]
public static extern int GetWindowText(int hwnd, StringBuilder lptrString, int nMaxCount);

   
   
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

ウィンドウクラス名を検索する方法がそう:

public static IReadOnlyList<int> FindWindowByClassName(string className)
{
    var windowList = new List<int>();
    EnumWindows(OnWindowEnum, 0);
    return windowList;

    bool OnWindowEnum(int hwnd, int lparam)
    {
        var lpString = new StringBuilder(512);
        GetClassName(hwnd, lpString, lpString.Capacity);
        if (lpString.ToString().Equals(className, StringComparison.InvariantCultureIgnoreCase))
        {
            windowList.Add(hwnd);
        }

        return true;
    }
}

   
   
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

この方法を使用して、我々は渡すことができ"txguifoundation"たQQ / TIMウィンドウを:

var qqHwnd = FindWindowByClassName("txguifoundation");

   
   
  
  
  • 1

ウィンドウのタイトル、またはフィルタなどのタイトルを取得するには、それが使用されていますGetWindowText

QQ / TIMでは、チャットウィンドウのタイトルは、他のパーティーやグループチャット名の名前です。

var lptrString = new StringBuilder(512);
GetWindowText(hwnd, lptrString, lptrString.Capacity);

   
   
  
  
  • 1
  • 2

参考資料


私のブログはで開始されhttps://blog.walterlv.com/、および特色CSDNから解放されますが、それはめったに一度放出されない更新されます。

あなたが表示された場合は任意のは、ブログ、してください共有の内容を理解していません。私が建てDOTNET職業技術学院が参加することを歓迎します。

クリエイティブコモンズライセンス

この作品は、ある非営利- -同一条件許諾4.0の国際ライセンス契約クリエイティブ・コモンズのライセンスのために。転載、使用、再投稿へようこそ、しかし陸毅によって署名記事を保つようにしてください(リンク含む:https://walterlv.blog.csdn.net/は)、商業目的のために使用してはならない、記事に基づいて作業が同一のライセンスを変更するようにしてくださいリリース。ご質問があれば、してください私に連絡

公開された382元の記事 ウォンの賞賛232 ビュー470 000 +

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/12051976.html