Я интегрирую приложение GTK # в Mac OS X. GTK в Mac OS X - это оболочка над некоторыми основами Cocoa и Carbon. У нас есть некоторые специфические для платформы вещи, напрямую использующие API глобального меню Carbon (он более низкоуровневый и гибкий, чем Cocoa, и нам не обязательно быть 64-битным).
Кажется, что GTK поглощает все события клавиатуры до того, как Carbon отправляет их в виде команд. Это имеет смысл, потому что нет отображения команд Carbon в мире GTK. В общем, это не проблема, потому что у нас есть глобальный обработчик ключевых событий, и мы отправляем все через нашу собственную систему команд. Однако, похоже, это мешает Cmd-? от открытия меню поиска по справке, и я не могу найти способ сделать это программно.
Функция MenuSelect в Менеджере меню является многообещающей, но я не придумал, как автоматически определять координату, и по какой-то причине она работает только тогда, когда я нажимаю комбинацию дважды ...
Как вариант, способ отправки Cmd-? нажатие клавиши для обработки команд Carbon или прямое синтезирование командного события было бы хорошо, но мне не повезло в этой области.
Carbon ProcessHICommand бесполезен без идентификатора команды, и я не могу понять, что это такое (если он есть)
Что касается Какао, я могу получить NSWindow и вызвать InterpretKeyEvents, но мне не удалось успешно синтезировать NSEvent - он просто издает звуковой сигнал. Я использую событие
var evt = NSEvent.KeyEvent (NSEventType.KeyDown, System.Drawing.PointF.Empty,
NSEventModifierMask.CommandKeyMask | NSEventModifierMask.ShiftKeyMask,
0, win.WindowNumber, NSGraphicsContext.CurrentContext, "?", "?",
false, (ushort) keycode);
Код ключа определяется из таблицы ключей GTK как 44. Я подтвердил, что код ключа был правильным, используя простое приложение MonoMac (Какао), но InterpretKeyEvents также не работал с событием в этом приложении. И я не могу найти селектора, связанного с командой.
CFDictionaryRef
вNSDictionary *
илиid
, и он будет вести себя точно так же, как объект NSDictionary (есть некоторые тонкие различия, которые делают CFDictionary быстрее, чем NSDictionary. Но они незначительны). - person Abhi Beckert   schedule 12.05.2011