Я интегрирую приложение GTK # в Mac OS X. GTK в Mac OS X - это оболочка для некоторых основ Cocoa и Carbon. У нас есть кое-что для платформы, напрямую использующее API-интерфейсы глобального меню Carbon (он более низкоуровневый и гибкий, чем Cocoa, и нам не нужно быть 64-битным).
Похоже, что GTK поглощает все события клавиатуры, прежде чем Carbon отправит их в виде команд. Это имеет смысл, потому что в мире GTK нет отображения команд Carbon. В общем, это не проблема, потому что у нас есть глобальный ключевой обработчик событий, и мы отправляем все через нашу собственную систему команд. Тем не менее, это, кажется, мешает 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 (Cocoa), но InterpretKeyEvents также не работал с событием в этом приложении. И я не могу найти селектор, связанный с командой.