回答編集履歴
1
文章の改善
answer
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
やったことは
|
1
|
+
やったことはありませんが、
|
2
|
-
①`CreateProcess` API呼び出しついでにLPPROCESS_INFORMATIONからプロセスIDを取得しておきます。
|
2
|
+
①まず`CreateProcess` API呼び出しついでにLPPROCESS_INFORMATIONからプロセスIDを取得しておきます。
|
3
3
|
|
4
|
-
次に起動したプロセスのメインウィンドウハンドルを取得します。
|
4
|
+
次に、起動したプロセスのメインウィンドウハンドルを取得します。
|
5
|
-
これはおそらく`EnumWindows` API等で全トップレベルウィンドウを列挙し、`GetWindowThreadProcessId` APIで
|
5
|
+
これはおそらく`EnumWindows` API等で全トップレベルウィンドウを列挙し、`GetWindowThreadProcessId` APIで各ウィンドウのプロセスIDを取得して、①で取得したIDと一致するかどうかで特定できます。
|
6
|
-
ただ、起動直後にウィンドウが存在しているとは限らないため、Sleepやリトライの機構が
|
6
|
+
ただ、起動直後にウィンドウが存在しているとは限らないため、Sleepやリトライの機構が必要になると予想されます。
|
7
7
|
|
8
8
|
あとは取得したウィンドウハンドルを`SetParentで親を差し替えればいけるのではないかと思います。
|
9
9
|
|
10
|
-
|
10
|
+
懸案事項として、`SetParent` APIの[日本語のリファレンス](https://msdn.microsoft.com/ja-jp/library/cc411061.aspx)には
|
11
11
|
|
12
12
|
> 新しい親ウィンドウと子ウィンドウは、同一アプリケーションに属していなければなりません。
|
13
13
|
|