我是靠谱客的博主 慈祥鲜花,最近开发中收集的这篇文章主要介绍易语言通过监控图标实现QQ消息监控的代码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

DLL命令表

.版本 2
.DLL命令 GetWindowThreadProcessId___, 整数型, "user32.dll", "GetWindowThreadProcessId"
  .参数 hwnd, 整数型
  .参数 lpdwProcessId, 整数型, 传址
.DLL命令 OpenProcess___, 整数型, "kernel32.dll", "OpenProcess"
  .参数 dwDesiredAccess, 整数型
  .参数 bInheritHandle, 逻辑型
  .参数 dwProcessId, 整数型
.DLL命令 VirtualAllocEx___, 整数型, "kernel32.dll", "VirtualAllocEx"
  .参数 hProcess, 整数型
  .参数 lpAddress, 整数型
  .参数 dwSize, 整数型
  .参数 flAllocationType, 整数型
  .参数 flProtect, 整数型
.DLL命令 SendMessageA_整数型___, 整数型, , "SendMessageA"
  .参数 hwnd, 整数型
  .参数 msg, 整数型
  .参数 wparam, 整数型
  .参数 lparam, 整数型
.DLL命令 ReadProcessMemory_TBBUTTON32___, 整数型, , "ReadProcessMemory"
  .参数 hProcess, 整数型
  .参数 lpBaseAddress, 整数型
  .参数 lpBuffer, TBBUTTON32, 传址
  .参数 nSize, 整数型
  .参数 lpNumberOfBytesWritten, 整数型
.DLL命令 ReadProcessMemory_TBBUTTON64___, 整数型, , "ReadProcessMemory"
  .参数 hProcess, 整数型
  .参数 lpBaseAddress, 整数型
  .参数 lpBuffer, TBBUTTON64, 传址
  .参数 nSize, 整数型
  .参数 lpNumberOfBytesWritten, 整数型
.DLL命令 ReadProcessMemory_字节集___, 整数型, , "ReadProcessMemory"
  .参数 hProcess, 整数型
  .参数 lpBaseAddress, 整数型
  .参数 lpBuffer, 字节集, 传址
  .参数 nSize, 整数型
  .参数 lpNumberOfBytesWritten, 整数型
.DLL命令 IsWow64Process___, 整数型, "kernel32", "IsWow64Process"
  .参数 hProcess, 整数型
  .参数 Wow64Process, 整数型, 传址
.DLL命令 GetCurrentProcess___, 整数型, , "GetCurrentProcess"
.DLL命令 ReadProcessMemory_TRAYDATA32___, 整数型, , "ReadProcessMemory"
  .参数 hProcess, 整数型
  .参数 lpBaseAddress, 整数型
  .参数 lpBuffer, TRAYDATA32, 传址
  .参数 nSize, 整数型
  .参数 lpNumberOfBytesWritten, 整数型
.DLL命令 ReadProcessMemory_TRAYDATA64___, 整数型, , "ReadProcessMemory"
  .参数 hProcess, 整数型
  .参数 lpBaseAddress, 整数型
  .参数 lpBuffer, TRAYDATA64, 传址
  .参数 nSize, 整数型
  .参数 lpNumberOfBytesWritten, 整数型
.DLL命令 VirtualFreeEx___, 逻辑型, , "VirtualFreeEx"
  .参数 hProcess, 整数型
  .参数 lpAddress, 整数型
  .参数 dwSize, 整数型
  .参数 flAllocationType, 整数型
.DLL命令 CloseHandle___, 整数型, , "CloseHandle"
  .参数 hwnd, 整数型
.DLL命令 WideCharToMultiByte___, 整数型, , "WideCharToMultiByte"
  .参数 CodePage, 整数型
  .参数 dwFlags, 整数型
  .参数 lpWideCharStr, 字节集
  .参数 cchWideChar, 整数型
  .参数 lpMultiByteStr, 文本型, 传址
  .参数 cbMultiByte, 整数型
  .参数 lpDefaultChar, 文本型
  .参数 lpUsedDefaultChar, 逻辑型
