Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-04-2017
Snaked Snaked is offline
Baneado
NULL
 
Registrado: sep 2016
Posts: 102
Poder: 0
Snaked Va por buen camino
No consigo que simule pulsacion del boton en aplicacion externa

Código PHP:


void __fastcall TForm1
::Button1Click(TObject *Sender)
{
  
Memo1->Lines->Clear();
  
DETECTA_REDES();
  
ShellExecute(NULL,  // Handle de la fenêtre parent
                 
"open"// Action à effectuer
                 
"JumpLittle.exe"// Fichier
                 
""// Paramètres
                 
""// Répertoire par défaut
                 
SW_SHOWDEFAULT);

  
ClickBotonIzquierdo(660475);

}



void ClickBotonIzquierdo(int Xint Y)
{
// Esta rutina sirve para hacer un click en las coordenadas
// X-Y de la pantalla.
int ClientX 0int ClientY 0;
HWND WindowHWND Parent;
TRect WindowRect;

// Primero situa el cursor del ratón en la posición deseada
SetCursorPos(XY);

// Averiguamos el identificador del objeto que se encuentra
// en dichas coordenadas. (No funciona para ventanas ocultas
// o deshabilitadas)
Window WindowFromPoint(Point(XY));

// Si el identificador devuelto es distinto de 0 es que
// realmente hay un objeto en dichas coordenadas
if (Window || Window 0)
{
// Averiguamos las coordenadas del objeto
GetWindowRect(Window, &WindowRect);

// y trasladomos las coordenadas del punto donde se desea
// hacer click a las coordenadas del objeto encontrado
ClientX WindowRect.Left;
ClientY WindowRect.Top;

// Ahora averiguamos si el objeto tiene padre, por ejemplo,
// si el objeto es un botón o una lista
Parent GetAncestor(WindowGA_ROOT);

// Si el objeto no tiene padre, es que es una ventana. Si
// tiene padre (una ventana), utilizamos este, ya que el
// mensaje debe pasarse a una ventana.
if (Parent == 0Parent Window;

// Comprobamos que la ventana esta en primer plano, es decir,
// que es la ventana activa. Si no es así, la activamos
if (Parent GetForegroundWindow() || Parent GetForegroundWindow())
{
SetForegroundWindow(Parent);
}

// Y ahora le enviamos a la ventana los mensajes correspondientes
// para obtener un click del ratón
//SendMessage(Window, WM_LBUTTONDOWN, MK_LBUTTON, X);
//SendMessage(Window, WM_LBUTTONUP, 0, X);

SendMessage(Window,WM_LBUTTONDOWN,MK_LBUTTON,MAKELPARAM(ClientX,ClientY));
SendMessage(Window,WM_LBUTTONUP,MK_LBUTTON,MAKELPARAM(ClientX,ClientY));

 }

tengo este codigo que parece estar bien, no da ningun error pero no pulsa el boton en la aplicacion que invoco (externa a Form1)(simular pulsado con SendMessage())

que puede pasar??? alguien lo sabe?

Última edición por Snaked fecha: 03-04-2017 a las 17:19:32.
Responder Con Cita
  #2  
Antiguo 03-04-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Snaked.

El código funciona bién, ¿ Seguro que el botón se encuentra en las coordenadas que indicas ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 03-04-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cómo dice ecfisa debes tener claras las coordenadas.
Yo prefiero una simulación de cluck a bajo nivel:
Código PHP:
int MouseClick(int xint y)
{
  
TPoint P;
  
GetCursorPos(&P); // Guardo las coordenadas del mouse

  
SetCursorPos(xy);

  
INPUT Input[2];
    ::
ZeroMemory(Inputsizeof(Input));
  
Input[0].type INPUT_MOUSE;
  
Input[0].mi.dx x;
  
Input[0].mi.dy y;
  
Input[0].mi.dwFlags MOUSEEVENTF_LEFTDOWN;

  
Input[1].type INPUT_MOUSE;
  
Input[1].mi.dx x;
  
Input[1].mi.dy y;
  
Input[1].mi.dwFlags MOUSEEVENTF_LEFTUP;
  
int a SendInput(2Inputsizeof(INPUT));

  
SetCursorPos(P.xP.y); // Restauro las coordenadas del Mouse

  
return a;  // Retorno el número de eventos enviados

Siendo X e Y coordenadas absolutas en pantalla.

Saludos.
Responder Con Cita
  #4  
Antiguo 03-04-2017
Snaked Snaked is offline
Baneado
NULL
 
Registrado: sep 2016
Posts: 102
Poder: 0
Snaked Va por buen camino
gracias a los 2 por la rapida contestacion......

milagro milagro!!!.... el codigo de scafandra funciona a la perfeccion X-D

te debo unas tapitas y una cerveza escafandra......8)
Responder Con Cita
  #5  
Antiguo 04-04-2017
Snaked Snaked is offline
Baneado
NULL
 
Registrado: sep 2016
Posts: 102
Poder: 0
Snaked Va por buen camino
y la pulsacion de una tecla del teclado??

he intentado hacer por mi cuenta la pulsacion de teclado pero me arroja un par de errores que dicen que espera un TagInput * en vez de TagInput

podriais revisar este codigo???

Cita:
INPUT Input;
Sleep(3000);

for(int cont = 0; cont < 8; cont++)
{
char TECLA;
TECLA = PIN[cont];

Input.type = INPUT_KEYBOARD;
Input.ki.wVk = 1; // Tecla a simular

// Presionar tecla
SendInput(1, &Input, sizeof(INPUT));

// Soltar tecla
Input.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &Input, sizeof(INPUT));

}
Responder Con Cita
  #6  
Antiguo 04-04-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Revisa este tema donde publico una función que simula pulsación y liberación de teclas.

Saludos.
Responder Con Cita
  #7  
Antiguo 04-04-2017
Snaked Snaked is offline
Baneado
NULL
 
Registrado: sep 2016
Posts: 102
Poder: 0
Snaked Va por buen camino
vale escafandra....ya lo he solucionado....posteo aqui el codigo correcto que me funciona

Código PHP:

INPUT Input
[1];

  
Input[0].type INPUT_KEYBOARD;
  
Input[0].ki.wVk VK_NUMPAD1// Tecla a simular

  // Presionar tecla
  
SendInput(1Inputsizeof(INPUT));

  
// Soltar tecla
  
Input[0].ki.dwFlags KEYEVENTF_KEYUP;
  
SendInput(1Inputsizeof(INPUT)); 
Responder Con Cita
  #8  
Antiguo 04-04-2017
Snaked Snaked is offline
Baneado
NULL
 
Registrado: sep 2016
Posts: 102
Poder: 0
Snaked Va por buen camino
escafandra....el otro codigo que me has dado lo he convertido asi pero me da error de SendInput en los argumentos dice "cannot convert TagInput to TagInput * Type mismatch in pInputs , wanted TagINPUT * got TagINPUT"

Código PHP:
void SimKey(BYTE VKbool Down)
{
 
TInput Input;

  
ZeroMemory(&Inputsizeof(Input));
  
Input.type INPUT_KEYBOARD;
  
Input.ki.wVk VK;
  
Input.ki.wScan MapVirtualKey(VK0);
  
Input.ki.dwFlags KEYEVENTF_EXTENDEDKEY;
  if(!
DownInput.ki.dwFlags Input.ki.dwFlags || KEYEVENTF_KEYUP;
  
SendInput(1tagINPUT(Input), sizeof(TInput));


Última edición por Snaked fecha: 04-04-2017 a las 03:34:14.
Responder Con Cita
  #9  
Antiguo 04-04-2017
Snaked Snaked is offline
Baneado
NULL
 
Registrado: sep 2016
Posts: 102
Poder: 0
Snaked Va por buen camino
solucionado ya

vale, aqui esta el codigo funcionando

Código PHP:
void SimKey(BYTE VKbool Down)
{
 
TInput Input;

  
ZeroMemory(&Inputsizeof(Input));
  
Input.type INPUT_KEYBOARD;
  
Input.ki.wVk VK;
  
Input.ki.wScan MapVirtualKey(VK0);
  
Input.ki.dwFlags KEYEVENTF_EXTENDEDKEY;
  if(!
DownInput.ki.dwFlags Input.ki.dwFlags || KEYEVENTF_KEYUP;
  
SendInput(1, &Inputsizeof(Input));

Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda con Aplicacion Externa!!! AndrecitoPz Varios 4 20-11-2012 01:01:54
Presionar botón de aplicacion externa pedrosan API de Windows 7 24-11-2009 13:35:59
Aplicacion externa a c++ alloger C++ Builder 1 28-10-2006 00:37:09
Controlar pulsacion de una tecla desde toda la aplicacion Sick boy OOP 5 21-05-2004 17:30:48
Cómo hacer para que la aplicación detecte la pulsación de 2 teclas ¿? Slaughter Varios 5 13-02-2004 15:37:28


La franja horaria es GMT +2. Ahora son las 16:13:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi