Esta crónica ha sido analizado por nuestros expertos así se asegura la exactitud de nuestro tutorial.
Solución:
Aquí hay un código Win32 modificado que tenía por ahí:
#define WIN32_LEAN_AND_MEAN
#define _WIN32_WINNT 0x0500
#include
#include
#include
#include
#include
#include
#define X 123
#define Y 123
#define SCREEN_WIDTH 1024
#define SCREEN_HEIGHT 800
void MouseSetup(INPUT *buffer)
buffer->type = INPUT_MOUSE;
buffer->mi.dx = (0 * (0xFFFF / SCREEN_WIDTH));
buffer->mi.dy = (0 * (0xFFFF / SCREEN_HEIGHT));
buffer->mi.mouseData = 0;
buffer->mi.dwFlags = MOUSEEVENTF_ABSOLUTE;
buffer->mi.time = 0;
buffer->mi.dwExtraInfo = 0;
void MouseMoveAbsolute(INPUT *buffer, int x, int y)
buffer->mi.dx = (x * (0xFFFF / SCREEN_WIDTH));
buffer->mi.dy = (y * (0xFFFF / SCREEN_HEIGHT));
buffer->mi.dwFlags = (MOUSEEVENTF_ABSOLUTE
void MouseClick(INPUT *buffer)
buffer->mi.dwFlags = (MOUSEEVENTF_ABSOLUTE
int main(int argc, char *argv[])
INPUT buffer[1];
MouseSetup(&buffer);
MouseMoveAbsolute(&buffer, X, Y);
MouseClick(&buffer);
return 0;
tendrás que llamar MouseSetup()
a cadaINPUT
tampón antes de usarlo.
Recursos
MSDN-
SendInput()
MSDN-
INPUT
MSDN-
MOUSEINPUT
Aquí hay una solución usando Xlib
para aquellos que usan Linux
:
#include
#include
#include
#include
#include
#include
#include
#include
void mouseClick(int button)
Display *display = XOpenDisplay(NULL);
XEvent event;
if(display == NULL)
fprintf(stderr, "Errore nell'apertura del Display !!!n");
exit(EXIT_FAILURE);
memset(&event, 0x00, sizeof(event));
event.type = ButtonPress;
event.xbutton.button = button;
event.xbutton.same_screen = True;
XQueryPointer(display, RootWindow(display, DefaultScreen(display)), &event.xbutton.root, &event.xbutton.window, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
event.xbutton.subwindow = event.xbutton.window;
while(event.xbutton.subwindow)
event.xbutton.window = event.xbutton.subwindow;
XQueryPointer(display, event.xbutton.window, &event.xbutton.root, &event.xbutton.subwindow, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0) fprintf(stderr, "Errorn");
XFlush(display);
usleep(100000);
event.type = ButtonRelease;
event.xbutton.state = 0x100;
if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0) fprintf(stderr, "Errorn");
XFlush(display);
XCloseDisplay(display);
int main(int argc, char * argv[])
int x , y;
x = atoi(argv[1]);
y = atoi(argv[2]);
Display *display = XOpenDisplay(0);
Window root = DefaultRootWindow(display);
XWarpPointer(display, None, root, 0, 0, 0, 0, x, y);
mouseClick(Button1);
XFlush(display);
XCloseDisplay(display);
return 0;
Simplemente constrúyalo y luego para simular un clic en x, y haga lo siguiente:
$ ./a.out x y
es decir
$g++ -lX11 sgmousesim2.cpp
$./a.out 123 13
Usar SendInput
para generar la entrada que desea simular. De la documentación de MSDN:
Sintetiza las pulsaciones de teclas, los movimientos del mouse y los clics de los botones.
Sección de Reseñas y Valoraciones
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)