Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get text from another application

Tags:

c#

sendmessage

I'd like to retrieve text from textbox in my another application. ProcessName from second application is 'TestTextBox', TextBox's name is 'textBox1'.

My code, which returns empty string:

[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, long wParam, [MarshalAs(UnmanagedType.LPStr)] StringBuilder lParam);

Process[] processes = Process.GetProcessesByName("TestTextBox");
foreach (Process p in processes)
{
    IntPtr pFoundWindow = p.MainWindowHandle;
    const int WM_GETTEXT = 0x0D;
    StringBuilder sb = new StringBuilder();
    IntPtr retVal = SendMessage(pFoundWindow, WM_GETTEXT, 100, sb);
    MessageBox.Show(sb.ToString());
}
like image 946
sventevit Avatar asked Oct 16 '25 20:10

sventevit


2 Answers

What is the "another application"? Is it something you are writing? Could it be running on another machine? In another domain? Under another user account? Could the target application, form, or textbox ever change? Do you need asynchronous (i.e. non-blocking) communication between applications?

If the answer to any of those questions is "yes", you should consider using .Net Remoting. This is available from .Net 2.0.

like image 164
Dour High Arch Avatar answered Oct 18 '25 10:10

Dour High Arch


In june there was a discussion of how to find the handle of a child control, perhaps this helps.

like image 35
Doc Brown Avatar answered Oct 18 '25 11:10

Doc Brown