'C# how to use WM_GETTEXT / GetWindowText API / Window Title

I want to get the content of the control / handle of an application..

Here's the experimental code..

 Process[] processes = Process.GetProcessesByName("Notepad");
        foreach (Process p in processes)
        {
            StringBuilder sb = new StringBuilder();
            IntPtr pFoundWindow = p.MainWindowHandle;
             List <IntPtr> s =    GetChildWindows(pFoundWindow); 
            // function that returns a 
            //list of handle from child component on a given application.

             foreach (IntPtr test in s)
             {
              // Now I want something here that will return/show 
               the text on the notepad..


             }


            GetWindowText(pFoundWindow, sb,256);
            MessageBox.Show(sb.ToString()); // this shows the title.. no problem with that

        } 

any idea? I've read some API method like GetWindowText or WM_GETTEXT but I dont know how to use it or apply it on my code.. I need a tutorial or sample code...

Thanks in advance : )



Solution 1:[1]

GetWindowText won't give you the content of edit windows from other applications - it only supports default-managed text [like the captions of labels] across processes to prevent hangs... you'll have to send WM_GETTEXT.

You'll need to use a StringBuilder version of SendMessage:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, [Out] StringBuilder lParam);

const int WM_GETTEXT = 0xD;
StringBuilder sb = new StringBuilder(65535);
// needs to be big enough for the whole text
SendMessage(hWnd_of_Notepad_Editor, WM_GETTEXT, sb.Length, sb);

Solution 2:[2]

Have a look at http://pinvoke.net/default.aspx/user32/GetWindowText.html and also the documentation on MSDN. Below you find a short code example how to use the GetWindowText method.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Random832
Solution 2 System.Data