小编Fab*_*ser的帖子

CGEventPostToPSN()的替代方案,用于在沙盒环境中激活其他应用程序的菜单项?

我有这个应用程序,我需要从我的应用程序中激活其他应用程序的菜单项(如打印cmd + p).现在我正在使用CGEventPostToPSN()来完成这项工作并且工作正常,但是当我激活沙盒时,它会停止工作.

CGEventPostToPSN(&psn, keyDownEvent);
CFRelease(keyDownEvent);
CGEventPostToPSN(&psn, keyUpEvent);
CFRelease(keyUpEvent);
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,当我需要启用沙盒时,我该怎么办?我听说过很多关于Accessibility API的内容,但我无法了解如何激活其他应用程序的菜单项.我很感谢你对这个问题的任何答案.

法比安

macos cocoa background sandbox appstore-sandbox

18
推荐指数
1
解决办法
1310
查看次数

将NSEvent发送到后台应用程序

我需要将密钥组合^⌘C发送到带有包标识符的后台应用程序com.company.app.然后,键组合应激活该应用程序中的菜单项.

不幸的是,我不知道如何做到这一点.一些研究指出我使用NSEvent和CGEvent API CGEventPostToPSN(),但我无法正常工作,因为我不知道如何设置密钥组合.CGEventPost()似乎不适用于我创建的事件,即使所需的应用程序是活动的.

这是我最终提出的代码,但这不起作用:

CGWindowID windowNumber;
NSEvent *event = [NSEvent keyEventWithType:NSKeyUp
                                  location:NSZeroPoint
                             modifierFlags:(NSControlKeyMask | NSCommandKeyMask)
                                 timestamp:[[NSProcessInfo processInfo] systemUptime]
                              windowNumber:windowNumber
                                   context:[NSGraphicsContext currentContext]
                                characters:@"c"
               charactersIgnoringModifiers:@"c"
                                 isARepeat:NO
                                   keyCode:8];
CGEventRef eventRef = [event CGEvent];
Run Code Online (Sandbox Code Playgroud)

我现在该怎么办?为什么没有NSEvent相应的CGEventPost()?是否有更简单的方法来激活该菜单项而不是发布活动?我可以很容易地得到一个实例NSRunningApplication,但是没有合适的API来完成我的任务.

更新: 我搞定了:

- (void) postFakedKeyboardEventForCopyScreenToPasteboardToPSN:(ProcessSerialNumber)psn {
    CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStatePrivate);
    CGEventRef keyDownEvent = CGEventCreateKeyboardEvent(source, (CGKeyCode)8, true);
    CGEventSetFlags(keyDownEvent, (kCGEventFlagMaskControl | kCGEventFlagMaskCommand));
    CGEventRef keyUpEvent = CGEventCreateKeyboardEvent(source, (CGKeyCode)8, false);
    CGEventSetFlags(keyUpEvent, (kCGEventFlagMaskControl | kCGEventFlagMaskCommand));
    CFRelease(source);

    CGEventPostToPSN(&psn, keyDownEvent);
    CFRelease(keyDownEvent);
    CGEventPostToPSN(&psn, keyUpEvent);
    CFRelease(keyUpEvent); …
Run Code Online (Sandbox Code Playgroud)

macos cocoa objective-c keycode nsevent

7
推荐指数
1
解决办法
2125
查看次数

GKLocalPlayer 身份验证不起作用,但 isAuthenticated 返回 YES(游戏中心沙箱)

我正在努力在我的游戏中集成基于回合的比赛,几天前我开始从 GameKit API 收到奇怪的错误,说本地玩家没有经过身份验证,即使他是。

当我启动应用程序时,将authenticateHandler调用 ,显示视图控制器,输入密码后,authenticaHandler再次调用 并且本地播放器似乎已通过身份验证。isAuthenticated返回YES

但是一旦我开始使用任何 GameKit API,比如loadFriendsWithCompletionHandler:,就会返回一个错误,指出玩家尚未通过身份验证。

这是用于处理身份验证更改的代码。

[[GKLocalPlayer localPlayer] setAuthenticateHandler:^(UIViewController *viewController, NSError *error) {
    if ([[GKLocalPlayer localPlayer] isAuthenticated]) {
        // Player authenticated
    } else {
        // Player not authenticated

        if (viewController != nil) {
            // Present view controller
        }
    }
}];
Run Code Online (Sandbox Code Playgroud)

这是我在调用任何 GameKit 方法时收到的错误消息。请注意,-isAuthenticated返回错误时仍然返回YES。

查找匹配时出错:Error Domain=GKErrorDomain Code=6 “请求的操作无法完成,因为本地播放器尚未通过身份验证。” UserInfo=0x14e9f950 {NSLocalizedDescription=请求的操作无法完成,因为本地播放器尚未通过身份验证。}
(lldb) print (BOOL) [[GKLocalPlayer localPlayer] isAuthenticated] (BOOL) $3 = YES

我正在 Game Center 沙箱中进行测试,几天前它开始发生。以前,我根本没有遇到这个问题。 …

objective-c gamekit ios game-center

7
推荐指数
1
解决办法
5356
查看次数

spring-shell和CRaSH有什么区别?

spring-boot使用的CRaSH项目可以为Spring提供交互式shell.

我发现spring-shell也有类似的功能.

那么他们之间有什么区别?为什么不使用spring-sehll进行弹簧启动?

任何意见或反馈将不胜感激.

java spring spring-shell

4
推荐指数
1
解决办法
1913
查看次数