标签: accessibility-api

Android:如何检查是否启用了特定的AccessibilityService

我写过一个需要使用的Android应用程序AccessibilityService.我知道如何检查手机上是否启用了辅助功能,但我无法确定是否已在辅助功能菜单中专门启用了我的应用.

我想提示用户是否AccessibilityService没有运行,但找不到这样做的好方法.是否有任何我可能遗漏的API方法可以让我知道设备上启用了哪些辅助功能服务?

android accessibility-api

39
推荐指数
4
解决办法
3万
查看次数

在10.9上以编程方式启用辅助设备的访问

我想在10.9上以编程方式启用对辅助设备的访问.在10.8及更低版本中,我使用以下Applescript来启用辅助设备的访问:

tell application "System Events"
if UI elements enabled is false then
    set UI elements enabled to true
end if
end tell
Run Code Online (Sandbox Code Playgroud)

凭借10.9,Apple已将可访问性选项移至系统偏好设置➞安全和隐私➞隐私➞辅助功能.与以前版本的OS X(对所有应用程序使用通用复选框)不同,10.9中的新功能允许用户单独选择哪些应用程序可以控制系统以执行其各种脚本功能.

关于可访问性的新系统首选项

Apple尚未向开发人员提供任何API,以便以编程方式为应用程序启用辅助功能.因此,当应用程序使用辅助功能API时,Mac OS 10.9将提示最终用户权限的对话框以启用辅助功能.此外,用户必须在启用辅助功能后重新启动应用程序.

Xcode为10.9 OS提供的默认提示对话框

我们可以使用Applescript或任何其他API以编程方式在10.9上启用对辅助设备的访问吗?任何帮助解决这个问题将不胜感激.

macos cocoa accessibility objective-c accessibility-api

38
推荐指数
5
解决办法
2万
查看次数

通过OSX Accessibility API获取窗口号

我正在开发一个应用程序,可以在屏幕上移动第三方应用程序的窗口.

为了概述所有当前打开的窗口,我使用

CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);
Run Code Online (Sandbox Code Playgroud)

这将返回定义每个打开窗口的字典数组.这是一个返回的示例字典:

{
    kCGWindowAlpha = 1;
    kCGWindowBounds =         {
        Height = 442;
        Width = 475;
        X = 3123;
        Y = "-118";
    };
    kCGWindowIsOnscreen = 1;
    kCGWindowLayer = 0;
    kCGWindowMemoryUsage = 907184;
    kCGWindowName = Untitled;
    kCGWindowNumber = 7328;
    kCGWindowOwnerName = TextEdit;
    kCGWindowOwnerPID = 20706;
    kCGWindowSharingState = 1;
    kCGWindowStoreType = 2;
    kCGWindowWorkspace = 3;
},
Run Code Online (Sandbox Code Playgroud)

字典中充满了其他地方使用的良好信息,但缺少可用于修改窗口位置的辅助功能对象.窗口编号清楚地标识Windows.

我现在使用PID(kCGWindowOwnerPID)为窗口的应用程序创建一个辅助功能对象:

AXUIElementRef app = AXUIElementCreateApplication(pid);
Run Code Online (Sandbox Code Playgroud)

然后使用AXUIElementCopyAttributeValues检索应用程序已打开的所有窗口的列表:

NSArray *result;

AXUIElementCopyAttributeValues(
                               (AXUIElementRef) app, 
                               kAXWindowsAttribute,
                               0,
                               99999,
                               (CFArrayRef *) &result
                               );
Run Code Online (Sandbox Code Playgroud)

这适用于并返回一组AXUIElements.这是我被困的地方.似乎没有API调用来检索辅助功能对象的窗口号.有没有办法

a)找到辅助功能对象的窗口编号(最终迭代数组并找到正确的窗口)

要么 …

cocoa accessibility macos-carbon objective-c accessibility-api

22
推荐指数
2
解决办法
5571
查看次数

辅助功能服务未启动

我想在android ics(4.0.3)中记录所有toast事件,但我无法记录任何系统事件.服务还没开始!

根据这个问题: onAccessibilityEvent(AccessibilityEvent事件)没有拦截通知

MyAccessibilityService.java

package com.test.toasts2;

import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.Notification;
import android.os.Parcelable;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
import android.widget.Toast;

public class MyAccessibilityService extends AccessibilityService {


    public static final String TAG = "volumeMaster";

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event)
    {
        Log.v(TAG, "***** onAccessibilityEvent");
        Toast.makeText(getApplicationContext(), "Got event from: " + event.getPackageName(), Toast.LENGTH_LONG).show();
    }

    @Override
    public void onInterrupt()
    {
        Log.v(TAG, "***** onInterrupt");
    }

    @Override
    public void onServiceConnected()
    {
        Log.v(TAG, "***** onServiceConnected");       


        AccessibilityServiceInfo info = new AccessibilityServiceInfo();
        info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
        info.notificationTimeout = 100; …
Run Code Online (Sandbox Code Playgroud)

android accessibility-api toast android-4.0-ice-cream-sandwich

16
推荐指数
2
解决办法
3万
查看次数

我如何使用Cocoa的Accessibility API来检测窗口是否被带到前面?

我正在使用辅助功能API来检测某个应用程序何时打开窗口,关闭窗口,何时移动窗口或调整窗口大小,或者进行主要和/或聚焦.但是,客户端应用程序似乎在没有触发Accessibility API通知的情况下将窗口移到前面.

我的应用程序如何检测另一个应用程序何时将窗口置于前面而不使其成为关键?

我希望找到适用于OS X 10.4和10.5的解决方案

更多信息:我现在正在使用这些声明.当用户手动选择窗口将其置于前面时,它们可以正常工作.但是,当应用程序本身将窗口移到前面时,它确实不起作用.

AXObserverAddNotification(observer, element, kAXMainWindowChangedNotification, 0);
AXObserverAddNotification(observer, element, kAXFocusedWindowChangedNotification, 0);
Run Code Online (Sandbox Code Playgroud)

cocoa accessibility-api

13
推荐指数
3
解决办法
1万
查看次数

使用Accessibility API在Mac OS X上移动其他窗口

我正在尝试使用辅助功能API来改变其他应用程序窗口的位置.我希望做的是从所有应用程序获取屏幕上的所有窗口,然后将它们全部移动到给定的偏移量(比如说5或10)或任何价值).我这样做有困难,因为这是针对我的Objective-C编程的第一天.

