Questo post è solo un ""PoC"" (Proof of Concept) :
Una volta trovata la text box da compilare possiamo valorizzarla da un altra applicazione:
using System;
using System.Runtime.InteropServices;
namespace TestWindow
{
public partial class Form1 : Form
{
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
private static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
const int WM_SETTEXT = 0X000C;
private void SendMessageToTextBox(IntPtr ptr,string testo)
{
SendMessage(ptr, WM_SETTEXT, 0, testo);
}
private void Form1_Load(object sender, EventArgs e)
{
this.CompileForm();
}
private void CompileForm()
{
IntPtr p1 = new IntPtr(0x0020059A);
this.SendMessageToTextBox(p1, "textboxuno");
}
}
}
Modificando il metodo CompileForm compiliamo le due textbox:
private void CompileForm()
{
IntPtr p1 = new IntPtr(0x0020059A);
this.SendMessageToTextBox(p1, "textboxuno");
IntPtr p2 = new IntPtr(0x0043060E);
this.SendMessageToTextBox(p2, "textboxdue");
}
ed otteniamo :
a scopo dimostrativo dell'effettiva chiamata dell'evento click dell'altra applicazione aggiungiamo del codice nel gestore dell'evento click del bottone "button1" :
private void button1_Click(object sender, EventArgs e)
{
string s = this.textBox1.Text;
string w = this.textBox2.Text;
this.textBox3.Text = this.textBox3.Text + s + Environment.NewLine;
this.textBox3.Text=this.textBox3.Text + w + Environment.NewLine;
}
aggiungiamo al metodo CompileForm dell'applicazione "chiamante" il SendMessage all'evento click :
private void CompileForm()
{
IntPtr p1 = new IntPtr(0x0020059A);
this.SendMessageToTextBox(p1, "textboxuno");
IntPtr p2 = new IntPtr(0x0043060E);
this.SendMessageToTextBox(p2, "textboxdue");
IntPtr p3 = new IntPtr(0x003F079E);
const int BM_CLICK = 0x00F5;
SendMessage(p3, BM_CLICK,IntPtr.Zero,IntPtr.Zero);
}
chiamiamo il metodo CompileForm ed otteniamo :