logo
Литература_1 / photon_old

События, генерируемые клавиатурными клавишами

Иногда Вам может понадобиться в Вашем приложении эмулировать нажатие клавиши. В зависимости от того, чего именно Вы желаете достичь, Вы можете выбирать из нескольких способов генерирования событий клавиатуры:

event–>emitter.rid = Ph_DEV_RID;

Набор прямоугольников должен состоять из одного пикселя – если Вы не используете менеджер окон, или, если Photon'овский менеджер окон установлен на использование фокуса курсора, позиция этого пикселя определит, какое окно откликнется на событие.

event –>collector.rid = rid;

event –>flags |= Ph_EVENT_DIRECT;

Вот пример:

static void send_key( long key ) {

struct {

PhEvent_t event;

PhRect_t rect;

PhKeyEvent_t pevent;

} new_event;

PhEvent_t event;

PhKeyEvent_t key_event;

PhRect_t rect;

rect.ul.x = rect.ul.y = 0;

rect.lr.x = rect.lr.y = 0;

memset( &event, 0, sizeof(event));

memset( &key_event, 0, sizeof(key_event) );

event.type = Ph_EV_KEY;

event.emitter.rid = Ph_DEV_RID;

event.num_rects = 1;

event.data_len = sizeof(key_event);

event.input_group = 1;

key_event.key_cap = key;

key_event.key_sym = key;

if ( isascii( key ) && isupper( key ) ) {

key_event.key_mods = Pk_KM_Shift;

}

/* Генерирование нажатия клавиши */

key_event.key_flags = Pk_KF_Sym_Valid | Pk_KF_Cap_Valid | Pk_KF_Key_Down;

PhEmit( &event, &rect, &key_event );

/* Генерирование отпускания клавиши */

key_event.key_flags &= ~(Pk_KF_Key_Down | Pk_KF_Sym_Valid) ;

PhEmit( &event ,&rect, &key_event );

return;

}

Yandex.RTB R-A-252273-3
Yandex.RTB R-A-252273-4