適当ですが。
#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