[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 890
  • Last Modified:

keyboard_Event

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
tmartl
Asked:
tmartl
  • 6
  • 6
1 Solution
 
rgmisraCommented:
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
 
tmartlAuthor Commented:
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
 
tmartlAuthor Commented:
Yes it is under X.
0
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
rgmisraCommented:
You can use XSendEvent to send to *other* applications' windows.
0
 
tmartlAuthor Commented:
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
 
rgmisraCommented:
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
 
rgmisraCommented:
(Actually, ignore the second include. It shouldn't be
necessary.)
0
 
tmartlAuthor Commented:
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
 
rgmisraCommented:
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
 
tmartlAuthor Commented:
oupss!!!  very sorry !  ;-(

I think I choose to fast.

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

thanks for your help !
0
 
rgmisraCommented:
no problem. just wanted to know if I did something wrong. :)
thanks.
0
 
tmartlAuthor Commented:
oupss!!!  very sorry !  ;-(

I think I choose to fast.

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

thanks for your help !
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 6
  • 6
Tackle projects and never again get stuck behind a technical roadblock.
Join Now