プロが教えるわが家の防犯対策術!

VBで、Outlookのデスクトップ通知と同等の機能を制作しようとしています。
現時点で、デスクトップ通知で行いたいことが4点あります。
  1.表示位置を指定できること。
  2.複数表示を可能にすること。
  3.表示する時に、フォーカスを移動させないこと。
  4.ボタンを作成できること。
現時点では、Formを作成し、Form1.show()で起動していますが、3のフォーカスが移動してしまうため、うまく実現することができませんでした。また、ツールチッップにて作成を行いましたが、ボタンを配備することができないために断念しました。

実現するための、方法やご意見頂けると幸いです。
よろしくお願いします。

A 回答 (1件)

開いたフォームをアクティブにしないにはWindows APIのShowWindowを使用すれば良いと思います。



VB6
Private Declare Function ShowWindow Lib "user32" _
(ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

VB.NET
Private Declare Function ShowWindow Lib "user32" _
(ByVal hwnd As IntPtr, ByVal nCmdShow As Long) As Long

詳細はヘルプを見ていただくとして第一引数に対象のウインドウハンドル、第二引数にウインドウの状態を指定します。
第二引数に 8 を指定すると対象のウインドウをアクティブにしないで開くことが出来ます。

以下、簡単なサンプル(VB.NET)
プロジェクトにForm1とForm2を追加してForm1にButton1を追加します。

'--Form1
Public Class Form1
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim frm As New Form2
  frm.ShowNoActivate()
 End Sub
End Class

'--Form2
Public Class Form2
 Private Declare Function ShowWindow Lib "user32" _
  (ByVal hwnd As IntPtr, ByVal nCmdShow As Long) As Long
 Private Const SW_SHOWNA As Integer = 8

 Public Sub ShowNoActivate()
  Dim ret As Long
  ret = ShowWindow(Me.Handle, SW_SHOWNA)
 End Sub
End Class

ボタンを押す度、新しいウインドウ(Form2)が非アクティブで開きます。
    • good
    • 0
この回答へのお礼

なるほど!とても参考になりました。
欲しかった回答が、そのまま頂けました。
ありがとうございました。

お礼日時:2010/11/04 14:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!