msaa监听窗口消息事件

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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容