易语言Api创建托盘图标

易语言 2020-08-08 17:14:16

易语言Api创建托盘图标

GetWindowThreadProcessId (托盘句柄, dwProcessID) ' 获取与指定窗口关联在一起的一个线程和进程标识符
进程句柄 = OpenProcess (#PROCESS_ALL_ACCESS, 假, dwProcessID) ' 打开一个现有进程的句柄 ' 位或 (#STANDARD_RIGHTS_REQUIRED, #SYNCHRONIZE, 4095)
外部指针 = VirtualAllocEx (进程句柄, 0, 18, #MEM_COMMIT, #PAGE_READWRITE) ' 分配指针
图标数量 = SendMessageA (托盘句柄, #TB_BUTTONCOUNT, 0, 0)
.变量循环首 (0, 图标数量 - 1, 1, i)
SendMessageA (托盘句柄, #TB_GetButton, i, 外部指针)
ReadProcessMemory_整数 (进程句柄, 外部指针 + 16, lngTextAdr, 4, 0)
.如果真 (lngTextAdr ≠ -1)
ReadProcessMemory_整数 (进程句柄, 外部指针 + 12, lngHwndAdr, 4, 0) ' 窗口句柄
ReadProcessMemory_整数 (进程句柄, lngHwndAdr, lngHwnd, 4, 0) ' 窗口句柄
ReadProcessMemory_整数 (进程句柄, 外部指针 + 4, lngButtonID, 4, 0) ' 图标ID
.如果真 (SendMessageA (托盘句柄, #TB_ISBUTTONHIDDEN, lngButtonID, 0) ≠ 8)
图标位置 = 图标位置 + 1
.如果真结束
.如果真 (lngHwnd = hwnd)
跳出循环 ()
.如果真结束
.如果真 (i = 图标数量 - 1)
图标位置 = -1
返回 (假)
.如果真结束

.如果真结束

.变量循环尾 ()
GetWindowRect (托盘句柄, 托盘矩形)
托盘_X = (托盘矩形.右边 - 托盘矩形.左边) ÷ 18
托盘_Y = (托盘矩形.底边 - 托盘矩形.顶边) ÷ 18
图标位置_X = 选择 (图标位置 % 托盘_X = 0, 托盘_X, 图标位置 % 托盘_X)
图标位置_Y = 选择 (图标位置 % 托盘_X = 0, 图标位置 ÷ 托盘_X, 取整 (图标位置 ÷ 托盘_X) + 1)
图标区域.左边 = 托盘矩形.左边 + 图标位置_X × 18 - 18
图标区域.顶边 = 托盘矩形.顶边 + 图标位置_Y × 18 - 18
图标区域.右边 = 托盘矩形.左边 + 图标位置_X × 18
图标区域.底边 = 托盘矩形.顶边 + 图标位置_Y × 18
VirtualFreeEx (进程句柄, 外部指针, #MEM_COMMIT, #MEM_RELEASE)
CloseHandle (进程句柄)