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.
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
}_
system
August 27, 2002, 6:16am
3
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 .
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.
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
}
\