Re: Senden Von Strings an andere Programme
Zitat:
Hallo, mein ICQ (V.6) hat gar kein RichEdit20A als Chat Control... Welche Version hast du denn? http://img401.imageshack.us/img401/9...eenshotlo1.jpg |
Re: Senden Von Strings an andere Programme
ja genau, hab auch 6, gibts bei mir auch nicht
und über Internet Explorer_Server kann man nur den Titel verändern, was man aber auch nur in WinSpy sehen kann |
Re: Senden Von Strings an andere Programme
Zitat:
wie du möchtest. Habe das Auslesen des ICQ Textes bei mir getestst und ese funktioniert:
Delphi-Quellcode:
uses
ActiveX, MSHTML, SHDocVw; // Hilfsfunktion zum finden von Childfenstern function FindWindowEx2(hParent: HWND; ChildClassName: string; ChildNr: Word): HWND; var i: Word; hChild: HWND; begin hChild := 0; Result := 0; ChildNr := ChildNr - 1; for i := 0 to ChildNr do begin hChild := FindWindowEx(hParent, hChild, PChar(ChildClassName), nil); if hChild = 0 then Exit; Result := hChild; end; end; type TObjectFromLResult = function(LRESULT: lResult; const IID: TIID; WPARAM: wParam; out pObject): HRESULT; stdcall; // IHTMLDocument2 vom Handle Internet Explorer_Server ermitteln function GetHTMLDocumentFromHWND(wnd: HWND): IHTMLDocument2; var hInst: HWND; lRes: Cardinal; MSG: Integer; ObjectFromLresult: TObjectFromLresult; pDoc: IHTMLDocument2; begin Result := nil; hInst := LoadLibrary('Oleacc.dll'); @ObjectFromLresult := GetProcAddress(hInst, 'ObjectFromLresult'); if @ObjectFromLresult <> nil then begin try MSG := RegisterWindowMessage('WM_HTML_GETOBJECT'); SendMessageTimeOut(wnd, MSG, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes); if ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc) = S_OK then Result := pDoc; finally FreeLibrary(hInst); end; end; end; function GetICQChatDoc(DisplayName: string): IHTMLDocument2; var wndICQChat, wnd: HWND; htmlDoc: IHTMLDocument2; Params: OleVariant; begin Result := nil; // ICQ Chatfenster suchen if DisplayName = '' then wndICQChat := FindWindow('__oxFrame.class__', nil) else wndICQChat := FindWindow('__oxFrame.class__', PChar(DisplayName)); if wndICQChat <> 0 then begin wnd := FindWindowEx2(wndICQChat, '__oxFrame.class__', 2); if wnd <> 0 then begin // Internet Explorer_Server vom Chatfenster suchen wnd := FindWindowEx(wnd, 0, 'Internet Explorer_Server', nil); if wnd <> 0 then begin // htmlDoc vom Handle ermitteln htmlDoc := GetHTMLDocumentFromHWnd(wnd); // body.innerText zurückgeben if htmlDoc <> nil then Result := htmlDoc //htmlDoc.body.innerText; end; end; end; end; function GetICQChatText(DisplayName: string): string; var ICQhtmlDoc: IHTMLDocument2; begin ICQhtmlDoc := GetICQChatDoc(''); if ICQhtmlDoc <> nil then Result := ICQhtmlDoc.body.innerText; end; procedure TForm1.FormCreate(Sender: TObject); begin Showmessage(GetICQChatText('')); // hier kannst du ICQ Anzeigenamen übergeben end; |
Re: Senden Von Strings an andere Programme
hmm bei mir zeigt der an, dass er keine MSHTML.dcu und SHDocVw.dcu finden kann.
aber trotzdem schonmal dankeschön, ich werd mich mal nach den dateien umsehen. |
Re: Senden Von Strings an andere Programme
Hi,
welche Delphi Version hast du, kann auch MSHTML oder SHDocVw sein, ich hatte nämlich auch gerade mit der Funktion GetIEFromHWND() experimentiert, aber Toms war schneller. Edit: Ich meinte natürlich Shdocvw_tlb und MSHTML_TLB; |
Re: Senden Von Strings an andere Programme
ich habe die abgespeckte, kostenlose Variante von Delphi 2005
|
Re: Senden Von Strings an andere Programme
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: Senden Von Strings an andere Programme
hmmm also habe das jetzt mal alles so gemacht, aber wenn ich die Funktion GetICQChatText('') aufrufe, wird meine Memo oder Message einfach nur leer.
|
Re: Senden Von Strings an andere Programme
Zitat:
Nachtrag: Das ICQ Hauptfenster hat den gleichen Klassennamen wie das Chatfenster. Darum findet es unter Umständen das falsche Fenster. |
Re: Senden Von Strings an andere Programme
Wie ich rauslesen konnte willst du eigentlich nur einen text an ein ICQ-fenster schicken, richtig?
Da hab ich mir erst gestern was gemacht, hier:
Delphi-Quellcode:
procedure SendText(AText: String);
var lCount : Integer; h : HWND; begin h := FindWindow('IcqClass...', nil); h := FindWindowEx(h, 0, 'Class2', nil); // Hier die class vom memo im ICQ chat fenster. for lCount := 1 To Length(AText) Do begin PostMessageA(h, WM_Char, ord(AText[lCount]), 0); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz