タスクトレイでの実行

解決


三宅  2005-09-20 23:12:40  No: 125499

こんにちは、宜しくお願いします。

実行時にタスクトレイに入るように実行したく、
以下のようなソースを探して来たのですが、
実行すると.hIcon = Form1.Iconの所で「オブジェクトが必要です。」
のメッセージが出てしまいます。
Form1のIConプロパティにアイコンファイルを指定したのですが、
やはり同様の現象が起こります。
アイコンファイルを選択してもプロパティは(アイコン)のままなのが
気になります。
どなたか教えて下さいませんでしょうか。

Option Explicit

Private Sub Form_Load()
    
    
    Picture1.Visible = False      'PictureBoxをForm1に不可視で張り付けておく。
    
    Dim typNID As NOTIFYICONDATA
    Dim rc As Long
        With typNID
          .cbSize = Len(typNID)             '構造体のサイズ(BYTE)を設定
          .hwnd = Picture1.hwnd             'メッセージを受け取るウィンドウ
          .uID = 0
          .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
          .uCallbackMessage = WM_MOUSEMOVE  '通知するメッセージ
          .hIcon = Form1.Icon               '表示アイコンの設定
          .szTip = App.Title & vbNullChar   '表示テキスト
        End With

        'API関数呼び出し
        rc = Shell_NotifyIcon(NIM_ADD, typNID)

End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, _
                         X As Single, Y As Single)
        'ScaleModeを3(pixcel)にしておくこと。
        'コールバックされた値がXに来るので比較して処理する。
        Select Case X
            Case WM_LBUTTONDOWN
                Text1.Text = "左が、クリックされました。"
            Case WM_RBUTTONDOWN
                Text1.Text = "右が、クリックされました。"
            Case WM_LBUTTONDBLCLK
                Text1.Text = "左が、ダブルクリックされました。"
            Case WM_RBUTTONDBLCLK
                Text1.Text = "右が、ダブルクリックされました。"
        End Select

End Sub

Option Explicit

Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias _
    "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData _
    As NOTIFYICONDATA) As Long
 
Public Const NIM_ADD = &H0           'タスクバーにアイコンを追加
Public Const NIM_MODIFY = &H1        '既存のアイコンを更新
Public Const NIM_DELETE = &H2        '既存のアイコンを削除

Public Const NIF_ICON = &H2     'hIconが有効
Public Const NIF_MESSAGE = &H1  'uCallbackMessageが有効
Public Const NIF_TIP = &H4      'szTipが有効

Type NOTIFYICONDATA
   cbSize As Long            '構造体のバイト数
   hwnd As Long              '通知先のウィンドウのハンドル
   uID As Long               '表示するアイコンのID
   uFlags As Long            '設定する値の定数
   uCallbackMessage As Long  'アイコン上でのマウスイベントが、発生するとウインドウに _
                              メッセージを送る
   hIcon As Long             '追加 更新 削除 変更 のアイコンのハンドル
   szTip As String * 64      'チップヘルプテキスト
 End Type

Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDOWN = 7695      '左が押された時
Public Const WM_LBUTTONDBLCLK = 7725    '左がダブルクリックされた時
Public Const WM_RBUTTONDOWN = 7740      '右が押された時
Public Const WM_RBUTTONDBLCLK = 7770    '右がダブルクリックされた時


三宅  2005-09-20 23:26:52  No: 125500

みなさんこんにちは、
えっと、アイコンが表示されないのは解決しました。

でも右クリックでメニューが表示されません。
メニューエディタで「閉じる」項目を追加
したのですが、それだけではダメなの
でしょうか?


通ってみた  2005-09-20 23:59:51  No: 125501

やりたいこととやってることが違う気がするのは私だけでしょうか

メニューエディタは「ファイル(F)」のような、キャプションバー下のメニューをつくるものでは?


三宅  2005-09-21 00:03:08  No: 125502

こんにちはレスありがとうございます。

違ってましたか。

やりたい事は実行時にタスクトレイに入り、
右クリックでポップアップメニューを
表示して、メニュー内の閉じるを押されたら
終了するというものです。

お手数かけてすみません。


特攻隊長まるるう  2005-09-21 00:49:29  No: 125503

直接質問の回答とは関係ないですが、後始末はちゃんとしましょう。
[VB6.0]
Private Sub Form_Unload(Cancel As Integer)
    Call Shell_NotifyIcon(NIM_DELETE, typNID) '← Dim じゃ無理ですが。
End Sub

提示されたコードでは Picture1 を使ってて変更するのが
面倒だったので Form1 のイベントで書きます。
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Select Case X \ Screen.TwipsPerPixelX
        Case WM_RBUTTONDOWN
            Call SetForegroundWindow(Me.hwnd)
            DoEvents
            Me.PopupMenu mnuMain 'メニューの表示
    End Select
End Sub

これで表示されなければ typNID の設定か、
過去ログ検索『タスクトレイ』で引っ掛かるような情報のチェックが必要でしょう。


三宅  2005-09-21 01:25:54  No: 125504

過去ログを検索しました。

そこで少し進んだのですが、
右クリックすると「ポップアップメニューには少なくとも一つ以上の
サブメニューが必要です。」のメッセージが出てしまいます。

メニューの作り方でしょうか
以下設定してある情報です。

      キャプション  名前      インデックス  ヘルプコンテキスト
      ポップアップ  mnuPopup  0             0
      ・・・閉じる  mnuEnd    0             0


KG  2005-09-21 02:12:06  No: 125505

あってると思いますよ。

後はmnuPopupをPopupMenuメソッドに渡すだけだと思いますけど:)


もげ  2005-09-21 02:18:57  No: 125506

メニューエディタで「有効」とか「表示」のチェックが入っているかどうか
は確認済みですか?


三宅  2005-09-21 02:31:35  No: 125507

>メニューエディタで「有効」とか「表示」のチェックが入っているかどうか
>は確認済みですか?

はい、ポップアップ、閉じる、両方ともチェックが入っています。

なんなんでしょうか?
フォームで表示されているメニューには、
プルダウンが表示されているのですが。。。


三宅  2005-09-21 19:23:27  No: 125508

みなさんありがとうございました。

インデックスを空欄にしたらできました。

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


三宅  2005-09-21 20:14:28  No: 125509

解決です。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加