Fremdes Control auslesen
-
Also sorry Jochen, aber ich steige da nicht durch...
Also FensterHWND und ControlHWND habe ich, das ist kein Thema, aber wie man jetzt dieses Auslesen des Controls bewerkstellig...ist mir unklar..Gibt es vielleicht Jemanden, der mir ein kleines Beispiel nahelegen kann?
Würde mich echt riesig darüber freuenGrreez
DaMapfi
-
Bin da jetz wirklich nicht firm, aber wieso musst Du auf Daten eines anderen Prozesses zugreifen? Reicht nicht, einen zweiten Thread aufzumachen? Die nutzen ja dann einen gemeinsamen Datenraum womit Dein Problem gelöst sein sollte...
Oder muss es zwingend ein anderer Prozess sein?
LG Solick
-
GetWindowText!?
Das ganze geht aber mit Vista und UIP nicht mehr...
-
Jou thx für die Antwort!
hm, scheint ja doch garnicht mal so einfach zu sein, was?

Ich komme damit jedenfalls nicht weiter, hmm...Shit
!Vielleicht findet sich ja noch Jemand, der mir ein kurzen Quelltext oder so präsentieren kann, wäre echt super!

Gruß
DaMapfi
-
Da bin ich wieder

Es will und will nicht klappen!

Hier mein Code:
HWND hAimWindow, hReadingControl, hInputControl, hWantedCtrl; LPARAM text=(LPARAM)_T("blabla test"); LRESULT lResult; LPWSTR text2; LPWSTR text3; int len; hAimWindow = FindWindow(_T("AIM_ChatWnd"), NULL); hReadingControl = FindWindowEx(hAimWindow, NULL,_T("WndAte32Class"), NULL); hInputControl = FindWindowEx(hAimWindow, hReadingControl, _T("WndAte32Class"), NULL); hWantedCtrl = FindWindowEx(hInputControl, NULL, _T("Ate32Class"), NULL); len = ::SendMessage(hWantedCtrl,WM_GETTEXTLENGTH,0,0); GetWindowText(hWantedCtrl,text2,len); String^ s = gcnew String(text2); this->label1->Text = Convert::ToString(len); this->label2->Text = s;Im Label1 kommt, wenn des Control leer ist eine 0, wenn was drin steht, dann die "Drin-Stehende-Buchstaben"+66.
Wo in diesem Falle die 66 herkommt, ist mir auch unklar.
und das Label2 bleibt leer *schnief*
Kann mal Jemand, der sich damit auskennt ein Augen draufwerfen?
Kann doch wohl nicht so schwer sein....
Muss wohl noch eine Menge lernen

Oder liegt es daran, dass ich Windows 7 verwende?
-
Du reservierst kein Speicher für text2. Wo soll denn GetWindowText(..) seinen Fenster Text reinschreiben?
Simon
-
was fehlt denn in dem source noch? Sry aber NOCH bin echt ein anfänger in den sachen

