Solved

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

Posted on 2014-09-16
6
388 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
6 Comments
 
LVL 25

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 25

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
PeopleSoft Has Never Been Easier

PeopleSoft Adoption Made Smooth & Simple!

On-The-Job Training Is made Intuitive & Easy With WalkMe's On-Screen Guidance Tool.  Claim Your Free WalkMe Account Now

 
LVL 25

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 34

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

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Whether you've completed a degree in computer sciences or you're a self-taught programmer, writing your first lines of code in the real world is always a challenge. Here are some of the most common pitfalls for new programmers.
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
Windows 8 came with a dramatically different user interface known as Metro. Notably missing from that interface was a Start button and Start Menu. Microsoft responded to negative user feedback of the Metro interface, bringing back the Start button a…

696 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