我写过一个需要使用的Android应用程序AccessibilityService
.我知道如何检查手机上是否启用了辅助功能,但我无法确定是否已在辅助功能菜单中专门启用了我的应用.
我想提示用户是否AccessibilityService
没有运行,但找不到这样做的好方法.是否有任何我可能遗漏的API方法可以让我知道设备上启用了哪些辅助功能服务?
我想在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将提示最终用户权限的对话框以启用辅助功能.此外,用户必须在启用辅助功能后重新启动应用程序.
我们可以使用Applescript或任何其他API以编程方式在10.9上启用对辅助设备的访问吗?任何帮助解决这个问题将不胜感激.
我正在开发一个应用程序,可以在屏幕上移动第三方应用程序的窗口.
为了概述所有当前打开的窗口,我使用
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
我想在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
我正在使用辅助功能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) 我正在尝试使用辅助功能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) 我正在尝试使用MSAA(在Win7上)获取chrome浏览器中的地址栏并将其替换为不同的URL.当chrome正常启动时(作为登录用户),我可以通过遍历进程拥有的窗口类的UI树,使用IAccessible接口找到地址栏.但是,如果我以不同的用户身份启动chrome(通过在Windows中使用RunAs),我会在浏览"RunAs"流程所拥有的类时看到名称为"chrome legacy window"的窗口.窗口层次结构和内容与我在扫描以登录用户身份运行的进程时看到的内容大不相同.
虽然我可以在两个浏览器实例中看到(窗口类名称)Chrome_WidgetWin_0和Chrome_WidgetWin_1,但只有作为当前用户运行的那个才能访问地址栏.知道chrome作为不同用户推出时发生了什么?有没有解决方法或者我应该考虑不同的技术?
我想在我的Android应用程序中实现一个辅助功能服务,它可以执行以下操作:
=>获取任何应用的屏幕点击/点击.
=>获取点击/点击的视图.
最初我认为由于安全原因这样做是不可能的,但在做一些研究时我遇到了一个应用程序(本机剪贴板),它可以执行以下操作:
=> EditText
从任何应用程序检测s 上的点击
=>为那些EditText
s 添加值(字符串).
我还看到了谷歌的对讲,无论你点什么,它都会说话.要说它,它需要跨应用程序访问视图(获取文本).
这些应用程序显然使用"辅助功能服务"来实现,但我想知道如何实现它?
我主要为我需要实现的东西找到教程或内容,但我正在努力寻找一些实现我的应用程序的辅助功能服务.我确实访问了Android官方文档,这对于像我这样的新手来说太技术了.(我最初更喜欢向Youtube,SO和教程网站学习).如果你能指出我介绍其他一些涵盖这些内容的教程,那也很棒.
android accessibility accessibility-api accessibilityservice android-accessibility
Apple的Accessibility Inspector工具显示与当前检查的UI元素对应的Objective-C类.请参NSButtonCell
见此屏幕截图的最底部:
但是,如何在我自己的代码中提取此信息?Apple七年之久的UIElementInspector
示例代码中的辅助功能方法不会显示元素的类名.
对Accessibility Inspector进行反向工程,暗示可以通过AXClassName
属性获取Objective-C类名,但该属性对我来说总是零.
正如这里提到的,我可以打开 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
android ×4
objective-c ×4
cocoa ×3
macos ×3
android-4.0-ice-cream-sandwich ×1
appkit ×1
macos-carbon ×1
toast ×1