Enviar un click del mouse

Soy un poco novato en Delphi y me gustaría saber como puedo hacer para enviar un click del mouse sin tener que utilizar el puntero real del mouse.
O sea que mi aplicación no dependa del mouse y yo pueda estar haciendo otra cosa mientras la aplicación esta en ejecución.

1 respuesta

Respuesta
1
No entiendo la razón para que "envíes un clic" del mouse para que un programa que has hecho tu mismo haga algo... bastaría con poner un temporizador para que realizara la tarea que sea al transcurrir un tiempo determinado... Quizás si explicas mejor el objetivo...
Hola.
Estoy haciendo un programa que hace de BOT para un juego de una página Web.
Lo único que yo hago es darle los colores de los botones que salen a partir del primer click y el programa lo que hace es posicionar el mouse sobre el botón y darle click hasta terminar una lista de amigos a saludar.
Puse en un TTimer que haga los clicks cuando el color del botón aparece en la coordenada seleccionada, pero para eso mi aplicación utiliza el mouse y no se puede hacer nada en la PC hasta que termine de visitar a todos los amigos o hasta que termine de dar la cantidad de vueltas que le indico.
Lo que yo estaría queriendo hacer es no depender le mouse y poder utilizar la PC mientras el BOT termina su trabajo.
¿Es eso posible?
Muchas gracias :D
O sea, lo que quieres es enviar un "clic" a otra ventana, no en tu mismo programa. Mírate esta función:
procedure TForm1.ClickRaton(X, Y: Integer);
var
ClientX, ClientY: Integer;
Window, Parent: HWnd;
WindowRect: TRECT;
begin
// ¿Que objeto se encuentra en las coordenadas facilitadas?
// (No funciona para ventanas ocultas o deshabilitadas)
Window := WindowFromPoint(Point(X, Y));
// Si el identificador devuelto es distinto de 0 es que
// hay un objeto en las coordenadas facilitadas
if (Window <> 0) then begin
// Coordenadas del objeto
GetWindowRect(Window, WindowRect);
// Traslado de las coordenadas facilitadas a las coordenadas del objeto
ClientX := X - WindowRect.Left;
ClientY := Y - WindowRect.Top;
// Averiguamos si el objeto tiene ancestro
Parent := GetAncestor(Window, GA_ROOT);
// Si el objeto no tiene ancestro, es que es una ventana.
// Si el objeto tiene ancestro (una ventana), lo utilizamos, ya que el
// mensaje debe pasarse a una ventana.
if (Parent = 0) then Parent := Window;
// Si deseas pasar la ventana a primer plano:
if (Parent <> GetForegroundWindow()) then SetForegroundWindow(Parent);
// Enviamos a la ventana los mensajes correspondientes
SendMessage(Window, WM_LBUTTONDOWN, MK_LBUTTON, ClientX or (ClientY shl 16));
SendMessage(Window, WM_LBUTTONUP, 0, ClientX or (ClientY shl 16));
end;
end;
Esta función enviaría un clic (botón izquierdo) al objeto situado en las coordenadas facilitadas. En tu caso, deberías adaptarla para que envíe el clic a la ventana y coordenadas del botón que ya conoces (he supuesto que ya tienes una rutina que averigua esos datos)...
Huy!
Esto esta excelente!
Gracias, pero me surge un problema ahora! :D
Me toma todos los datos como son y todo.
Pero yo debo hacer click en las coordenadas de un TWebBrowser y tomo el color de esas coordenadas.
Pero ahora no se por que deja de tomar el color, es como que son otras coordenadas.
¿Cómo puedo adaptar esta Función para que tome del TWebBroser las coordenadas?
Por que antes las tomaba directamente de la pantalla, pero ahora esto me va a funcionar con la ventana en segundo plano o minimizada y ya esta función no me sirve.
Disculpa, es que no se mucho de Delphi y no entiendo todavía bien las API's.
Esta es la función que tome creo que de esta página:
function DesktopColor(const X, Y: Integer): TColor;
var
  c: TCanvas;
begin
  c := TCanvas.Create;
  try
    c.Handle := GetWindowDC(GetDesktopWindow);
    Result   := GetPixel(c.Handle, X, Y);
  finally
    c.Free;
  end;
Se me ocurre que debo cambiarn el GetDesktopWindow por otro Handle que seria el del TWebBrowser, pero no me sale.
Te agradezco!
Creía que tratabas de enviar el clic a otro programa (un navegador, por ej. IE), pero ahora me hablas de un tWebBrowser y tengo que intuir que la página web la abres en el mismo programa... Si es así, puedes capturar la imagen de la ventana completa de tu programa y comprobar un color en un punto así:
function TForm1.FormColor(const X, Y: Integer): TColor;
var MiBitmap: TBitmap;
begin
  MiBitmap := GetFormImage;
  Result := MiBitmap.Canvas.Pixels[X,Y];
end;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas