VBで作成したフォームがアクティブになったタイミングを判別する


ゆう  2009-10-16 14:40:39  No: 102017  IP: 192.*.*.*

VBで作成したEXEのフォーム(ウィンドウ)がアクティブになった瞬間を取得することはできますか?

(例)
①VBで作成したEXEを起動する。(画面にフォームが表示される)
②エクスプローラーを手で起動する。(VBのフォームからフォーカスが外れる)③エクスプローラーを手で閉じる(VBのフォームがアクティブになる)
上記、③のタイミングでイベントを発生させたい。

編集 削除
オショウ  2009-10-16 14:51:29  No: 102018  IP: 192.*.*.*

Form_Activateのイベントがありますが、これではダメ?

以上。

編集 削除
ゆう  2009-10-16 15:14:38  No: 102019  IP: 192.*.*.*

「Form_Activateイベント」は発生しませんでした。
おそらくVB以外のアプリケーションから、VBにフォーカスが移っただけのためだと思われます・・・。

編集 削除
ひよこ  2009-10-16 15:59:50  No: 102020  IP: 192.*.*.*

vb.netの環境しかないのでそちらでためしましたが
VB以外のアプリケーションからフォーカスが移ってもイベントが
発生しました。

イベントが発生したかどうかはどうやって確かめたのでしょうか?

編集 削除
ゆう  2009-10-16 16:27:55  No: 102021  IP: 192.*.*.*

Private Sub Form_Activate()
    MsgBox "Form_Activate"
End Sub

で、メッセージが発生するかどうかで確認しています。

編集 削除
オショウ  2009-10-16 16:43:16  No: 102022  IP: 192.*.*.*

永らくVB6なんて使ってなかったので・・・
WinXPとVISTAで確認しました。

確かに起動時にしか、Activateイベント発生しませんネ!
Deactivate/LostFocusも来ない・・・

摩訶不思議・・・昔はイベント来たように記憶してました
が・・・そうなれば、WndProcをHookするかしないと、ダメ
かも。

要は、WM_GOTFOCUSメッセージを拾うようにしないとダメの
ようです。

以上。参考まで

編集 削除
オショウ  2009-10-16 20:28:50  No: 102023  IP: 192.*.*.*

VB6でのWndProcの使い方

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_t35.htm
http://oshiete1.goo.ne.jp/qa2973603.html

ちょっと余計なことが書かれてますが、基本的には
SetWindowLongでWndProcの登録と解除を行います。

RegisterWindowMessageは今回は使いません。

以上。参考まで

編集 削除