什么是PostEvent的正确替代品

时间:2013-07-07 13:18:15

标签: macos macos-carbon

我收到警告,PostEvent已被弃用,我认为应该使用PostEventToQueue,但它需要两个额外的参数,我找不到任何关于参数组合的文档(一个是队列规范,另一个是事件优先级)将等同于PostEvent

2 个答案:

答案 0 :(得分:1)

PostEventToQueue用于碳事件,而不是像PostEvent这样的低级操作系统事件。如果要发布键盘或鼠标事件,则应使用CGEventPost

编辑添加:要在当前位置发布鼠标,我认为(未经测试)您可以执行此操作:

CGEventRef theEvent = CGEventCreate( NULL );
CGEventSetType( theEvent, kCGEventLeftMouseDown );
CGEventPost( theEvent );
CFRelease( theEvent );

答案 1 :(得分:0)

我认为假设使用GetMainEventQueue()返回的事件队列(如果你在主线程上,则为GetCurrentEventQueue)和kEventPriorityStandard为优先级是合理的,会得到相当于PostEvent的结果。

请注意,这些只会影响您自己的应用程序。即使是旧的事件管理器也可能无法访问“操作系统事件队列” - 如果它只是Carbon Event Manager版本的包装器,我不会感到惊讶。如果你想发布可以打到其他应用程序的事件,你需要切换到CGEvent。