フォーカスを持たないウィンドウの表示


■通常時、ウィンドウが表示されると、そのウィンドウにフォーカスが移りますね。 つまり、そのウィンドウがアクティブになるということですが・・・ そんなケースばかりでもなく、調べるに至った次第です。まずは下記のコードを

 Imports System.Runtime.InteropServices ' ←重要

 Public Class Form

  <DllImport("user32.dll")> _
  Private Shared Function _
   ShowWindow(hWnd As IntPtr, Optional _
    flags As Int32 = 4) As Boolean
  End Function

呼び出し方法(二つ目の引数は省略可能です。)
 ShowWindow(Me.Handle)
元ネタでは、C++?で書いてあるのですが、出来るだけ簡略化しつつ、VBのコードに直してみました。 そこには、ウィンドウの位置やサイズを変更するメソッドの定義も書かれていますので、 必要とされる方は参考にされると良いのではないでしょうか。 上記の通り、コードエリアの冒頭で、user32.dllからメソッドを定義し、それを呼び出すだけです。 user32.dllあっての話しですので、この先無くなってしまえばこの方法も取れなくなります。

■どんなケースで必要なのか?

メインのウィンドウから、フォーカスを移さずにウィンドウを表示する場合などかと思いますが? 元ネタサイトでも「NotifWindow」と、なっていますので・・・ 何れにせよ、お知らせ的な用途で邪魔にならないウィンドウを表示する場合ではないでしょうか。


関連リンク(情報源)

http://www.codeproject.com/cs/miscctrl/RobMisNotifyWindow.asp

TOP ▲