Вы должны быть в состоянии узнать фактический ключ, используя идентификатор. Когда вы регистрируете горячую клавишу, вы используете идентификатор, ключ и модификатор. Когда горячая клавиша нажата, Windows выдает идентификатор горячей клавиши в обратном вызове, а не клавишу и модификаторы.
RegisterHotKey(Handle, id: 1, ModifierKeys.Control, Keys.A);
RegisterHotKey(Handle, id: 2, ModifierKeys.Control | ModifierKeys.Alt, Keys.B);
const int WmHotKey = 786;
if (msg.message != WmHotKey)
return;
var id = (int)msg.wParam;
if (id == 1) // Ctrl + A
{
}
else if (id == 2) // Ctrl + Alt + B
{
}
Вот сообщение в блоге, которое я написал с кодом для регистрации горячей клавиши для приложения WPF: https://www.meziantou.net/2012/06/28/hotkey- глобальные-ярлыки
Мы столкнулись с подобным вопросом, когда мы сначала запустили работу над Контролем, наше решение состояло в том, чтобы кодировать целое приложение в Python, с помощью PyObjC. Контроль 1 имел sqlite бэкенд, Контроль 2 имеет бэкенд пост-ГРЭС.
Существует несколько действительно сформировавшихся и мощных ORMs на стороне Pyton, такие как SQLObject, который довольно прост работать с (мы использовали его для Контроля 1.0), и SQLAlchemy, который более мощен, но немного более тверд перенести Ваш мозг (мы использовали его для Контроля 2.0).
Один подход, который Вы могли оценить, создает приложение в Objective C, но пишет модели данных и базе данных код connectivity/adminstration в Python. Можно использовать PyObjC для создания сменного пакета из этого кода, который Вы затем загружаете в свое приложение , Это - более или менее подход, который мы проявили для Сервера Контроля, который использует инструмент командной строки Основы для администрирования сервера пост-ГРЭС и баз данных в нем, этот инструмент CLI в свою очередь загружается в пакете плагина Python, который имеет весь фактический код базы данных в нем. Конечные пользователи главным образом взаимодействуют с базой данных через область System Preferences, которая не имеет никакой подсказки, на что база данных похожа, но вместо этого использует инструмент командной строки для взаимодействия с нею.
Загрузка плагина проста:
NSBundle *pluginBundle = [NSBundle bundleWithPath:pluginPath];
[pluginBundle load];
Необходимо будет, вероятно, создать.h файлы для классов в пакете, к которому Вы хотите иметь доступ из Вашего кода Obj-C.
Вы могли бы также хотеть проверить платформу BaseTen. Это - Базовая подобная Данным платформа (на самом деле, это может импортировать Базовые Модели данных), но работы с PostgreSQL (хотя не MySQL, насколько я знаю). Это включает некоторые очень хорошие функции, такие как исследование схемы во время выполнения. Это также включает подкласс NSArrayController, который автоматически обрабатывает блокировку и синхронизацию через многочисленных пользователей, таким образом, можно продолжить использовать Apples Key-value Binding в UI.
У меня есть личный опыт решения этой конкретной проблемы. Я даже начал писать свою собственную оболочку для C MySQL API.
Окончательный вывод был следующим: не надо
Решение, которое работало в моем случае, состояло в том, чтобы связаться с сервером MySQL через PHP. Если вы знакомы с веб-сервисами, скорее всего, вы знаете о PHP, поэтому я не буду вдаваться в подробности этого.
Для чтения из базы данных:
Для записи в базу данных:
Прелесть этого решения в том, что PHP отлично подходит для работы с MySQL, и у cocoa есть несколько удобных встроенных классов для работы с данными XML.
edit: еще одна вещь:
Одна из ключевых вещей, которую вы должны выяснить с помощью этого подхода, - это сколько обработки должно быть выполнено сервер, и сколько должно быть сделано в самом приложении. Позвольте какао делать то, что хорошо у какао, и пусть PHP и MySQL делают то, что у них хорошо получается.
Вы могли бы написать общий PHP-скрипт для обработки всех запросов: execute_query.php? querystring = "SELECT * FROM .....", но это вряд ли является оптимальным решением. Ваша лучшая ставка - несколько небольших PHP-скриптов, которые обрабатывают отдельные наборы данных для вас.
Я также реализовал платформу персистентности простого объекта на основе sqlite, но это, конечно, не было тривиально, чтобы сделать. Я соглашаюсь с заключением eJame - не реализуют тот самостоятельно, если Вы не имеете к.
Если бы Вы не стремитесь программировать в Objective C, Вы могли бы хотеть смотреть на PyObjC, который позволил бы Вам программировать часть базы данных в Python. Можно использовать модуль MySQLdb для доступа DB и существует много учебных руководств онлайн для его использования. Не трудно наполнить данные назад в классы Cocoa/CF и пасовать назад их к Вашему приложению.
Основной протест с PyObjC состоит в том, что в данный момент он не работает с Tiger.
Вместо того, чтобы изобрести велосипед путем записи собственной коммуникационной обертки для контакта с MySQL от Какао Вы могли попробовать платформу SMySQL (иначе. MCPKit), это была часть приложения CocoaMySQL, которое развило в Продолжение Pro проект. Это работает с переменными версиями MySQL и, кажется, довольно устойчиво.
Если необходимо понять, как включить его в приложение, вокруг нет большого количества документации, но это имеет легкое для понимания интерфейса, и Вы видите, что он работает путем рассмотрения источника Продолжения Pro, которое загружаемо из кода Google.
Существует также ветвление CocoaMySQL-SBG проекта CocoaMySQL, но это, кажется, устарело, и я не мог заставить это создавать правильно.