Solved

How can I get a WinForms text control's text string, given a pointer to its CWnd.

Posted on 2014-09-16
6
372 Views
Last Modified: 2014-09-20
I have a Winforms app whose window contains several controls.   From a separate MFC process I need to be able to retrieve the value of one of the text controls in the Winforms app.

I enumerate those controls to get a CWnd pointer for each  one.  That all works fine.

The window has several pushbuttons and several text controls.  On each pushbutton, when I call GetWindowText() I get the pushbutton's caption returned.  As expected.

However when I call GetWindowText() on a text object I get nothing back even though there is clearly a non-null string there.

I'm assuming that one cannot use GetWindowText()  on a Winforms text object but I don't know what I can use that would give me back the text that's stored within a text object.
0
Comment
Question by:allanephillips
  • 3
  • 2
6 Comments
 
LVL 24

Expert Comment

by:chaau
ID: 40327032
I think GetWindowText should work fine. Can you post some code, there could be a problem. Also, can you check that the windows class of your edit controls is a correct one. It should have a value similar to "WindowsForms10.EDIT.app.0.34f5582_r9_ad1" (ignore the last bit, it is always different). It must have "EDIT" in it
0
 
LVL 24

Expert Comment

by:chaau
ID: 40327048
Please note that for normal Winform Edit controls the EDIT window will be a child of the form. If the edit is a toggle EDIT (with up and down arrows) then it will be part of a composite control and the actual EDIT control will be one level below. Check the spy++ for the well know WinForms program below:A WinForm windowIts spy
0
 

Author Comment

by:allanephillips
ID: 40327084
Well the window class that I seem to be seeing is: "WindowsForms10.Window.8.app.0.202c666".  It sounds as though that is not the right one.

When I use spy++ I don't see any descendant window that has ".EDIT" in its class name so it may be that the window that spy++ shows that looks like an edit control really isn't one.
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 24

Accepted Solution

by:
chaau earned 500 total points
ID: 40327089
it may as well be a "custom control". The developers of the WinForm app may have developed a custom control, or imported an OCX control (e.g. a mask edit control or something). In this case you need to explore some other options, like windows hooking
0
 
LVL 33

Expert Comment

by:sarabande
ID: 40328131
when using spy, you could "search" for the control by dragging the search icon of spy to the text control.

try to get the window handle of the parent window and the id of the text control. then you can do:

HWND hwndTextCtrl == ::GetDlgItem(hwndParent, id);
TCHAR text[1024] = { 0 };
int len = ::GetWindowText(hwndTextCtrl,  text, 1024);

Open in new window


note, the windows form uses utf-16 character set which is called UNICODE by MS. the mfc application might use 'multibyte character set' where the TCHAR is a single char. if that is the case and the GetWindowText returns a positive length but the text seems to be empty, you may try to using WCHAR instead of TCHAR and call the ::GetWindowTextL which could handle wide strings.

Sara
0
 

Author Closing Comment

by:allanephillips
ID: 40334845
The solution really just told me that there is likely no way to get at the data in what's probably a "Custom Control".   I guess I'll have to try to get the data using an OCR converter.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

For most people, the WrapPanel seems like a magic when they switch from WinForms to WPF. Most of us will think that the code that is used to write a control like that would be difficult. However, most of the work is done by the WPF engine, and the W…
The password reset disk is often mentioned as the best solution to deal with the lost Windows password problem. In Windows 2008, 7, Vista and XP, a password reset disk can be easily created. But besides Windows 7/Vista/XP, Windows Server 2008 and ot…
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now