【自动化】Java Access Bridge 使用说明

【自动化】Java Access Bridge 使用说明

Java Access Bridge是一项在Microsoft Windows动态链接库(DLL)中公开Java Accessibility API的技术,使实现Java Accessibility API的 Java应用程序对Microsoft Windows系统上的辅助技术可见。

开启jab服务

1 、首先获取java版本信息,1.8版本以下需要首先安装依赖文件。

获取java版本信息的命令
获取java版本信息
java.exe -version

2、安装依赖文件

依赖文件下载链接
oracle官方下载链接
个人下载链接
安装依赖文件
oracle官方指导手册
图表说明
注意:(accessibility.properties放在当前用户目录下将影响当前用户的全部java程序)

在这里插入图片描述

3、开启jab

注意:开启JAB后,需重启java程序。

3.1、使用jabswitch.exe

在jre\bin目录下找到jabswitch.exe

使用jabswitch.exe开启和关闭jab

jabswitch.exe -enable
jabswitch.exe -disable
3.2、修改accessibility.properties文件

在\jre\lib目录或者用户目录下找到accessibility.properties文件,增加启动参数

accessibility.properties
assistive_technologies=com.sun.java.accessibility.AccessBridge
screen_magnifier_present=true
3.3、在windows轻松使用中设置

在windows轻松使用中勾选 Enable Java Access Bridge 以开启jab服务。

4、测试工具

JavaMonkey

JavaFerret

access-bridge-explorer

5 测试demo

二、针对Jab操作的类

# -*- coding: utf-8 -*-
 
import time
import copy
import ctypes
from rpa import log
from rpa.java._jab_structure import AccessibleContextInfo, AccessibleTextInfo, AccessibleTextItemsInfo
from rpa.java._load_dll import dll
from rpa.win32 import get_hwnd_by_title, mouse_click
 
MAX_BUFFER_SIZE = 10240
MAX_STRING_SIZE = 1024
SHORT_STRING_SIZE = 256
 
 
class JavaElement:
    __slots__ = ("vmid", "ac", "vac")
 
    def __init__(self, vmid, ac):
        self.vmid = vmid
        self.ac = ac
        self.vac = self.ac
 
    def __getattr__(self, attr):
        try:
            context_info = AccessibleContextInfo()
            dll.GetAccessibleContextInfo(self.vmid, self.ac, ctypes.byref(context_info))
            return context_info.__getattribute__(attr)
        except AttributeError:
            raise Exception(f"AttributeError:'JavaElement' object has no attribute '{attr}'")
 
    def __getitem__(self, item):
        try:
            context_info = AccessibleContextInfo()
            dll.GetAccessibleContextInfo(self.vmid, self.ac, ctypes.byref(context_info))
            return context_info.__getattribute__(item)
        except AttributeError:
            raise Exception(f"AttributeError:'JavaElement' object has no attribute '{item}'")
 
    @property
    def index_array(self):
        index_array = []
        while True:
            index = self.indexInParent  # 最顶层的indexInParent=-1
            if index < 0:
                break
            index_array.insert(0, index)
            parent_ac = dll.GetAccessibleParentFromContext(self.vmid, self.ac)
            if parent_ac <&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值