这就是我现在正在做的事情.首先,我找到了Windows列表及其PID CGWindowListCopyWindowInfo.然后,对于我AXUIElementCreateApplication用来获取窗口的每个AXUIElementRef窗口.之后,我应该使用AXUIElementCopyAttributeValue属性kAXPositionAttribute(我没有获得正确的位置,总是得到零).最后,我应该将所需的偏移量添加到位置并使用AXUIElementSetAttributeValue属性kAXPositionAttribute和新的位置点(即使我设置了0,0的绝对值,我也会得到运行时错误).

有人可以用我上面描述的片段来帮助我,因为我尝试了很多没有运气的东西.此外,它不应该完全像我决定在上面实现它.如果有更好的方法可以做到这一点,那么我很乐意改变它.

更新: 根据评论中的要求,以下是其中一个尝试的代码段:

// Get all the windows
CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
NSArray* arr = CFBridgingRelease(windowList);
// Loop through the windows
for (NSMutableDictionary* entry in arr)
{
    // Get window PID
    pid_t pid = [[entry objectForKey:(id)kCGWindowOwnerPID] intValue];
    // Get AXUIElement using PID
    AXUIElementRef elementRef = AXUIElementCreateApplication(pid);
    CFTypeRef position;
    CGPoint point;
    // Get the position attribute of the window (maybe something is wrong?)
    AXUIElementCopyAttributeValue(elementRef, …
Run Code Online (Sandbox Code Playgroud)

macos objective-c accessibility-api window-position

12
推荐指数
1
解决办法
4830
查看次数

使用RunAs启动chrome时的"Chrome旧版窗口"

我正在尝试使用MSAA(在Win7上)获取chrome浏览器中的地址栏并将其替换为不同的URL.当chrome正常启动时(作为登录用户),我可以通过遍历进程拥有的窗口类的UI树,使用IAccessible接口找到地址栏.但是,如果我以不同的用户身份启动chrome(通过在Windows中使用RunAs),我会在浏览"RunAs"流程所拥有的类时看到名称为"chrome legacy window"的窗口.窗口层次结构和内容与我在扫描以登录用户身份运行的进程时看到的内容大不相同.

虽然我可以在两个浏览器实例中看到(窗口类名称)Chrome_WidgetWin_0和Chrome_WidgetWin_1,但只有作为当前用户运行的那个才能访问地址栏.知道chrome作为不同用户推出时发生了什么?有没有解决方法或者我应该考虑不同的技术?

google-chrome accessibility-api microsoft-accessibility

11
推荐指数
1
解决办法
3647
查看次数

如何在Android中使用Accessibility收听点击并获取视图?

我想在我的Android应用程序中实现一个辅助功能服务,它可以执行以下操作:

=>获取任何应用的屏幕点击/点击.

=>获取点击/点击的视图.

最初我认为由于安全原因这样做是不可能的,但在做一些研究时我遇到了一个应用程序(本机剪贴板),它可以执行以下操作:

=> EditText从任何应用程序检测s 上的点击

=>为那些EditTexts 添加值(字符串).

我还看到了谷歌的对讲,无论你点什么,它都会说话.要说它,它需要跨应用程序访问视图(获取文本).

这些应用程序显然使用"辅助功能服务"来实现,但我想知道如何实现它?

我主要为我需要实现的东西找到教程或内容,但我正在努力寻找一些实现我的应用程序的辅助功能服务.我确实访问了Android官方文档,这对于像我这样的新手来说太技术了.(我最初更喜欢向Youtube,SO和教程网站学习).如果你能指出我介绍其他一些涵盖这些内容的教程,那也很棒.

android accessibility accessibility-api accessibilityservice android-accessibility

11
推荐指数
1
解决办法
1737
查看次数

如何获取与AXUIElement对应的Objective-C类名?

Apple的Accessibility Inspector工具显示与当前检查的UI元素对应的Objective-C类.请参NSButtonCell见此屏幕截图的最底部:

Accessibility Inspector截图

但是,如何在我自己的代码中提取此信息?Apple七年之久的UIElementInspector示例代码中的辅助功能方法不会显示元素的类名.

对Accessibility Inspector进行反向工程,暗示可以通过AXClassName属性获取Objective-C类名,但该属性对我来说总是零.

macos accessibility objective-c accessibility-api appkit

8
推荐指数
1
解决办法
347
查看次数

如何以编程方式打开我的应用程序的辅助功能设置?

正如这里提到的我可以打开 Android 辅助功能设置页面;我知道我可以使用以下代码直接打开我的应用程序辅助功能设置:

Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivityForResult(intent, 0);
Run Code Online (Sandbox Code Playgroud)

但是我如何在Android中启动我自己的APP的辅助功能设置页面?我想将用户直接引导到我的应用程序辅助功能设置页面以授予权限。

我不想使用 adb 并且我无法根植我的设备。我找不到任何可行的解决方案;有什么建议?

android accessibility accessibility-api accessibilityservice android-accessibility

7
推荐指数
0
解决办法
901
查看次数