HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0427
メッセタスクトレイ格納等について。2未解決


メッセ

リンク

2014/4/27(Sun) 16:45:36|NO.61709

タスクトレイ等について質問です。

とじるボタンを押すと格納され
開く時はタスクトレイのアイコンを
右クリックするとメニューが表示され
開くと、終了を表示させたい。

そして、常に 左右のクリックを取得し
どちらが押されたかを
タスクトレイのアイコンにバルーンチップとして
表示させたいのです。

GWで、暇だ。と思う方
ぜひ作って頂けると嬉しいです。



この記事に返信する


メッセ

リンク

2014/4/28(Mon) 23:22:02|NO.61726

#module "trayicon"
#define __TRAYICONSAMPLE__ ;// コメントを解除するとサンプルを実行できます #define WM_TRAYEVENTSTART $900 #define MAXICONS 16 ;// ←アイコン最大数定義 #uselib "Kernel32.dll" #func GetModuleFileName "GetModuleFileNameA" nullptr,prefstr,int ;// 自分自身の名前を得るAPI #uselib "Shell32.dll" #func ExtractIconEx "ExtractIconExA" sptr,int,nullptr,var,int ;// ファイルからアイコンを抽出する #func Shell_NotifyIcon "Shell_NotifyIconA" int,var ;// タスクトレイアイコンを制御する #uselib "user32.dll" #func DestroyIcon "DestroyIcon" int #deffunc DestroyTrayIcon int iconid dim NOTIFYICONDATA,88/4 ;// NOTIFYICONDATA 構造体を作る。 NOTIFYICONDATA = 88, hWnd, iconid Shell_NotifyIcon 2, NOTIFYICONDATA ;// アイコンを削除する。 if hIcon.iconid { DestroyIcon hIcon.iconid : hIcon.iconid = 0 } ;// アイコンハンドル破棄 return #deffunc CreateTrayIcon str tooltip, int nIconIndex, int iconid if hIcon.iconid { DestroyTrayIcon iconid } ExtractIconEx icofile, nIconIndex, hIcon.iconid, 1 dim NOTIFYICONDATA,88/4 NOTIFYICONDATA = 88, hWnd_, iconid, 7, WM_TRAYEVENTSTART, hIcon.iconid poke NOTIFYICONDATA, 4*6, tooltip Shell_NotifyIcon 0, NOTIFYICONDATA return #deffunc PopupBalloonTip str balloonInfoTitle, str balloonInfo, int balloonIcon,int iconid dim NOTIFYICONDATA,488/4 NOTIFYICONDATA = 488, hWnd_, iconid, $10 poke NOTIFYICONDATA, 4*40, balloonInfo NOTIFYICONDATA.104 = 1000*20 poke NOTIFYICONDATA, 4*105, balloonInfoTitle NOTIFYICONDATA.121 = balloonIcon Shell_NotifyIcon 1, NOTIFYICONDATA return #deffunc SetTrayIconFile str filename sdim icofile,1024 if filename = "" { GetModuleFileName 1024 : icofile = refstr } else { icofile = filename } return #deffunc _init_trayicon_ mref bmscr,96: hWnd_ = bmscr.13 dim hIcon,MAXICONS : SetTrayIconFile "" : return length #deffunc _deinit_trayicon_ onexit foreach hIcon : if hIcon.cnt { DestroyTrayIcon cnt } loop : return #global _init_trayicon_ #ifdef __TRAYICONSAMPLE__@trayicon mci "sound SystemHand" SetTrayIconFile "user32.dll" CreateTrayIcon "アイコンにマウスを重ねたときのチップ",1,0 PopupBalloonTip "タイトルの部分","内容の部分",2,0 stop

///バルーンチップここまで


#module ;***** 必要となるAPIや定数の定義 ***** #uselib "kernel32.dll" #func GetModuleFileName "GetModuleFileNameA" int,var,int #uselib "shell32.DLL" #func ExtractIconEx "ExtractIconExA" var,int,var,var,int #func Shell_NotifyIcon "Shell_NotifyIcon" int,var #define NIM_ADD $00000000 #define NIM_DELETE $00000002 #define NIM_MODIFY $00000001 #define NIF_ICON $00000002 #define NIF_MESSAGE $00000001 #define NIF_TIP $00000004 ;***** タスクトレイにアイコン格納 ***** #defcfunc tasktray str prm1 ; prm1 : tooltext (str) : 文字列 or 文字列型変数 (ツールチップ文字列) tooltext = prm1 : if strlen(tooltext)==0 : tooltext="" ; 自分自身のファイル名を取得 sdim lpFileName,260 GetModuleFileName hModule,lpFileName,260 SelfName=lpFileName icobig=0 ExtractIconEx SelfName,0,icobig,icosmall,1 hIcon=icosmall ; NOTIFYICONDATA 構造体 dim IcoData,22 IcoData(0) = 88 IcoData(1) = hwnd IcoData(2) = 1 IcoData(3) = NIF_MESSAGE|NIF_ICON|NIF_TIP IcoData(4) = $00001400 ;NOTIFY_TRAYICON IcoData(5) = hIcon poke IcoData, 24, tooltext ; タスクトレイにアイコンを追加 Shell_NotifyIcon NIM_ADD,IcoData return hIcon ;***** タスクトレイアイコンを削除 ***** #deffunc taskicoclr ; NOTIFYICONDATA 構造体 dim IcoData,22 IcoData(0) = 88 IcoData(1) = hwnd IcoData(2) = 1 IcoData(3) = NIF_ICON Shell_NotifyIcon NIM_DELETE,IcoData return 0 ;***** タスクトレイアイコンの変更 ***** #deffunc taskchengeico int prm1 ; prm1 : nhIcon (int) : 変更するスモールアイコンハンドル nhIcon = prm1 : if nhIcon==0 : return -1 ; NOTIFYICONDATA 構造体 dim IcoData,22 IcoData(0) = 88 IcoData(1) = hwnd IcoData(2) = 1 IcoData(3) = NIF_ICON IcoData(5) = nhIcon ; タスクトレイアイコンを変更 Shell_NotifyIcon NIM_MODIFY,IcoData return 0 ;***** タスクトレイのチップヘルプを変更 ***** #deffunc tasktooltip str prm1 ; prm1 : tooltext (str) : 文字列 or 文字列型変数 (ツールチップ文字列) tooltext = prm1 : if strlen(tooltext) ==0 : tooltext="" ; NOTIFYICONDATA 構造体 dim IcoData,22 IcoData(0) = 88 IcoData(1) = hwnd IcoData(2) = 1 IcoData(3) = NIF_TIP poke IcoData, 24, tooltext ; タスクトレイのチップヘルプを変更 Shell_NotifyIcon NIM_MODIFY,IcoData return 0 #global ;***** sample ***** #define WM_LBUTTONDOWN $00000201 #define NOTIFY_TRAYICON $00001400 onexit *owari ;***** イベントハンドラ ***** oncmd gosub *OnMotificmd, NOTIFY_TRAYICON objsize 200,26 button "タスクトレイに格納",*modecmd stop ;***** タスクトレイに格納(左クリックで復帰)***** *modecmd gsel 0,-1 gosub *trayico stop ;***** NOTIFY_TRAYICONを処理する ***** *OnMotificmd itemID=lparam switch itemID case WM_LBUTTONDOWN gsel 0,2 gosub *icondel swbreak swend return ;***** タスクトレイに入れる ***** *trayico tooltext = "HSP Script Control" hIcon=tasktray(tooltext) return ;***** タスクトレイのアイコン削除 ***** *icondel taskicoclr return *owari end
////タスクトレイ格納ここまで



#uselib "user32.dll" #func DestroyIcon "DestroyIcon" int #func AppendMenu "AppendMenuA" int, int, int, str #func DestroyMenu "DestroyMenu" int #cfunc CreatePopupMenu "CreatePopupMenu" #func TrackPopupMenu "TrackPopupMenu" int, int, int, int, int, int #define WM_RBUTTONDOWN $00000204 #define NOTIFY_TRAYICON $00001400 oncmd gosub *OnMotificmd, NOTIFY_TRAYICON *OnMotificmd itemID=lparam switch itemID case WM_RBUTTONDOWN hMenu.1 = CreatePopupMenu () AppendMenu hMenu.1, , $1, "開く" AppendMenu hMenu.1, $800, , "" AppendMenu hMenu.1, , $2, "終了" TrackPopupMenu hMenu.1, $100, ginfo (0), ginfo (1), , hwnd if stat = 0 : return gsel 0,2 if ( stat = $1 ) { gosub *trayico } if ( stat = $2 ) { gsel 0,-1 : dialog "終了しますか?",2,"お知らせ" : if (stat=6){ end } : else{} swbreak swend return
/////右クリックメニューここまで


これをすべて合わせてNO.61709に書いた通りのことを
したいのですが、うまくいきません。
タスクトレイに格納すると新しいアイコンが増えてしまいます
それを右クリックしても当然でてきませんw

アイコンを一つにし、右クリックメニューも可能にはできないでしょうか?



メッセ

リンク

2014/4/29(Tue) 17:23:48|NO.61766

したの方に来たので一度更新。



ONION software Copyright 1997-2023(c) All rights reserved.