質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

3回答

5970閲覧

win32APIのGetWindow関数のGW_HWNDNEXTで取得したハンドルが存在しない

terataitai

総合スコア32

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2019/02/28 14:35

下記のアプリで表示されているウィンドウのハンドルを列挙したのですが、win32APIのGetWindow関数のGW_HWNDNEXTで取得したハンドルがその中に存在しません(GetWindow関数のGW_HWNDNEXTで取得したハンドル名は328796でした)。
これはなぜでしょうか?解決する方法はありますか?

C#

1//ウィンドウのハンドル名とプロセス名を列挙するプログラム 2foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcesses()) 3{ 4 if (p.MainWindowTitle.Length != 0) 5 { 6 Console.WriteLine("ハンドル名:" + p.MainWindowHandle+" プロセス名:" + p.ProcessName); 7 } 8} 9/* 10ハンドル名:16058892 プロセス名:Video.UI 11ハンドル名:788730 プロセス名:WinStore.App 12ハンドル名:このアプリの名前のウィンドウハンドル プロセス名:※このアプリの名前 13ハンドル名:66872 プロセス名:chrome 14ハンドル名:1704738 プロセス名:WWAHost 15ハンドル名:3410750 プロセス名:SystemSettings 16ハンドル名:10619546 プロセス名:devenv 17ハンドル名:197122 プロセス名:Evernote 18*/

C#

1//アプリ自身のウィンドウハンドル=myHandleの一個手前のウィンドウのハンドルを取得 2 IntPtr myHandle = ((HwndSource)HwndSource.FromVisual(this)).Handle; 3 IntPtr nextHandle = GetWindow(myHandle, 2);//GW_HWNDNEXT 4 Console.WriteLine("handle="+ nextHandle); 5/* 6328796 7*/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

Windows の API レベルにおける「ウィンドウ」とは、「フォーカスを得ることのできるコントロール」のことになります。
例えば、アプリケーションのメインウィンドウにテキストボックスを置けば、そのテキストボックスもまた「ウィンドウ」ですし、ボタンもコンボボックスもメニューアイテムも同様です。

従って、「メインウィンドウではないけどウィンドウハンドルを持つ」ものは数多くあります(というよりメインウィンドウであるウィンドウの方が少ない)

あくまでもメインウィンドウに限定して検索したいなら、EnumWindows 関数で列挙する必要があります。
※それでも「現在メインウィンドウは表示していない」場合もあります

投稿2019/03/01 01:14

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もしSpy++が入っているならウィンドウハンドルから対象のウィンドウを検索できるので、
16進数で検索してみては?

イメージ説明

投稿2019/03/01 00:58

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

アプリケーションはメインウィンドウだけで構成されるもんではない、ということでは。

投稿2019/02/28 14:44

y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問