Text von fremden Programmen auslesen/senden
-
Schau dir doch bitte mal die Parameter von FindWindowEx an - btw: deine "Objekte" sind auch nichts anderes als Fenster

-
Ich glaub ich tu mich wirklich etwas schwer damit

HWND hwnd = FindWindow(0, ICQFensterNm[0].c_str()); SetForegroundWindow(hwnd); HWND richedit = FindWindowEx(hwnd,NULL,"RichEdit20A",NULL); EnableWindow(richedit,FALSE);Wieso klappt das mit dem Handle nicht?
Also das Richedit würd nicht ausgeblendet (was bei anderen objekten sonst funktioniert.
@flenders: kannst du mir vielleicht ein Codebsp. geben. Sonst werd ich daran noch verrückt
-
Könnte es sein, dass das RichEdit20A-Control gar kein direktes Child des Hauptfensters ist?!
Die genaue Verschachtelung kannst du am besten mit Spy++ bzw. WinSpector ermitteln
-
Also das habe ich natürlich schon gemacht.
Spuckt folgendes aus:Properties for window 0x005B0862 Item Value Class Name RichEdit20A Text Rectangle 447, 539, 914, 647 Size 467, 108 Client Rectangle 0, 0, 461, 102 Client Size 461, 102 Styles WS_CHILD WS_VISIBLE WS_BORDER WS_TABSTOP 0x00004420 StylesEx WS_EX_CLIENTEDGE WS_EX_LEFT WS_EX_LTRREADING WS_EX_RIGHTSCROLLBAR ID 101 Properties OleDropTargetInterface 0x00199B18 (1678104) OleDropTargetMarshalHwnd 0x00010250 (66128) Class specific none Owner EXE C:\Programme\ICQ\Icq.exeWenn ich es mit der ID 101 bzw. 0x65 versuche über GetDlgItem klappt es auch nicht so wirklich

Aktueller Quelltext der mit dem ICQ RichEdit20A nicht funktioniert, aber zB. mit dem Notepad (über GetDlgItem)
HWND hwndPrev = GetForegroundWindow(); HWND hwnd = FindWindow(0, ICQFensterNm[0].c_str()); SetForegroundWindow(hwnd); //HWND richedit = FindWindowEx(hwnd,NULL,"RichEdit20A",NULL); //EnableWindow(richedit,FALSE); HWND richedit = GetDlgItem(hwnd, 0xF); SendMessage(richedit,EM_SETSEL,0,-1); //start selecting SendMessage(richedit,WM_COPY,0,0); SendMessage(richedit,EM_SETSEL,-1,0); //end selecting
-
Ich denke, du hast mich falsch verstanden: ich meinte, dass du wohl bei FindWindowEx ein falsches Parent verwendet hast

-
Wieso meinst du das?
Ich benutze als Parent, ein Handle des ganzen ICQ Message Fensters. Daraus will ich dann als Child das RichEdit20A handlen. Habe ich denn da irgendwie was falsch verstanden?
Könntest du mir vielleicht einen konkreten Hinweis geben wie ich es machen soll. Ich glaube so drehen wir uns im Kreis sind.
Trotzdem vielen dank schon mal für deine bemühungen
-
BlackSunrise schrieb:
Wieso meinst du das?
Ich benutze als Parent, ein Handle des ganzen ICQ Message Fensters. Daraus will ich dann als Child das RichEdit20A handlen. Habe ich denn da irgendwie was falsch verstanden?
Könntest du mir vielleicht einen konkreten Hinweis geben wie ich es machen soll. Ich glaube so drehen wir uns im Kreis.
Trotzdem vielen dank schon mal für deine bemühungen
-
Ist denn das Edit ein direktes Child des Haupt-Fensters - hab gerade hier kein ICQ installiert...
-
Ich bin ein wenig weiter gekommen. Das RichEdit20A ist kein direktes Child vom Hauptfenster sondern erst kommt noch AfxOleControl42.
Also habe ich nun folgedes probiert:
HWND hwnd = FindWindow(0, "User (Invisible) - Message Session"); SetForegroundWindow(hwnd); Sleep(50); HWND OleControl = FindWindowEx(hwnd,NULL,"AfxOleControl42",NULL); HWND richedit = FindWindowEx(OleControl,NULL,"RichEdit20A",NULL); EnableWindow(richedit,FALSE);Mache ich einen Zugriff zB. beim Wordpad wo auch ein RichEdit benutzt wird was direkt dem Hauptfenster zugeordnet ist klappt meine Methode. Also sollte es doch eigentlich auch der richtige weg sein?
Anderes Problem ist, wie kann ich nachher Unterscheiden welches RichEdit ich bekomme? Es gibt leider 2 RichEdit20A die jeweils in einem AfxOleControl42 sind.
-
Wenn du nicht über die ID gehen willst / kannst, dann eben anhand der Reihenfolge (also das wievielte Child es ist) - dazu gibt es den Parameter hwndChildAfter bei FindWindowEx

-
So als ich habs nun endlich geschafft

Meine Probleme war letztlich immer noch bei der Verschachtelung (RichEdit20A war zT. das 3. Child).
Mit ChildAfter habe ich das nun auch endlich verstanden
Also vielen dank soweit.
Wenn einer fragen zuhat und Code sehen will soll er mich fragen