【问题标题】:What's the right replacement for PostEvent什么是 PostEvent 的正确替代品
【发布时间】:2013-07-07 13:18:14
【问题描述】:

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

【问题讨论】:

  • 请仅将 xcode 标签用于与 XCode 本身相关的问题,而不是与您正在开发的语言/操作系统相关的编程问题。我已将其删除并为您添加了可可标签。
  • @Inafziger,我也看不出 Cocoa 标签相关的任何原因。
  • 它是 Cocoa API 的一部分,所以不无道理,在某种程度上可能比“osx”更合理。
  • @David,Cocoa 的组成部分是什么? PostEvent 是 Carbon 的一部分,替代品 CGEventPost 是 Quartz Event Services 的一部分。
  • 很公平 --- 但这真的很挑剔 ---- 我真的很想要一个答案。

标签: macos macos-carbon


【解决方案1】:

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

编辑添加:要在当前位置发布鼠标,我认为(未经测试)您可以这样做:

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

【讨论】:

  • 那么在我正在试验的 JUCE 代码中,与已弃用的调用等效的 CGEventPost 调用是什么。调用是 PostEvent (::mouseDown, 0);
  • 谢谢,我会试试你的建议。可惜不得不用四个电话代替一个电话!
  • PostEventToQueue 已被弃用的声明的来源是什么?标题和 Carbon Event Manager 文档都没有提到弃用。
  • 另外,别忘了锻造一个鼠标-up 来配合鼠标向下。有些应用程序消耗事件的级别比平时低,例如在 Wine 下或在 X11 下运行的应用程序,可能仅对其中一半的应用程序反应不佳——而且,就此而言,不能保证所有 Cocoa 应用程序都能够也可以理解它。
  • 哦,还有一件事:有一个CGEventCreateMouseEvent 函数,它使您能够在一次调用中指定鼠标相关事件所需的所有事实。特别地,该位置对于鼠标按下事件可能很重要。 ☺
【解决方案2】:

我认为有理由假设使用GetMainEventQueue()(或GetCurrentEventQueue,如果您在主线程上)返回的事件队列和kEventPriorityStandard作为优先级,将获得等效的结果到PostEvent

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

【讨论】:

    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 2016-08-30
    • 2013-07-09
    • 1970-01-01
    • 2019-02-22
    • 2011-05-07
    • 2012-04-24
    • 2019-12-03
    相关资源
    最近更新 更多