.DLL命令 FindWindow___, 整数型, "user32.dll", "FindWindowA"
  .参数 窗口类名, 文本型
  .参数 窗口文本, 文本型
.DLL命令 FindWindowExA___, 整数型, "user32", "FindWindowExA"
  .参数 hwnd1, 整数型
  .参数 hwnd2, 整数型
  .参数 class, 文本型
  .参数 title, 文本型
.DLL命令 GetWindowRect___, 逻辑型, , "GetWindowRect"
  .参数 hwnd, 整数型
  .参数 RECT, RECTData, 传址
.DLL命令 ClientToScreen___, 整数型, "user32.dll", "ClientToScreen", , 取窗口位置
  .参数 hwnd, 整数型
  .参数 lpPoint, int
.DLL命令 SetCursorPos___, , "user32.dll", "SetCursorPos", , 置鼠标位置 
  .参数 x, 整数型
  .参数 y, 整数型
.DLL命令 PostMessageA_整数型___, , , "PostMessageA"
  .参数 hwnd, 整数型
  .参数 消息号, 整数型
  .参数 参数1, 整数型
  .参数 参数2, 整数型
.DLL命令 EnumProcessModules___, 逻辑型, "psapi.dll", "EnumProcessModules", , 窗口_句柄取文件路径
  .参数 hProcess, 整数型
  .参数 lphModule, 整数型, 传址
  .参数 cb, 整数型
  .参数 lpcbNeeded, 整数型, 传址
.DLL命令 GetModuleFileNameExA___, 整数型, "Psapi.dll", "GetModuleFileNameExA", , _进程取全路径名
  .参数 hProcess, 整数型
  .参数 hModule, 整数型, , 0
  .参数 lpFilename, 文本型, , 1000
  .参数 nSize, 整数型, , 1000
.DLL命令 CreateThread___, 整数型, , "CreateThread", , 启动线程; 成功返回线程句柄,返回0=失败
  .参数 lpThreadAttributes, 整数型
  .参数 dwStackSize, 整数型
  .参数 lpStartAddress, 子程序指针, , 线程执行函数
  .参数 lpParameter, 整数型, , 传入线程参数
  .参数 dwCreationFlags, 整数型
  .参数 lpThreadId, 整数型, 传址, 返回线程ID
.DLL命令 MoveWindow___, 逻辑型, "user32.dll", "MoveWindow"
  .参数 hwnd, 整数型
  .参数 左侧位置, 整数型
  .参数 顶部位置, 整数型
  .参数 新宽度, 整数型
  .参数 新高度, 整数型
  .参数 是否重画, 逻辑型

自定义数据类型表

.版本 2
.数据类型 TBBUTTON32, , 20
  .成员 iBitmap, 整数型
  .成员 idCommand, 整数型
  .成员 fsState, 字节型
  .成员 fsStyle, 字节型
  .成员 bReserved, 字节型, , "2", win64[6]win32[2]
  .成员 dwData, 整数型
  .成员 iString, 整数型
.数据类型 TBBUTTON64, , 24
  .成员 iBitmap, 整数型
  .成员 idCommand, 整数型
  .成员 fsState, 字节型
  .成员 fsStyle, 字节型
  .成员 bReserved, 字节型, , "6", win64[6]win32[2]
  .成员 dwData, 整数型
  .成员 iString, 整数型
.数据类型 TRAYDATA32
  .成员 hwnd, 整数型
  .成员 uID, 整数型
  .成员 uCallbackMessage, 整数型
  .成员 Reserved1, 整数型, , "2"
  .成员 hIcon, 整数型
  .成员 Reserved2, 整数型, , "3"
  .成员 ExePath, 字节型, , "255"
.数据类型 TRAYDATA64
  .成员 hwnd, 整数型
  .成员 uID, 整数型
  .成员 uCallbackMessage, 整数型
  .成员 Reserved1, 整数型, , "3"
  .成员 hIcon, 整数型
  .成员 Reserved2, 整数型, , "5"
  .成员 ExePath, 字节型, , "255"
