Bueno para que se entienda bien mi objetivo es hacer un programa que haga una serie de clicks en una ventana determinada aunque esta este minimizada.
Busque en google por 3 dias seguidos sin parar y segun entendi con la función SendMessage se puede hacer lo que quiero, es decir, que simule un clic o envie una tecla aunque la ventana este minimizada.
Un simple ejemplo seria enviar una letra al notepad, mi codigo es:
Ese es mi codigo completo, lo que no puedo hacer es que envie la Q al notepad! Intente de varias formas, por ejemplo:
Pero ese hace que cuando se aprieta el boton el programa en este caso notepad se cierre.
Entonces lei en paginas que necesito utilizar la función FindWindowEx (lei algo sobre child, hand y no se que) para seleccionar el cuadro donde se ingresa texto del Bloc de notas, entonces mi codigo queda:
(los valores como "edit" los obtuve con Spy++)
En este caso al presionar el Button1 el notepad no se cierra pero tampoco se escribe la Q!.
No se que tiene el codigo que no escribe la Q!.
Eso es a modo de prueba pero mi proyecto es crear un BOT para un juego de facebook, ya hice con mouse_event y SetCursorPos pero no es bueno porque no podes usar otros programas mientras el bot este activo.
No se que mas decirles ! Simplemente si me pueden ayudar les agradeceria porque busque en toda la internet y no puedo solucionar esto..
Utilizo Visual C# 2010 Express
Busque en google por 3 dias seguidos sin parar y segun entendi con la función SendMessage se puede hacer lo que quiero, es decir, que simule un clic o envie una tecla aunque la ventana este minimizada.
Un simple ejemplo seria enviar una letra al notepad, mi codigo es:
Código [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication5
{
public partial class Form1 : Form
{
[DllImport("user32.dll")]
public static extern void SendMessage(Int32 hwnd, Int32 Msg, Int32 dx, Int32 dy);
[DllImport("user32.dll")]
public static extern int FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
static extern Int32 FindWindowEx(Int32 hwndParent,
IntPtr hwndChildAfter,
string lpszClass,
string lpszWindow
);
const Int32 WM_LBUTTONDOWN = 0x02;
const Int32 WM_LBUTTONUP = 0x04;
const Int32 VK_Q = 0x051;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Int32 WindowToFind = FindWindow("notepad", "Sin título: Bloc de notas");
Int32 cuadro = FindWindowEx(WindowToFind, IntPtr.Zero, "edit", null);
SendMessage(cuadro, VK_Q, 0, 0);
}
}
}
Ese es mi codigo completo, lo que no puedo hacer es que envie la Q al notepad! Intente de varias formas, por ejemplo:
Código [Seleccionar]
private void button1_Click(object sender, EventArgs e)
{
Int32 WindowToFind = FindWindow("notepad", "Sin título: Bloc de notas");
SendMessage(WindowToFind, VK_Q, 0, 0);
}
Pero ese hace que cuando se aprieta el boton el programa en este caso notepad se cierre.
Entonces lei en paginas que necesito utilizar la función FindWindowEx (lei algo sobre child, hand y no se que) para seleccionar el cuadro donde se ingresa texto del Bloc de notas, entonces mi codigo queda:
Código [Seleccionar]
private void button1_Click(object sender, EventArgs e)
{
Int32 WindowToFind = FindWindow("notepad", "Sin título: Bloc de notas");
Int32 cuadro = FindWindowEx(WindowToFind, IntPtr.Zero, "edit", null);
SendMessage(cuadro, VK_Q, 0, 0);
}
(los valores como "edit" los obtuve con Spy++)
En este caso al presionar el Button1 el notepad no se cierra pero tampoco se escribe la Q!.
No se que tiene el codigo que no escribe la Q!.
Eso es a modo de prueba pero mi proyecto es crear un BOT para un juego de facebook, ya hice con mouse_event y SetCursorPos pero no es bueno porque no podes usar otros programas mientras el bot este activo.
No se que mas decirles ! Simplemente si me pueden ayudar les agradeceria porque busque en toda la internet y no puedo solucionar esto..
Utilizo Visual C# 2010 Express