Система QNX 4.25. Необходимо выполнять какие-то действия при нажатии на кнопки F1-F8. Для этого необходимо использовать Photon emit(ы). Взял пример у коллег. Функция создания региона, который обрабатывается - вся область фотона. Проблема в том, что после выполнения этой функции виртуальную машину, на которой это все запускается приходиться перезагружать, так как приложение перехватывает сообщения клавиатуры и мыши, а я не знаю, как именно выбрать область активного окна. Кто-нибудь может помочь? Вот вся функция:
/**
* @brief This function creates two Photon regions. We need one of them, which
* covers entire Photon space to listen Ph_EV_RAW events. The second one
* is used to emit Ph_EV_RAW_PTR events.
**/
static int create_region()
{
PhRegion_t region;
PhRect_t rect;
memset(®ion, 0, sizeof(region));
region.events_sense = Ph_EV_RAW;
region.flags = Ph_KBD_REGION | Ph_PTR_REGION | Ph_FORCE_FRONT;
region.origin.x = region.origin.y = 0;
region.input_group = 1;
// Cover all Photon space
rect.ul.x = rect.ul.y = SHRT_MIN;
rect.lr.x = rect.lr.y = SHRT_MAX;
if((Rid = PhRegionOpen(Ph_REGION_FLAGS | Ph_REGION_EV_SENSE |
Ph_REGION_RECT, ®ion, &rect, NULL)) == -1)
{
printf("PhRegionOpen have errors: [%s]\n", strerror(errno));
fflush(stdout);
return -1;
}
PhRegionQuery(Rid, ®ion, NULL, NULL, 0);
region.events_opaque = Ph_EV_RAW;
PhRegionChange(Ph_REGION_EV_OPAQUE, 0, ®ion, NULL, NULL);
region.input_group = 1;
region.flags = Ph_PTR_REGION | Ph_FORCE_FRONT;
rect.ul.x = rect.ul.y = rect.lr.x = rect.lr.y = 0;
if((Ptr = PhRegionOpen(Ph_REGION_FLAGS | Ph_REGION_INPUT_GROUP |
Ph_REGION_RECT, ®ion, &rect, NULL)) == -1)
{
printf("PhRegionOpen have errors: [%s]\n", strerror(errno));
fflush(stdout);
return -1;
}
return 0;
}