- ベストアンサー
FindWindow API で NULLが戻る
多くのアプリケーションでは正しく Handle が戻るが Windowsタスクマネージャーやブラウザなどは FindWindow でNULLが戻る。 但し、Google Cromeブラウザのみは正しく取得可能 ブラウザに1つのウィンドしか出ていない時でもNG GetWindowText でソフトタイトル取得 FindWindow のパラメータには、それを利用 MoveWindow で定位置に各ソフトを配置したい。 Win10, VC++
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
FindWindow(NULL, "タスク マネージャー") でウインドウハンドルは取得できました。 なのでもう少し情報が必要で、部分的にでもソースコードを提示するとかでないと何が問題なのか不明です。 そもそもGetWindowTextを呼び出す時点で、ウインドウハンドルがわかっているのではないかと思うのですが。
その他の回答 (1)
- luka3
- ベストアンサー率72% (424/583)
まず、タスクマネージャのウインドウ位置を変えるには『管理者権限』が必要ということです。 https://teratail.com/questions/281895 次にブラウザの問題については、MS Edgeの場合、ウインドウタイトルは >【タブのタイトル】 および他 3 ページ - プロファイル 2 - Microsoft? Edge のようになるようですが、Microsoftの直後(?の位置)に U+200B のUnicodeが入っているそうです。(ゼロスペースという文字らしい) このため、GetWindowTextAで取得したタイトルでFindWindowAしても失敗することになると思います。 UnicodeとFindWindowWを使って、『ゼロスペース』を含めたタイトルで探せばヒットするかもしれませんがそこまで検証していません。 別なアプローチとしては、全ての可視ウインドウをループで探して、タイトル一致で探すか、ウインドウハンドルからGetWindowThreadProcessIdとGetModuleFileNameExを使って.exeのファイル名で探すか、といったところでしょうか。
お礼
補足
ありがとうございます。 質問をシンプルにするため、要点のみにしてあります。 試しにタスクマネージャーも対象にしてテスト。 MoveWindow で移動しないため、ブラウザ同様として、ウインドウハンドルが取得できないと誤認ました。 タスクマネージャーはウインドタイトル名を確認する目的で開いていたため、テスト対象となったもの。 機能の主目的: 起動中のソフトを MoveWindow で定位置、定サイズに各ソフトを配置したい。 用途: 作業自動化のため、キー・マウスシミレーションします。 そのため、各ソフトを定位置、定サイズでWindowを置くことが必要です。(関連しないソフトは最小化) Google Chrome 以外のブラウザでは、GetClassName, FindWindow でも、ウインドクラス、ハンドルが NULL で得られません。 MoveWindow するための、ウインドハンドルが欲しいのです。 ★タスクマネージャーのようにウインドハンドルを使っても操作できないのは困りますが、システムツールなので特権的なものとして、そこを調べるための作業はしたくありません。 よろしくお願いいたします。