-
TCHAR text2[255];
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
das wird so eh nich funzen weil GetWindowText nicht prozessübergreifend arbeitet. du willst WM_GETTEXT.
-
Jochen, das Ergebnis:
HWND hAimWindow, hReadingControl, hInputControl, hWantedCtrl; LPARAM text=(LPARAM)_T("blabla test"); LRESULT lResult; TCHAR text2[255]; LPWSTR text3; int len; hAimWindow = FindWindow(_T("AIM_ChatWnd"), NULL); hReadingControl = FindWindowEx(hAimWindow, NULL,_T("WndAte32Class"), NULL); hInputControl = FindWindowEx(hAimWindow, hReadingControl, _T("WndAte32Class"), NULL); hWantedCtrl = FindWindowEx(hInputControl, NULL, _T("Ate32Class"), NULL); len = ::SendMessage(hWantedCtrl,WM_GETTEXTLENGTH,0,0);/*GetWindowTextW(hWantedCtrl,text3,len);*/ GetWindowText(hWantedCtrl,text2,len); String^ s = gcnew String(text2); this->label2->Text = s; this->label1->Text = Convert::ToString(len);label2: bei leerem Editfeld kommen chinesische, oder japanische Zeichen raus, wenn etwas in dem Editcontrol steht bleibt es leer..:(:(:(:(:(:(:(:( ich verzweifel langsam dadran!
rul0r:
WM_GETTEXT soll genauso nicht prozessübergreifend sein.habs damit probiert, und habs auch nicht hinbekommen...vielleicht lags an meiner inkompetenz?
wenn du mal ein beispiel code hast, wär ich dir sehr dankbar rul0r
-
Welches OS?
-
DaMapfi schrieb:
WM_GETTEXT soll genauso nicht prozessübergreifend sein.
MSDN schrieb:
GetWindowText cannot retrieve the text of a control in another application.
[...]
To retrieve the text of a control in another process, send a WM_GETTEXT message directly instead of calling GetWindowText.
-
Jochen: Windows 7

rul0r: moment...
-
rul0r alta, alter Cheater!
also ja, mein erster Ansatz war es auch mit WM_GETTEXT..hab mal in nem anderen Forum dazu was geposted....Respond:
You're not serious...
It has been explained millions of times on Win32 groups (http://tinyurl.com/cmhb5g and others)
(WM_GETTEXT being inter-process)muss ich nun auch noch Englisch lernen? Heißt das nicht soviel wie....Es ist nur Prozess-Intern?! oO
Aber i thank You So MUCH! Ich Cleane gleich mein code und poste ihn mal hierrein
-
Hatte ich nicht geschrieben, dass es ab Vista nicht mehr geht?
Such mal nach UIPI...
http://msdn.microsoft.com/en-us/library/bb756960.aspx
-
HWND hAimWindow, hReadingControl, hInputControl, hWantedCtrl; LRESULT lResult; TCHAR text[255]; int len; hAimWindow = FindWindow(_T("AIM_ChatWnd"), NULL); hReadingControl = FindWindowEx(hAimWindow, NULL,_T("WndAte32Class"), NULL); hInputControl = FindWindowEx(hAimWindow, hReadingControl, _T("WndAte32Class"), NULL); hWantedCtrl = FindWindowEx(hInputControl, NULL, _T("Ate32Class"), NULL); len = ::SendMessage(hWantedCtrl,WM_GETTEXTLENGTH,0,0); lResult = ::SendMessage(hInputControl,WM_GETTEXT,len,(LPARAM)text2); String^ s = gcnew String(text2); this->label2->Text = s; this->label1->Text = Convert::ToString(len);so sieht nun mein Code aus, eine Frage habe ich noch dazu, wie kann ich dir Größe von text "variabel" machen? Einfach vor der Deklaration len ermitteln und das als index nehmen?
-
Ja, Jochen hattest du. Ich habe mir den Inhalt der Variablen zwar nicht genau angeguckt, wegen magelnder Label2 Größe, doch habe ich schon die HTML-Tags drinstehen sehen, also zieht er tatsächlich den Text aus dem Control
-
Hatte noch einige Fehler in dem Code, hier der berichtigte:
HWND hAimWindow, hReadingControl, hInputControl, hWantedCtrl; LRESULT lResult; TCHAR text[255]; int len; hAimWindow = FindWindow(_T("AIM_ChatWnd"), NULL); hReadingControl = FindWindowEx(hAimWindow, NULL,_T("WndAte32Class"), NULL); hInputControl = FindWindowEx(hAimWindow, hReadingControl, _T("WndAte32Class"), NULL); hWantedCtrl = FindWindowEx(hInputControl, NULL, _T("Ate32Class"), NULL); len = ::SendMessage(hWantedCtrl,WM_GETTEXTLENGTH,0,0); lResult = ::SendMessage(hInputControl,WM_GETTEXT,len,(LPARAM)text); String^ s = gcnew String(text); this->label2->Text = s; this->label1->Text = Convert::ToString(len);Edit: Am Ende des ausgelesen Textes, sind aber noch "komische" Zeichenfolgen, wie kann man das beheben? Oder ist es evtl, wegen einer fehlenden NULL-Beendung des "Strings"?
-
Hier noch die Doku:
http://msdn.microsoft.com/en-us/library/aa922085.aspxAm Ende des ausgelesen Textes, sind aber noch "komische" Zeichenfolgen, wie kann man das beheben? Oder ist es evtl, wegen einer fehlenden NULL-Beendung des "Strings"?
Ja, das könnte sein. Probiers doch mal aus.