simulate keyboard

Hello,

I’m trying to simulate keyboard. I made an appliacation in PhAB with PtTty
widget and it worked well with
PtSendEventToWidget( wi , event );
where I emitted event directly to widget.
Now I want to send key event to focused pterm. But emitting has no result.
I think the problem is 3. parameter ‘void const *data’.
I add source code for this little program:

#include <stdio.h>
#include <time.h>
#include <Ph.h>

main( int argc, char *argv[] )
{
PhEvent_t *event;
PhKeyEvent_t *pevent;
PhRect_t rect;
char text[2];
int i = 0;

text[0] =‘s’;

if( NULL == PhAttach( NULL, NULL ) )
{
fprintf( stderr,
“Couldn’t attach Photon channel.\n”);
exit( EXIT_FAILURE );
}
event = (PhEvent_t *) malloc(sizeof(PhEvent_t));
pevent = (PhKeyEvent_t *) malloc(26);

event->type = Ph_EV_KEY;
event->subtype = Ph_EV_KEY_NORMAL;
event->processing_flags = 0;
event->emitter.rid = Ph_DEV_RID;
event->input_group = 1;
event->flags = 0x10;
event->num_rects = 1;
event->data_len = 26;

pevent->key_mods = 0;
pevent->key_scan = 0;
pevent->key_zero1 = 0;
pevent->key_zero2 = 0;
pevent->pos.x = 100;
pevent->pos.y = 200;
pevent->key_sym = text_;
pevent->key_cap = text;
pevent->key_flags = Pk_KF_Sym_Valid | Pk_KF_Cap_Valid | Pk_KF_Key_Down;
pevent->button_state = 0;
// PtSendEventToWidget( wi , event );

rect.ul.x = rect.ul.y = SHRT_MIN;
rect.lr.x = rect.lr.y = SHRT_MAX;
PhEventEmit( event, &rect, text );
}_

Hello Kamil,

I have some ideas for you.

  • you cannot use Ph_EVENT_DIRECT flag in event flags, because you don’t
    speciffy collector. Set flags to 0.
    1. parameter in function PhEventEmit should be event’s data ( with size
      event->data_len ).
  • you should simulate release of key too.

Majo.

Here is your example:
#include <stdio.h>
#include <time.h>
#include <Ph.h>
#include <string.h> // for function memset

main( int argc, char *argv[] )
{
PhEvent_t *event;
PhKeyEvent_t *pevent;
PhRect_t rect;
char text[2];
int i = 0;

text[0] =‘s’;

if( NULL == PhAttach( NULL, NULL ) )
{
fprintf( stderr,
“Couldn’t attach Photon channel.\n”);
exit( EXIT_FAILURE );
}
event = (PhEvent_t *) malloc(sizeof(PhEvent_t));
pevent = (PhKeyEvent_t *) malloc(26);

memset( event, 0, sizeof( PhEvent_t ) ); // clear structure
event->type = Ph_EV_KEY;
event->subtype = Ph_EV_KEY_NORMAL;
event->processing_flags = 0;
event->emitter.rid = Ph_DEV_RID;
event->input_group = 1;
event->flags = 0; // set flags to 0
event->num_rects = 1;
event->data_len = sizeof( PhKeyEvent_t ); // use rather sizeof

memset( pevent, 0, sizeof( PhKeyEvent_t ) ); // clear structure
pevent->key_mods = 0;
pevent->key_scan = 0;
pevent->key_zero1 = 0;
pevent->key_zero2 = 0;
pevent->pos.x = 0; // 100 -
pevent->pos.y = 0; // 200 -
pevent->key_sym = text_;
pevent->key_cap = text;
pevent->key_flags = Pk_KF_Sym_Valid | Pk_KF_Cap_Valid | Pk_KF_Key_Down;
pevent->button_state = 0;
// PtSendEventToWidget( wi , event );

rect.ul.x = rect.ul.y = SHRT_MIN;
rect.lr.x = rect.lr.y = SHRT_MAX;
PhEventEmit( event, &rect, pevent ); // 3. parameter should be pevent

// release key
pevent->key_flags &= ~( Pk_KF_Sym_Valid | Pk_KF_Key_Down );
PhEventEmit( event, &rect, pevent ); // 3. parameter should be pevent
}_