.数据类型 RECTData
  .成员 x1, 整数型
  .成员 y1, 整数型
  .成员 x2, 整数型
  .成员 y2, 整数型
.数据类型 int
  .成员 x
  .成员 y

图标监控

.版本 2
.程序集 程序集1
.子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码
载入 (窗口1, , 真)
_临时子程序 () ' 在初始化代码执行完毕后调用测试代码
返回 (0)
.子程序 _临时子程序
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 注意不要修改本子程序的名称、参数及返回值类型。
.子程序 检测系统托盘, 逻辑型, 公开
.参数 _hToolbar, 整数型
.参数 _hwnd, 整数型, 参考
.局部变量 Pid
.局部变量 hProcess
.局部变量 i
.局部变量 lpButton
.局部变量 TButton32, TBBUTTON32
.局部变量 TButton64, TBBUTTON64
.局部变量 dwData, 整数型
.局部变量 idCommand, 整数型
.局部变量 TrayData32, TRAYDATA32
.局部变量 TrayData64, TRAYDATA64
.局部变量 hwnd, 整数型
.局部变量 hIcon, 整数型
.局部变量 ExePath, 文本型
.局部变量 szTips, 字节集
.局部变量 int, int
.局部变量 value, 逻辑型
.局部变量 b, 整数型
value = 假
GetWindowThreadProcessId___ (_hToolbar, Pid)
hProcess = OpenProcess___ (1082, 假, Pid)
.如果真 (hProcess > 0)
  lpButton = VirtualAllocEx___ (hProcess, 0, 24, 4096, 64)
  .计次循环首 (SendMessageA_整数型___ (_hToolbar, 1048, 0, 0), i)
    SendMessageA_整数型___ (_hToolbar, 1047, i - 1, lpButton)
    .判断开始 (Is64 () = 假)
      ReadProcessMemory_TBBUTTON32___ (hProcess, lpButton, TButton32, 20, 0)
      dwData = TButton32.dwData
      idCommand = TButton32.idCommand
    .默认
      ReadProcessMemory_TBBUTTON64___ (hProcess, lpButton, TButton64, 24, 0)
      dwData = TButton64.dwData
      idCommand = TButton64.idCommand
    .判断结束
    szTips = 取空白字节集 (100)
    .判断开始 (SendMessageA_整数型___ (_hToolbar, 1069, idCommand, lpButton) = -1)
      szTips = { }
    .默认
      ReadProcessMemory_字节集___ (hProcess, lpButton, szTips, 100, 0)
    .判断结束
    .判断开始 (Is64 () = 假)
      ReadProcessMemory_TRAYDATA32___ (hProcess, dwData, TrayData32, 300, 0)
      hwnd = TrayData32.hwnd
      hIcon = TrayData32.hIcon
      ExePath = W2A (到字节集 (TrayData32.ExePath))
    .默认
      ReadProcessMemory_TRAYDATA64___ (hProcess, dwData, TrayData64, 288, 0)
      hwnd = TrayData64.hwnd
      hIcon = TrayData64.hIcon
      ExePath = W2A (到字节集 (TrayData64.ExePath))
    .判断结束
    .如果真 (ExePath = “”)
      ExePath = GetProcessPath (hwnd)
    .如果真结束
    .如果真 (i = 1)
      .如果真 (取文本左边 (到文本 (szTips), 7) = “解决 PC”)
        b = 1
      .如果真结束
    .如果真结束
    .如果真 (寻找文本 (ExePath, “BinQQ.exe”, , 假) > 0) ' 当前图标是QQ
      .如果真 (到文本 (szTips) = “”) ' QQ图标在闪
        int = 取图标坐标 (_hToolbar, i - b)
        log (到文本 (i - b))
        ' LeftClick (_hToolbar, int.x, int.y)
        LeftDoubleClick (_hToolbar, int.x, int.y)
        _hwnd = hwnd
        value = 真
        跳出循环 ()
      .如果真结束
    .如果真结束
  .计次循环尾 ()
  VirtualFreeEx___ (hProcess, lpButton, 24, 65536)
  CloseHandle___ (hProcess)
