开发者

Equivalent Carbon 32-bit call for using in 64-bit application - GetApplicationEventTarget()

开发者 https://www.devze.com 2023-01-01 04:09 出处:网络
I\'m writing a 64-bit Cocoa application. I need to register for global key events. So I wrote this piece of code :

I'm writing a 64-bit Cocoa application. I need to register for global key events. So I wrote this piece of code :

- (void)awakeFromNib
{
    EventHotKeyRef gMyHotKeyRef;
    EventHotKeyID gMyHotKeyID;
    EventTypeSpec eventType;
    eventType.eventClass=kEventClassKeyboard;
    eventType.eventKind=kEventHotKeyPressed;
    eventType.eventClass=kEventClassKeyboard;
    eventType.eventKind=kEventHotKeyPressed;
    InstallApplicationEventHandler(&MyHotKeyHandler,1,&eventType,NULL,NULL);
    gMyHotKeyID.signature='htk1';
    gMyHotKeyID.id=1;
    RegisterEventHotKey(49, cmdKey+optionKey, gMyHotKeyID,
     **GetApplicationEventTarget**(), 0, &gMyHotKeyRef);
}

But since GetApplicationEventTarget() is not supported for 64-bit applications I'm getting errors. If I declare it, then I don't get any errors but the application crashes.

Is there any equivalent method for GetApplicatio开发者_开发技巧nEventTarget() (defined in Carbon framework) to use in 64-bit applications.

Or is there any way to get the global key events using cocoa calls?

Any help is appreciated.

Thanks, Dheeraj.


I wrote a Cocoa wrapper for Carbon hot keys (and as far as my testing showed, it works in 64-bit apps), and you can find it on github here: http://github.com/davedelong/DDHotKey

I'm using GetEventDispatcherTarget() for hotkey registration.


I think it is a documentation error when it says that GetApplicationEventTarget is not supported in 64 bits. If you look in CarbonEvents.h (from the 10.6 SDK), you see that the declaration of GetUserFocusEventTarget is bracketed by #if !__LP64__ ... #endif, but just above it, the declaration of GetApplicationEventTarget is not. GetApplicationEventTarget is probably not the cause of the crash. In your code, gMyHotKeyRef and gMyHotKeyID look like they were intended to be global variables, but they're local.


Carbon isn't supported in 64-bit applications. See the answer to this question for information on how to use CGEventTap to do this in a supported way in Cocoa.

0

精彩评论

暂无评论...
验证码 换一张
取 消