DOBON.NETプログラミング道掲示板

■34381 / 1階層)  プロセスからウインドウを取得
□投稿者/ 魔界の仮面弁士 大御所(1254回)-(2019/11/12(Tue) 10:28:08)
  • アイコンNo34379に返信(/400さんの記事)
    > ウインドウの一覧を先に取得して
    ここでいうウィンドウとは、何を指していますか?

    トップレベルウィンドウ(EnumWindows)だけではなく、
    TextBox や Button、あるいは ComboBox のエディタ部とリスト部などといった、
    hWnd を持つオブジェクトすべてを指しているのでしょうか? (EnumChildWindows)


    > それをプロセスで束ねてく方法は分かるのですが、

    別案を求めるのであれば、そもそも現状、どうやって取得しているのかを
    示してもらった方が答えやすいです。たとえばこういった処理を行っているのでしょうか。
    https://www.atmarkit.co.jp/fdotnet/dotnettips/233enumwin/enumwin.html

    あるいは EnumWindows のコールバック結果を GetWindowThreadProcessId で判定しているとか?
    https://smdn.jp/programming/tips/enumwindows/



    > それだと時間がかかるので
    まず、列挙の目的は何でしょうか?
    そして現状の方法だとどの程度かかっていて、それをどの程度にまで短縮させたいのでしょうか?
    また、現状の処理で特に時間がかかっているのは、どの部分でしょうか?


    > ただそれだと一つのプロセスから複数のウインドウを表示しているような場合取得
    > できません
    どういう処理を書いているか分かりませんが、単一ウィンドウを取得する方法の場合、
    十分に短い時間で処理できているのでしょうか?

    ちなみに Process.MainWinowHandle プロパティの実装は、
    EnumWindows + GetWindowThreadProcessId で判定するという手法で実装されています。
    加えて、それがメインウィンドウであるかの判定のために、
    GetWindow(HWND, GW_OWNER) が IntPtr.Zero かつ IsWindowVisible(HWND) が True で
    あるかどうかも検査しています。アンマネージコードでも構わなければ、上記手法で
    最初に見つけたところで列挙を終えず、そのままコールバックを継続すればよいかと。
違反を報告
削除キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←プロセスからウインドウを取得 //400 →Re[2]: プロセスからウインドウを取得 //400
 
上記関連ツリー

Nomalアイコン プロセスからウインドウを取得 / /400 (19/11/11(Mon) 23:26) #34379
Nomalアイコン プロセスからウインドウを取得 / 魔界の仮面弁士 (19/11/12(Tue) 10:28) #34381 ←Now
  └Nomalアイコン Re[2]: プロセスからウインドウを取得 / /400 (19/11/14(Thu) 18:15) #34390
    └Nomalアイコン Re[3]: プロセスからウインドウを取得 / 魔界の仮面弁士 (19/11/14(Thu) 20:31) #34391
      └Nomalアイコン Re[4]: プロセスからウインドウを取得 / 魔界の仮面弁士 (19/11/14(Thu) 21:47) #34392

All 上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信

Mode/  Pass/


- Child Tree -