美文网首页aardio
msaa监听窗口消息事件

msaa监听窗口消息事件

作者: LCSan | 来源:发表于2025-03-04 09:15 被阅读0次
import fsys.lnk
import inet.url

// 打开小程序,视频号
function openXiaoChenXu(){
    var path,param = ..fsys.lnk.search("WeChat.exe"); 
    ..process.execute(path,param);
    sleep(2000);
}

import win.ui;
import console;
user32 := raw.loadDll("user32.dll")

// 定义Windows API
var SetWinEventHook = user32.api("SetWinEventHook", "int(int eventMin, int eventMax, ptr hmod, ptr callback, int pid, int tid, int flags)")
var UnhookWinEvent = user32.api("UnhookWinEvent", "int(ptr hHook)")

// 获取目标窗口的进程ID
var targetHwnd = win.find( "WeChatMainWndForPC", "微信" )
..console.dump(targetHwnd)
var tid,pid = win.getThreadProcessId(targetHwnd)
..console.dump(tid,pid)


// 基本事件
_EVENT_OBJECT_CREATE = 0x8000
_EVENT_OBJECT_DESTROY = 0x8001
_EVENT_OBJECT_SHOW = 0x8002
_EVENT_OBJECT_HIDE = 0x8003
_EVENT_OBJECT_REORDER = 0x8004

// 焦点相关
_EVENT_OBJECT_FOCUS = 0x8005
_EVENT_OBJECT_SELECTION = 0x8006
_EVENT_OBJECT_SELECTIONADD = 0x8007
_EVENT_OBJECT_SELECTIONREMOVE = 0x8008
_EVENT_OBJECT_SELECTIONWITHIN = 0x8009

// 属性变更
_EVENT_OBJECT_STATECHANGE = 0x800A
_EVENT_OBJECT_LOCATIONCHANGE = 0x800B
_EVENT_OBJECT_NAMECHANGE = 0x800C
_EVENT_OBJECT_DESCRIPTIONCHANGE = 0x800D
_EVENT_OBJECT_VALUECHANGE = 0x800E
_EVENT_OBJECT_PARENTCHANGE = 0x800F
_EVENT_OBJECT_HELPCHANGE = 0x8010
_EVENT_OBJECT_DEFACTIONCHANGE = 0x8011
_EVENT_OBJECT_ACCELERATORCHANGE = 0x8012

WINEVENT_OUTOFCONTEXT = 0x0000

import winex.accObject;

// 定义事件回调
var eventCallback = raw.tostdcall(
    function(hHook, event, hwnd, idObject, idChild, tid, time) {
        ..console.log(..string.format("0x%X", event))
        try {
            // 获取IAccessible对象
            var acc = winex.accObject.fromWindow(hwnd,,idObject)
            if !acc return

            // 获取变更后的名称
            console.log("名称变化检测到:")
            console.log("窗口句柄:", hwnd, "对象ID:", idObject,"子对象ID:", idChild)
            console.log("新名称:", acc.roleText(),acc.name(),acc.value(),acc.stateText())
            console.log("-------------------")
        } catch(e) {
            console.log("处理错误:", e.message)
        }
    }, "void(int hHook,int event,int hwnd,int idObject,int idChild,int tid,int time)"
)

// 安装事件钩子
var hHook = SetWinEventHook(
    _EVENT_OBJECT_CREATE,
    _EVENT_OBJECT_ACCELERATORCHANGE,
    ,
    eventCallback,
    pid,  // 指定目标进程
    tid,
    WINEVENT_OUTOFCONTEXT
)

// 保持脚本运行
win.loopMessage()

// 清理钩子(通常需要注册窗口关闭事件)
UnhookWinEvent(hHook)

相关文章

  • 监听事件之Target-Action、协议代理

    监听事件:事件指点击,触摸这样的手势所引发的消息,监听事件即监听这类消息。监听事件的目的是处理这类消息。 监听产生...

  • iframe窗口事件监听

  • 推送MobPush-API说明

    1. 消息监听接口 MobPushReceiver:消息监听接口(包含接收自定义消息、通知消息、通知栏点击事件、别...

  • Vue监听窗口变化

    监听resize事件,此事件将在窗口大小变化时触发,在事件回调中使用body.getBoundingClientR...

  • 全屏切换,退出全屏

    代码部分:首先在created中监听窗口切换事件和键盘按下事件,在组件销毁之前移除监听: 判断是否是全屏: 全局监...

  • uniapp全局监听事件的大坑...

    监听全局的自定义事件发射消息:uni.$emit(eventName,OBJECT)监听消息:uni.$on(ev...

  • Unity Tool - Lua编辑

    用途 关联Project窗口lua脚本文件 关联Console窗口lua输出的日志 方案 监听打开资源事件Unit...

  • 监听器的实现及原理

    原理: 从字面上理解其实就是监听某个事件的发生,当被监听的时间发生了,就会给该事件的监听者法搜没那个消息,告诉监听...

  • spring的事件监听器

    创建一个自定义的事件 事件的监听 在spring中注册监听器 发送消息 控制台打印

  • 在 Vue 中使用lodash对事件进行防抖和节流

    有些浏览器事件可以在短时间内快速触发多次,比如调整窗口大小或向下滚动页面。例如,监听页面窗口滚动事件,并且用户持续...

网友评论

    本文标题:msaa监听窗口消息事件

    本文链接:https://www.haomeiwen.com/subject/ynecmjtx.html