.如果真结束
返回 (value)
.子程序 GetProcessPath, 文本型
.参数 hwnd
.局部变量 局_进程ID
.局部变量 局_所需内存
.局部变量 局_进程句柄
.局部变量 局_模块数组, , , "255"
.局部变量 局_模块路径, 文本型
.局部变量 局_返回路径, 文本型
GetWindowThreadProcessId___ (hwnd, 局_进程ID)
.如果真 (局_进程ID > 0)
  局_进程句柄 = OpenProcess___ (位或 (1024, 16), 假, 局_进程ID)
  .如果真 (局_进程句柄 > 0)
    .如果真 (EnumProcessModules___ (局_进程句柄, 局_模块数组 [1], 256, 局_所需内存))
      局_模块路径 = 取空白文本 (512)
      GetModuleFileNameExA___ (局_进程句柄, 局_模块数组 [1], 局_模块路径, 256)
      .如果 (寻找文本 (局_模块路径, “??”, , 假) ≠ -1)
        局_返回路径 = 子文本替换 (局_模块路径, “??”, “”, , , 真)
      .否则
        局_返回路径 = 局_模块路径
      .如果结束
      处理事件 ()
    .如果真结束
    CloseHandle___ (局_进程句柄)
  .如果真结束
  处理事件 ()
.如果真结束
返回 (局_返回路径)
.子程序 取图标坐标, int, , 返回对应的窗口坐标
.参数 hwnd, 整数型
.参数 index, 整数型
.局部变量 r, RECTData
.局部变量 z1, int
.局部变量 z2, int
.局部变量 w1, 整数型, , , 图标宽度
.局部变量 h1, 整数型, , , 图标高度
.局部变量 w2, 整数型
.局部变量 h2, 整数型
.局部变量 num, 整数型
.局部变量 value, 整数型
.如果真 (GetWindowRect___ (hwnd, r))
  .如果 (是否已创建 (窗口1))
    value = 到整数 (窗口1.选择框1.选中)
  .否则
    value = 1
  .如果结束
  num = SendMessageA_整数型___ (hwnd, 1048, 0, 0) - value
  w1 = r.x2 - r.x1
  h1 = r.y2 - r.y1
  w2 = w1 ÷ num - value
  h2 = h1 ÷ 2 - 选择 (value = 0, 0, 2)
  z1.x = w2 × index - w2 ÷ 2 + value
  z1.y = h1 ÷ 2 - 选择 (value = 0, 0, 2)
.如果真结束
返回 (z1)
.子程序 取托盘句柄, 整数型, 公开
.局部变量 hShellTray
.局部变量 TrayWnd
hShellTray = FindWindow___ (“Shell_TrayWnd”, “”)
.如果真 (hShellTray > 0)
  hShellTray = FindWindowExA___ (hShellTray, 0, “TrayNotifyWnd”, 字符 (0))
  .如果真 (hShellTray > 0)
    hShellTray = FindWindowExA___ (hShellTray, 0, “SysPager”, 字符 (0))
    .如果真 (hShellTray > 0)
      TrayWnd = FindWindowExA___ (hShellTray, 0, “ToolbarWindow32”, 字符 (0))
    .如果真结束
  .如果真结束
.如果真结束
返回 (TrayWnd)
.子程序 Is64, 逻辑型
.局部变量 IsWow64Process
.如果真 (IsWow64Process___ (GetCurrentProcess___ (), IsWow64Process) ≠ 0 且 IsWow64Process ≠ 0)
  返回 (真)
.如果真结束
返回 (假)
.子程序 W2A, 文本型
.参数 CharStr, 字节集
.局部变量 len, 整数型
.局部变量 Returned, 文本型
len = WideCharToMultiByte___ (1, 0, CharStr, -1, 字符 (0), 0, 字符 (0), 假)
Returned = 取空白文本 (len)
WideCharToMultiByte___ (1, 0, CharStr, -1, Returned, 取文本长度 (Returned), 字符 (0), 假)
返回 (Returned)

QQ新消息监听

