ほとんど
http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200512/05120034.txt
を翻訳しただけですがどうぞ
(WindowsXPで動作確認)
#include "user32.as"
#include "kernel32.as"
#define TRAYSTR "音量" //取得するアイコンのツールチップ文字列
//トレイ(のToolbar)を取得
FindWindowEx 0, 0, "Shell_TrayWnd", 0
FindWindowEx stat, 0, "TrayNotifyWnd", 0
FindWindowEx stat, 0, "SysPager", 0
FindWindowEx stat, 0, "ToolbarWindow32", 0
htray = stat
//データ取得用メモリ確保
pid = 0
GetWindowThreadProcessId htray, varptr(pid)
OpenProcess $001F0FFF/*PROCESS_ALL_ACCESS*/, 0, pid
hproc = stat
VirtualAllocEx hproc, 0, 65536, $00001000/*MEM_COMMIT*/, $00000004/*PAGE_READWRITE*/
pbuf = stat
//トレイアイコン(ボタン)情報取得
sendmsg htray, $00000418/*TB_BUTTONCOUNT*/, 0, 0
btncnt = stat
rcnt = 0
msg = "見つかりませんでした"
repeat btncnt
sendmsg htray, $00000417/*TB_GETBUTTON*/, cnt, pbuf
dim tbb, 5
ReadProcessMemory hproc, pbuf, varptr(tbb), 20, varptr(rcnt)
if (tbb(4) & $FFFF0000) = 0 { continue }
sendmsg htray, $0000044B/*TB_GETBUTTONTEXTW*/, tbb(1), 0
size = stat
if size <= 0 { continue }
sdim txt, size * 2
ReadProcessMemory hproc, tbb(4), varptr(txt), size * 2, varptr(rcnt)
if cnvwtos(txt) != TRAYSTR { continue }
state = peek(tbb, 8)
if (state & $00000008/*TBSTATE_HIDDEN*/) = 0 {
sendmsg htray, $00000433/*TB_GETRECT*/, tbb(1), pbuf
dim rctbtn, 4
ReadProcessMemory hproc, pbuf, varptr(rctbtn), 16, varptr(rcnt)
ClientToScreen htray, varptr(rctbtn)
ClientToScreen htray, varptr(rctbtn(2))
msg = ""+rctbtn(0) + "," + rctbtn(1) + "," + rctbtn(2) + "," + rctbtn(3)
} else {
msg = "アイコンは非表示です"
}
break
loop
mes msg
//後処理
VirtualFreeEx hproc, pbuf, 0, $00008000/*MEM_RELEASE*/
CloseHandle hproc