みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBで、Outlookのデスクトップ通知と同等の機能を制作しようとして

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

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

投稿日時 - 2010-11-04 12:02:41

QNo.6296296

すぐに回答ほしいです

質問者が選んだベストアンサー

開いたフォームをアクティブにしないには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)が非アクティブで開きます。

投稿日時 - 2010-11-04 13:53:44

お礼

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

投稿日時 - 2010-11-04 14:07:29

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問