Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

keyboard_Event

Posted on 1998-07-07
12
Medium Priority
?
889 Views
Last Modified: 2013-12-16
I need a function that will produce a keyboard_event.

just like an user has pressed a key, but it is an other application that will do it (with that function).
(This function should be the same as keybd_event(...) in Win NT
0
Comment
Question by:tmartl
  • 6
  • 6
12 Comments
 
LVL 1

Expert Comment

by:rgmisra
ID: 1812293
Is this under X? What is the specific program?
Under X, you can try using XSendEvent, but it doesn't seem to
work with some X clients (like xterm) because the events appear
to be synthetic to the xterm program. If this is what you need,
let me know, and I'll send you a code snippet.
0
 

Author Comment

by:tmartl
ID: 1812294
it's not what i want...
thanks anyway.

what I want is the same as Keybd_event in Windows NT.
->
send a string of character to the window who has the keyboard focus.

(just like a keyboard input from a user).

N.B. : The window (that has the focus)  is not mine...
       It is from an other application...
       and my application has to simmulate a user and input a
       string in the window who has the keyboard focus.

thanks for your help.
0
 

Author Comment

by:tmartl
ID: 1812295
Yes it is under X.
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
LVL 1

Expert Comment

by:rgmisra
ID: 1812296
You can use XSendEvent to send to *other* applications' windows.
0
 

Author Comment

by:tmartl
ID: 1812297
ok.

but how can i do that?

N.B. a window can have more than one edit box and i want to put the text in the box that have the focus...

how can i have the handle of that box?
0
 
LVL 1

Accepted Solution

by:
rgmisra earned 600 total points
ID: 1812298
Well, if the box already has focus, this will work fine.
If the box doesn't have focus, I'm not sure what you'd have
to do.
Anyway, this sample generates n key events with the specified
keycode (note that X keycodes are different from character
values. you can find the keycode number with xev. The keycode
for 'q', for example, is 24.)

---------
#include <X11/Xlib.h>
#include <X11/extensions/XTest.h>

main(int argc, char *argv[]) {
  Display *dpy = XOpenDisplay(NULL);
  int i, k, c, rev;
  Window w;
  XEvent e, b;

  if (argc < 3) {
    printf ("need 2 args, keycode and count\n");
    exit(-1);
  }

  k = atoi(argv[1]);
  c = atoi(argv[2]);

  XGetInputFocus(dpy, &w, &rev);

  for (i = 0; i < c; i++) {
    e.xkey.type = KeyPress;
    e.xkey.display = dpy;
    e.xkey.time = CurrentTime;
    e.xkey.x = e.xkey.y = 0;
    e.xkey.x_root = e.xkey.y_root = 0;
    e.xkey.state = 0;
    e.xkey.keycode = k;
    e.xkey.window = w;
    memcpy(&b, &e, sizeof(e));
    b.xkey.type = KeyRelease;
   
    if (!XSendEvent(dpy, w, True, KeyPressMask, &e)) {
      printf ("error\n");
    }
    if (!XSendEvent(dpy, w, True, KeyReleaseMask, &b)) {
      printf ("error2\n");
    }
    XSync(dpy, 0);
  }
}
---------

So run this with, for example, a.out 24 1, and it should generate
a "q" keystroke. As I mentioned earlier, this does not work w/
xterm, because it ignores synthesized events. But it works fine
for me with xv.
(You may have to "sleep" before running it, because it sends the
key to the focused window, so you need time to switch windows.
Try sleep 1; a.out 24 1, move into your running xv, and it should
quit)
0
 
LVL 1

Expert Comment

by:rgmisra
ID: 1812299
(Actually, ignore the second include. It shouldn't be
necessary.)
0
 

Author Comment

by:tmartl
ID: 1812300
I'll will try this !

How can I have the keycode of a character?

I only have the ascii code.

thank you very much!!!
0
 
LVL 1

Expert Comment

by:rgmisra
ID: 1812301
The only way I know to find keycodes is to run xev, wait
for it to stop outputting stuff, then hit the key and
read the stuff it spits out.

For my curiosity, why did you give me a "B" for my grade?
0
 

Author Comment

by:tmartl
ID: 1812302
oupss!!!  very sorry !  ;-(

I think I choose to fast.

you deserve a A++++++++++   ;-)

thanks for your help !
0
 
LVL 1

Expert Comment

by:rgmisra
ID: 1812303
no problem. just wanted to know if I did something wrong. :)
thanks.
0
 

Author Comment

by:tmartl
ID: 1812304
oupss!!!  very sorry !  ;-(

I think I choose to fast.

you deserve a A++++++++++   ;-)

thanks for your help !
0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Attention: This article will no longer be maintained. If you have any questions, please feel free to mail me. jgh@FreeBSD.org Please see http://www.freebsd.org/doc/en_US.ISO8859-1/articles/freebsd-update-server/ for the updated article. It is avail…
Let's say you need to move the data of a file system from one partition to another. This generally involves dismounting the file system, backing it up to tapes, and restoring it to a new partition. You may also copy the file system from one place to…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:
In a previous video, we went over how to export a DynamoDB table into Amazon S3.  In this video, we show how to load the export from S3 into a DynamoDB table.
Suggested Courses
Course of the Month12 days, 1 hour left to enroll

916 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question