[delphi-users:5087] GetWindowでのオーナーフォームハンドルの取得について

67 views
Skip to first unread message

Mr.HS

unread,
Jan 17, 2019, 3:55:53 AM1/17/19
to delphi...@freeml.com
いつもお世話になります。
斎藤です

早速ですが、メニュープログラムであるExeを起動させるとき、それが既に起動済みならそれを前面に持ってくる処理を作成しています。
対象Exeが起動中かの判断はうまくいくのですが、それが最小化されている場合元に戻す処理がうまく動作せず苦慮しています。
対象ExeはDelphi製のものなので、GetWindow関数でオーナーウインドウハンドルの取得を試みるのですが取得できず「0」で返ってきます。(GetLastErrorでは結果が0なのでGetWindow自体は正常終了していると思われます)
テスト用に下記のようなサンプルを作成して挙動をテストしました
hW: HWND;
hO: HWND;

hW := FindWindow('hogehoge', nil);
hO := GetWindow(hW, GW_OWNER);
ShowMessage(IntToStr(hO));

分かったこととして、Delphi7で作成したExeは上記サンプルで正常にオーナーハンドルを取得できますが、DelphiXE5で作成したExeはオーナーハンドルが0になってしまいます。

Delphiのバージョンでこのような挙動の違いがあるとは思いにくいのですが、なぜこのような動きをするのか分からずにいます。

何かヒントなどありましたら、ご教示いただければと思い投稿しました。

よろしくお願いいたします



MLホームページ: https://www.freeml.com/delphi-users

----------------------------------------------------------------------
Powered by freeml -- https://www.freeml.com/ --
------------------------------------------------------[freeml byGMO]--

あなたの街のチラシがいつでも無料で見放題!
チラシをクリックしてチラシが拡大されたらポイントゲット♪
まずはかんたん登録♪ -ポイントタウン-
https://www.pointtown.com/ptu/rd.cgi?cid=8912
----------------------------------------------------------------------

DEKO

unread,
Jan 17, 2019, 5:32:57 AM1/17/19
to delphi...@freeml.com
もしかして: MainFormOnTaskBar

[Vcl.Forms.TApplication.MainFormOnTaskBar (DocWiki)]
http://docwiki.embarcadero.com/Libraries/ja/Vcl.Forms.TApplication.MainFormOnTaskBar

# このプロパティは Delphi 2007 以降で True です。

--

富永英明 (DEKO)
-----------------------------
http://ht-deko.com/
de...@ht-deko.minim.ne.jp
-----------------------------

Mr.HS

unread,
Jan 18, 2019, 5:03:30 AM1/18/19
to delphi...@freeml.com
DEKO さん、斎藤です

ご返信ありがとうございます。

見落としていました。

再度検証し、結果をご報告させていただきます。

又、いつもホームページ参考にさせていただいています。

重ねて御礼申し上げます。


下記のメッセージ
[ Date: ] Thu, 17 Jan 2019 19:32:53 +0900 (JST)
[ Subject: ] [delphi-users:5088] Re: GetWindowでのオーナーフォームハンドルの取得について
[ Message-Id: ] df8626d6-5d94-7e2c...@ht-deko.minim.ne.jp から
--------------------------- ここまで ---------------------------

************************************************************
                              
 キョードー・システムズ 株式会社  斎藤 浩樹       
                              
   〒990-0034 山形県山形市東原町2-18-25     
   Tel 023-628-6123 Fax 023-628-6122       
                              
   URL: http://www.e-kyodo.com              
   E-mail: sa...@e-kyodo.com               
                              
************************************************************

Mr.HS

unread,
Jan 21, 2019, 8:00:58 AM1/21/19
to delphi...@freeml.com
DEKO さん、こんばんわ。斎藤です

時間が空いてしまいましたが、ご教示頂いた内容を検証して見ました。

結果的に、MainFormOnTaskBarの値はTrueでもFalseでも変化ありませんでした。

下記のことを試してみましたが、やはり最小化から復帰させることができず考え
込んでいました。

 ・IsIconic関数での判定で、最小化しているにもかかわらず、最小化されてい
  ないような戻り値が返される。
 ・IsIconic関数で判定せずに最小化を元に戻そうとしても変化なし。
 ・最小化を元に戻す方法としてShowWindowではなく、SendMessageでWM_SYSCOMMAND
  を送信しても変化なし。
 ・最小化されていなければ、指定したフォームが最前面に表示される。

ふと、オーナーウインドウのハンドルが取得できないのなら、そのフォームが
オーナーなんじゃないか、そうでなくても、オーナーフォームを指定した時と
同じように動作するのではないか?というへんな考えが思いついたので、試し
てみたらところ最小化から復帰させることができました。

なんか釈然としないし、こんなことでいいのか分からないうえ、最前面にする
処理も、XP以降、他プロセスのウィンドウを前面に持ってこれない(アタッチ
処理が必要?)と思う(タスクバーが点滅?)のですが、最前面にくることも
なぜなのか消化できずにいます・・・

とりあえず、少し様子を見てみようかと思います。

アドバイスいただきありがとうございました。

今後ともよろしくお願いいたします。

斎藤 浩樹 / Hiroki-Saito.

Mr.XRAY

unread,
Jan 23, 2019, 12:24:01 AM1/23/19
to delphi...@freeml.com
[delphi-users:5090] Re: GetWindowでのオーナーフォームハンドルの取得につ
いて へのレスです.

>なんか釈然としないし、こんなことでいいのか分からないうえ、最前面にする

2006年に Windows Vista がリリースされました.
ウィンドウ (フォーム) の最小化等がかなり話題になりました.
今更ですがテストしてみました.

[ 648_他のアプリのメインフォームの最小化と元に戻す ]
http://mrxray.on.coocan.jp/Delphi/plSamples/648_OtherApp_MinimizeRestore.htm

Mr.HS

unread,
Jan 23, 2019, 7:13:33 AM1/23/19
to delphi...@freeml.com
Mr.XRAY さん、こんばんわ。

斎藤です

レスいただき、ありがとうございます。

早速リンク先を拝見させていただきました。

Delphi2007以降で作成したExeには、秘密のウインドウは存在しないのですね。
私は、Delphi製アプリは全て秘密のウインドウが存在するものと決めつけてい
ました。

GetWindowでオーナーハンドルが取得できなかった訳や、最小化を元に戻す場合
メインウインドウのハンドルに対して操作することで期待する動作した訳が
理解できとても勉強になりました。

Mr.XRAY さんのホームページは、今回の内容だけではなく、様々な分野において
とても丁寧に理路整然と解説していただいているので、大変分かりやすく、いつも
参考にさせていただいております。

どうもありがとうございました。

斎藤 浩樹 / Hiroki-Saito
Reply all
Reply to author
Forward
0 new messages