今VBでプログラムを作成しています。
サンプルソースを調べたりして、「Shell_NotifyIcon」を使用してタスクトレイにアイコンを追加する事はできたのですが、そのアイコンを右クリック等してメニューを表示させることができません。コールバックメッセージにWM_MOUSEMOVEを指定しているのですがフォームのMouse_Moveイベント自体が発生していないようです。
いくつかサンプルソースをダウンロードして実行してみましたが問題は無かったので、環境のせいでは無いと思います。
原因の可能性として考えつくものがあったら教えて下さい。
(ソースコードは長くなるので割愛させて頂きます。APIを使用している部分は全てサンプルソースのコピーそのままです。)
No.1
- 回答日時:
OSはなんですか?
本来ならば開発環境も書くべきですよ。
この回答への補足
説明足らずで申し訳ありません・・・。
OSはWinNT4.0 SP6
VBはver6.0を使用しています。
ソースですが
■宣言部
Public Declare Function Shell_NotifyIcon Lib "Shell32.dll" Alias "Shell_NotifyIconA" ( _
ByVal dwMessage As Long, _
lpData As NOTIFYICONDATA _
) As Long
■構造体宣言
Public Type NOTIFYICONDATA
cbSize As Long
hwnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip(63) As Byte
End Type
Public nIcon As NOTIFYICONDATA
■フォームからの呼び出し部
'NOTIFYICONDATAの設定
With nIcon
.cbSize = Len(nIcon)
.hwnd = frmMain.hwnd
.uID = 1
.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon
bytTip = StrConv(gcstrMsgTitle & vbNullChar, vbFromUnicode)
For intLoop = LBound(bytTip) To UBound(bytTip)
.szTip(intLoop) = bytTip(intLoop)
Next intLoop
End With
'タスクトレイ常駐
lngRtn = Shell_NotifyIcon&(NIM_ADD, nIcon)
こんな感じです。
No.2
- 回答日時:
>'タスクトレイ常駐
>lngRtn = Shell_NotifyIcon&(NIM_ADD, nIcon)
lngRtn = Shell_NotifyIcon(NIM_ADD, nIcon)
ではないですか?
だって
>Public Declare Function Shell_NotifyIcon Lib "Shell32.dll" >Alias "Shell_NotifyIconA" ( _
って宣言してますから...
この回答への補足
サンプルをそのまま使っていたのでここで使っている「&」の意味はよく分からないのですが、無いパターンで試してみても同じ結果でした。
「タスクトレイにアイコンを追加」自体はできているので、その後になにかをする、例えば他のフォームをロードしたり(そんな事はしていないのですが)、あるいはフォームのプロパティの設定によってクリックを受け付けないとか、そういった原因があるのかと思って質問をさせて頂きました。
デバッグしてみましたが、今は質問の本文にも書いた通り、MouseMoveイベント自体が発生していない、あるいは返ってきていない状態です。
No.3
- 回答日時:
.szTipに代入している部分を削除したら動きませんか?
回答ありがとうございます。
試してみましたが結果は同じでした。
ちなみに最初はバイトではなく文字列型でやっていたのですが、それでもうまくいきませんでした。
No.4
- 回答日時:
>フォームのMouse_Moveイベント自体が発生していないようです。
MouseMoveイベントですけど、試したところ発生します。
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Debug.Print Button, Shift, X, Y
End Sub
この回答への補足
ええと、質問文が説明不足だったようなので補足させて頂きます。
「いくつかのサンプルソースも試してみたのですが、そちらの方ではMouseMoveイベントも正常に発生します」です。
自分の、既存のPGに組み込んだときにうまく動作しません。
No.5ベストアンサー
- 回答日時:
>自分の、既存のPGに組み込んだときにうまく動作しません。
ということは、サンプルと何らかの条件が違うのでしょう。
もしかして、MDIフォーム?
あと、Shell_NotifyIconは非表示なコントロールのイベントを設定した方がよいと思います。
.hWnd = Picture1.hWnd
.uCallbackMessage = WM_MOUSEMOVE
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Debug.Print Button, Shift, X, Y
End Sub
できました!!!
仮のフォーム(frmTemp)を追加してそれを非表示にし、frmTempのhWndを渡すとfrmTempのMouseMoveイベントが発生しました。
以前にメインのウィンドウを非表示にして試してみてもダメだったので「非表示も関係ないかな?」とあきらめていたんですが。
理由も分かる方がいらっしゃったら教えて頂きたいので締め切りはもう少し待ちますが、本当に助かりました!どうもありがとうございます。
あ、ちなみにメインのフォームも標準のフォームです。MDIではありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ユーザーフォームのテキストボ...
-
VBA(エクセル)のユーザー...
-
Excelのユーザーフォームのテキ...
-
ExcelVBAのユーザーフォームの...
-
Access VBA コントロールの参照...
-
Microsoft Formsの「個人情報や...
-
クリックイベントなのに、2回ク...
-
モーダルフォームとモードレス...
-
フォームのテキストボックスな...
-
エクセルVBAのフォームを最...
-
アニメGifが止まってしまう?
-
エスケープキーを押して、フォ...
-
コントロールの存在確認
-
標準モジュールからフォームを...
-
Hideについて(.NET)
-
フォームウィンドウを最前面に...
-
フォームを画面のど真ん中に表...
-
ACCESSのフォーム、開くんです...
-
フォームに引数を渡す方法のやり方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
ユーザーフォームのテキストボ...
-
エクセルVBAのフォームを最...
-
クリックイベントなのに、2回ク...
-
VBAでユーザーフォームを再表示...
-
Form_Load と Form_Activate の...
-
Microsoft Formsの「個人情報や...
-
ACCESSのフォーム、開くんです...
-
'ユーザーフォーム右上隅の[×...
-
フォームウィンドウを最前面に...
-
Hideについて(.NET)
-
モーダルフォームとモードレス...
-
ユーザーフォーム上に現在日時...
-
MSGBOXのフォント大きさ変更
-
Excelにて、ユーザーフォームで...
-
コントロールの存在確認
-
ユーザーフォームのラベルに時...
-
VBA(エクセル)のユーザー...
-
エクセルVBA フォーム上でOnkey...
おすすめ情報