此功能需要加载精易模块5.6

.版本 2
.支持库 spec
.程序集 窗口程序集_窗口1
.程序集变量 _hwnd, 整数型
.程序集变量 _检测, 逻辑型
.子程序 _窗口1_创建完毕
_hwnd = 取托盘句柄 ()
.子程序 _检测按钮_被单击
.局部变量 hwnd, 整数型
检测系统托盘 (_hwnd, hwnd)
.子程序 _移动按钮_被单击
.局部变量 z, int
z = 取图标坐标 (_hwnd, 到整数 (编辑框1.内容))
MoveTo (_hwnd, z.x, z.y)
.子程序 log
.参数 text, 文本型
.局部变量 time, 文本型
time = 到文本 (取现行时间 ())
time = 子文本替换 (time, “年”, “-”, , , 真)
time = 子文本替换 (time, “月”, “-”, , , 真)
time = 子文本替换 (time, “日”, “ ”, , , 真)
time = 子文本替换 (time, “时”, “:”, , , 真)
time = 子文本替换 (time, “分”, “:”, , , 真)
time = 子文本替换 (time, “秒”, “”, , , 真)
监听编辑框.加入文本 (time + “ ” + text + #换行符)
.子程序 _开始按钮_被单击
.如果真 (_检测)
  返回 ()
.如果真结束
_检测 = 真
log (“开始检测”)
CloseHandle___ (CreateThread___ (0, 0, &递归检查, 0, 0, 0))
.子程序 _停止按钮_被单击
_检测 = 假
.子程序 递归检查
.局部变量 value, 逻辑型
.局部变量 hwnd, 整数型
.局部变量 PID, 整数型
.如果真 (_检测)
  value = 检测系统托盘 (_hwnd, hwnd)
  .如果真 (value)
    GetWindowThreadProcessId___ (hwnd, PID)
    调试输出 (hwnd, PID)
    log (“收到新消息”)
    处理事件 ()
    延时 (1000)
    处理事件 ()
    子_执行模拟 (PID)
    处理事件 ()
  .如果真结束
  处理事件 ()
  延时 (选择 (value, 200, 1 × 1000))
  处理事件 ()
  CloseHandle___ (CreateThread___ (0, 0, &递归检查, 0, 0, 0))
  返回 ()
.如果真结束
log (“停止检测”)
.子程序 子_执行模拟
.参数 Pid, 整数型
.局部变量 nun, 整数型
.局部变量 窗口, 精易_窗口信息, , "0"
.局部变量 i, 整数型
.局部变量 矩形, RECTData
.局部变量 hwnds, 整数型
.局部变量 msg, 文本型
nun = 窗口_枚举 (窗口)
.计次循环首 (nun, i)
  .如果真 (窗口 [i].窗口类名 = “TXGuiFoundation” 且 窗口 [i].进程ID = Pid) ' 判断打开的窗口是不是之前点击的进程
    .判断开始 (窗口 [i].窗口标题 = “”)
    .判断 (窗口 [i].窗口标题 = “TXMenuWindow”)
    .判断 (窗口 [i].窗口标题 = “QQ”)
    .判断 (窗口 [i].窗口标题 = “验证消息”)
      log (“验证消息”)
      延时 (3500) ' 这里需要延时才能显示出来
      LeftClick (窗口 [i].窗口句柄, 450, 130) ' 好友请求
      LeftClick (窗口 [i].窗口句柄, 500, 120) ' 群请求
      延时 (100)
      LeftClick (FindWindow___ (“TXGuiFoundation”, “添加”), 218, 150) ' 同意
      延时 (100)
      PostMessageA_整数型___ (窗口 [i].窗口句柄, 16, 0, 0)
      返回 ()
    .默认
      GetWindowRect___ (窗口 [i].窗口句柄, 矩形)
      .如果真 (矩形.x2 ≠ 500 或 矩形.y2 ≠ 500)
        MoveWindow___ (窗口 [i].窗口句柄, 10, 10, 500, 500, 真)
        延时 (100)
      .如果真结束
      LeftClick (窗口 [i].窗口句柄, 380, 65)
      延时 (100)
      hwnds = FindWindow___ (“TXGuiFoundation”, “TXMenuWindow”)
      .如果真 (hwnds > 0)
        GetWindowRect___ (hwnds, 矩形)
        .如果真 (矩形.x2 - 矩形.x1 = 165 且 矩形.y2 - 矩形.y1 = 198)
          log (“群消息”)
          PostMessageA_整数型___ (窗口 [i].窗口句柄, 16, 0, 0)
          返回 ()
        .如果真结束
      .如果真结束
      LeftClick (窗口 [i].窗口句柄, 225, 65)
      延时 (100)
      hwnds = FindWindowExA___ (0, 0, “TXGuiFoundation”, “TXMenuWindow”)
      .如果真 (hwnds > 0)
        GetWindowRect___ (hwnds, 矩形)
        .判断开始 (矩形.x2 - 矩形.x1 = 129 且 矩形.y2 - 矩形.y1 = 80)
          log (“临时会话消息”)
          PostMessageA_整数型___ (窗口 [i].窗口句柄, 16, 0, 0)
          返回 ()
        .判断 (矩形.x2 - 矩形.x1 = 165 且 矩形.y2 - 矩形.y1 = 84)
          log (“好友消息”)
          LeftClick (窗口 [i].窗口句柄, 220, 420)
          延时 (20)
          msg = “http://www.hibbba.com/ 贝贝吧”
          文本_投递 (窗口 [i].窗口句柄, msg)
          延时 (20)
          LeftClick (窗口 [i].窗口句柄, 430, 490)
          延时 (100)
          PostMessageA_整数型___ (窗口 [i].窗口句柄, 16, 0, 0)
          延时 (100)
          LeftClick (FindWindow___ (“TXGuiFoundation”, “提示”), 225, 140)
          返回 ()
        .判断 (矩形.x2 - 矩形.x1 = 153 且 矩形.y2 - 矩形.y1 = 80)
          log (“讨论组消息”)
          LeftClick (窗口 [i].窗口句柄, 266, 84)
          延时 (100)
          LeftClick (FindWindow___ (“TXGuiFoundation”, “提示”), 225, 140)
          延时 (200)
          .如果真 (FindWindow___ (“TXGuiFoundation”, “提示”) > 0)
            log (“执行退出讨论组”)
            LeftClick (FindWindow___ (“TXGuiFoundation”, “提示”), 296, 138)
          .如果真结束
          返回 ()
        .默认
        .判断结束
      .如果真结束
    .判断结束
  .如果真结束
.计次循环尾 ()
.子程序 MoveTo
.参数 hwnd
.参数 x
.参数 y
.局部变量 int, int
ClientToScreen___ (hwnd, int)
SetCursorPos___ (int.x + x, int.y + y) ' 对应屏幕的坐标
.子程序 LeftClick
.参数 hwnd
.参数 x
.参数 y
.局部变量 value, 整数型
value = x + y × 65536
PostMessageA_整数型___ (hwnd, 512, 2, value)
PostMessageA_整数型___ (hwnd, 513, 1, value)
PostMessageA_整数型___ (hwnd, 514, 0, value)
.子程序 LeftDoubleClick
.参数 hwnd
.参数 x
.参数 y
.局部变量 value, 整数型
value = x + y × 65536
PostMessageA_整数型___ (hwnd, 512, 2, value)
PostMessageA_整数型___ (hwnd, 513, 1, value)
PostMessageA_整数型___ (hwnd, 514, 0, value)
PostMessageA_整数型___ (hwnd, 515, 0, value)
.子程序 _窗口1_将被销毁
_停止按钮_被单击 ()

运行结果:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对靠谱客的支持。如果你想了解更多相关内容请查看下面相关链接

最后

以上就是慈祥鲜花为你收集整理的易语言通过监控图标实现QQ消息监控的代码的全部内容,希望文章能够帮你解决易语言通过监控图标实现QQ消息监控的代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(124)

评论列表共有 0 条评论

立即
投稿
返回
顶部