Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Retrieve text of focused control in another application, namely IE

Posted on 2003-12-02
8
Medium Priority
?
712 Views
Last Modified: 2007-12-19
I want to write a function to retrieve the text of the active (focused) control, even if the control belongs to another application.

The function below does that in most cases.  However, it doesn't work if Internet Explorer is the foreground application and the user is in, for example, a TEXTAREA field.  (Like the one that I am typing in right now.)  Does that control not respond to the WM_GetText message or do you think GetFocus() is returning the wrong handle?  In either case, how would I go about reading the text from this type of control within IE?

function GetActiveText: String;
const
  MaxTextLen = 5000;
var
  FW, FC : HWND;
  ThID : DWORD;
  Buf : array[0..MaxTextLen] of Char;
begin
  FW := 0;
  FC := 0;
  FW := GetForegroundWindow;
  ThID := GetWindowThreadProcessId(FW,0);
  AttachThreadInput(GetCurrentThreadId(),ThID,TRUE);
  try
    FC  := GetFocus();
  finally
    AttachThreadInput(GetCurrentThreadId(),ThID,FALSE);
  end;
  SendMessage(FC,WM_GETTEXT,MaxTextLen,Integer(@Buf));
  Result := Buf;
end;

0
Comment
Question by:roknjohn
  • 4
  • 2
  • 2
8 Comments
 
LVL 8

Expert Comment

by:gmayo
ID: 9861101
Not sure specifically why your code does not work. However, I use the following to get text from another app's edit boxes:

function GetWindowTextEx(win : HWND) : string;
var
      s : array [1..513] of char;
      i : integer;
      res : DWORD;
begin
      Result := '';
      SendMessageTimeout(win, WM_GETTEXT, 512, Integer(@s[1]), 0, 1000, res);
      i := 1;
      while (i < 513) and (s[i] <> #0) do begin
            Result := Result + s[i];
            Inc(i);
      end;
end;

It could be improved but it works.

Geoff M.
0
 
LVL 1

Author Comment

by:roknjohn
ID: 9861251
geoff,

can you get your method to read text from an IE TextArea control?  For example, the control that I am typing this message into?
0
 
LVL 26

Accepted Solution

by:
Russell Libby earned 400 total points
ID: 9861681

Won't work, because they are not "true" window controls (they don't have an hwnd). Without getting into the document object model for IE (IHTMLDocument2), you are probably going to be hard pressed to come up with a generic method that works in all cases.

Regards,
Russell
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
LVL 8

Expert Comment

by:gmayo
ID: 9861759
You're right. That's the first time I've come across a program in which that didn't work. It does work in the address bar though.

Geoff M.
0
 
LVL 1

Author Comment

by:roknjohn
ID: 9861899
I found this:

Peeking into Password Edit Controls & Internet Explorer - Super Password Spy++
http://www.developer.com/net/cplus/article.php/1561741

It seems to focus on password fields, but I think I can extract the information I need from this.  Now, if I can only find the time. :-)
0
 
LVL 26

Expert Comment

by:Russell Libby
ID: 9861926

Yes, saw that one two....
But like i said, you need to delve into the document interface in order to get this information. This will work fine if you only intend on dealing with IE though... (won't work with anything else ;-)

Regards,
Russell
0
 
LVL 1

Author Comment

by:roknjohn
ID: 9861975
Hmm, looks more complicated than its worth right now.

My plan was to put together a freeware spell checker that would work across applications.  But, I think I'll just google for "Spell Checker" instead of "IHTMLDocument2  delphi"...lol

Every heard of "As-U-Type"?  
http://www.asutype.com
0
 
LVL 1

Author Comment

by:roknjohn
ID: 9862150
I think I found a real gem! The trail version works cool as heck!  It works on IE & Outlook, just like I wanted to do.  Only $29.95 (US) and I don't have to learn IHTMLDocument2!!  

PS. You can disable it for certain apps, like Delphi.  

Thanks Russell, your information solved my curousity.
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

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

Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
this video summaries big data hadoop online training demo (http://onlineitguru.com/big-data-hadoop-online-training-placement.html) , and covers basics in big data hadoop .
In a question here at Experts Exchange (https://www.experts-exchange.com/questions/29062564/Adobe-acrobat-reader-DC.html), a member asked how to create a signature in Adobe Acrobat Reader DC (the free Reader product, not the paid, full Acrobat produ…
Suggested Courses

773 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