Kamil Parkanyi <parkanyi@procaut.sk> wrote:

Hello,

I’m trying to simulate keyboard. I made an appliacation in PhAB with PtTty
widget and it worked well with
PtSendEventToWidget( wi , event );
where I emitted event directly to widget.
Now I want to send key event to focused pterm. But emitting has no result.
I think the problem is 3. parameter ‘void const *data’.
I add source code for this little program:

Did you look at the ‘keypad’ example already? It’s somewhere
in the QDN ‘free’ area, search for ‘keypad.tgz’.

… works like a ‘real’ keyboard.

HTH,

:Karsten.


| / | __ ) | Karsten.Hoffmann@mbs-software.de MBS-GmbH
| |/| | _ _
\ Phone : +49-2151-7294-38 Karsten Hoffmann
| | | | |
) |__) | Fax : +49-2151-7294-50 Roemerstrasse 15
|| ||// Mobile: +49-172-3812373 D-47809 Krefeld

it works, great :slight_smile:.
thanks

Kamil

Marian Oklapek <oklapek@pobox.sk> napísal v
správe:ake657$rcv$1@inn.qnx.com

Hello Kamil,

I have some ideas for you.

  • you cannot use Ph_EVENT_DIRECT flag in event flags, because you don’t
    speciffy collector. Set flags to 0.
    1. parameter in function PhEventEmit should be event’s data ( with size
      event->data_len ).
  • you should simulate release of key too.

Majo.

Here is your example:
#include <stdio.h
#include <time.h
#include <Ph.h
#include <string.h> // for function memset

main( int argc, char *argv[] )
{
PhEvent_t *event;
PhKeyEvent_t *pevent;
PhRect_t rect;
char text[2];
int i = 0;

text[0] =‘s’;

if( NULL == PhAttach( NULL, NULL ) )
{
fprintf( stderr,
“Couldn’t attach Photon channel.\n”);
exit( EXIT_FAILURE );
}
event = (PhEvent_t *) malloc(sizeof(PhEvent_t));
pevent = (PhKeyEvent_t *) malloc(26);

memset( event, 0, sizeof( PhEvent_t ) ); // clear structure
event->type = Ph_EV_KEY;
event->subtype = Ph_EV_KEY_NORMAL;
event->processing_flags = 0;
event->emitter.rid = Ph_DEV_RID;
event->input_group = 1;
event->flags = 0; // set flags to
0
event->num_rects = 1;
event->data_len = sizeof( PhKeyEvent_t ); // use rather sizeof

memset( pevent, 0, sizeof( PhKeyEvent_t ) ); // clear structure
pevent->key_mods = 0;
pevent->key_scan = 0;
pevent->key_zero1 = 0;
pevent->key_zero2 = 0;
pevent->pos.x = 0; // 100 -
pevent->pos.y = 0; // 200 -
pevent->key_sym = text> ;
pevent->key_cap = text> ;
pevent->key_flags = Pk_KF_Sym_Valid | Pk_KF_Cap_Valid | Pk_KF_Key_Down;
pevent->button_state = 0;
// PtSendEventToWidget( wi , event );

rect.ul.x = rect.ul.y = SHRT_MIN;
rect.lr.x = rect.lr.y = SHRT_MAX;
PhEventEmit( event, &rect, pevent ); // 3. parameter should be pevent

// release key
pevent->key_flags &= ~( Pk_KF_Sym_Valid | Pk_KF_Key_Down );
PhEventEmit( event, &rect, pevent ); // 3. parameter should be pevent
}

\