Re: Senden Von Strings an andere Programme
ja also habe mir das jetzt mal in 4 labels ausgeben lassen und es kommt immer nichts raus...
könnte man das Icq Hauptfenster während der Laufzeit nicht irgendwie umbenennen oder markieren sodass es sich vom Chatfenster unterscheidet? dankeschön k4ni, aber funzt irgendwie nicht^^ |
Re: Senden Von Strings an andere Programme
Zitat:
Zitat:
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; // Das Handle vom ICQ Chat Control ermitteln function GetICQChatHandle(wndICQChat: HWND; DisplayName: string): HWND; const ICQ_WIN_CLASS = '__oxFrame.class__'; ICQ_MainWIN_Caption = 'ICQ'; var wnd: HWND; htmlDoc: IHTMLDocument2; Params: OleVariant; ClassName, captionName: string; begin Result := 0; SetLength(className, 20); SetLength(className, GetClassName(wndICQChat, PChar(className), length(ICQ_WIN_CLASS) + 1)); SetLength(captionName, 20); SetLength(captionName, GetWindowText(wndICQChat, PChar(captionName), 256)); if (className = ICQ_WIN_CLASS) then // Falls ICQ Fenster Klasse übereinstimmt if (captionName <> 'ICQ') then // aber nicht das Hauptfenster // Falls ein Displayname angegeben ist muss er übereinstimmen if (DisplayName = '') or (DisplayName = captionName) then begin wnd := FindWindowEx2(wndICQChat, ICQ_WIN_CLASS, 2); if wnd <> 0 then begin // Internet Explorer_Server vom Chatfenster suchen Result := FindWindowEx(wnd, 0, 'Internet Explorer_Server', nil); end; end; end; type PEnumInfo = ^TEnumInfo; TEnumInfo = record wndICQChat: HWND; DisplayName: string; end; function EnumWindowsProc(wnd: HWND; var EnumInfo: TEnumInfo): Bool; stdcall; export; var ClassName: array[0..255] of char; wndICQChat: HWND; begin Result := True; wndICQChat := GetICQChatHandle(wnd, EnumInfo.DisplayName); // ICQ Chat Handle ermitteln if wndICQChat <> 0 then begin // gefunden. EnumWindows abbrechen Result := False; EnumInfo.wndICQChat := wndICQChat; end; end; // IHTMLDocument2 vom ICQ Chat Control ermitteln function GetICQChatDoc(DisplayName: string): IHTMLDocument2; var wndICQChat: HWND; htmlDoc: IHTMLDocument2; EnumInfo: TEnumInfo; begin EnumInfo.DisplayName := DisplayName; // alle Fenster durchlaufen EnumWindows(@EnumWindowsProc, Integer(@EnumInfo)); wndICQChat := EnumInfo.wndICQChat; if wndICQChat <> 0 then begin // htmlDoc vom Handle ermitteln htmlDoc := GetHTMLDocumentFromHWnd(wndICQChat); // body.innerText zurückgeben if htmlDoc <> nil then Result := htmlDoc; end; end; // den Text vom ICQ Chat Control ermitteln function GetICQChatText(DisplayName: string): string; var ICQhtmlDoc: IHTMLDocument2; begin ICQhtmlDoc := GetICQChatDoc(DisplayName); if ICQhtmlDoc <> nil then Result := ICQhtmlDoc.body.innerText; end; // Test: Text vom ICQ Chat Control ermitteln procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(GetICQChatText('')); // hier kannst du ICQ Anzeigenamen übergeben end; |
Re: Senden Von Strings an andere Programme
der bricht jetzt, wenn ich die Funktion GetICQChatText ausführe ab und zeigt irgendwas mit EStack Overflow aufgetreten an.
|
Re: Senden Von Strings an andere Programme
Zitat:
|
Re: Senden Von Strings an andere Programme
weiß nicht genau wo, da er auch keinen Fehlerpunkt markiert, aber es müsste in der Enum Funktion sein.
|
Re: Senden Von Strings an andere Programme
Zitat:
|
Re: Senden Von Strings an andere Programme
öhm löl sorry, wenn ich jetz hier nen bisschen doof sein sollte aber, wie denn?^^
also irgendwie hat der mir grad hier, als ich nen haltepunkt gesetzt habe wndICQChat := GetICQChatHandle(wnd, EnumInfo.DisplayName); anders makiert^^ hoffe das hilft *g* |
Re: Senden Von Strings an andere Programme
Zitat:
http://www.delphi-treff.de/delphi-id...r/katalog/112/ |
Re: Senden Von Strings an andere Programme
also wenn ich es auf Gesamte Routine starten will, zeigt der mir ein Fehler in der Projekt Datei bei begin an.
Bei Einzelne Anweisungen macht er mir erst einen Fehler in der SHDocVw.pas am letzten end(also end.) Danach in der anderen Unit MSHTML und danach in meiner Unit... |
Re: Senden Von Strings an andere Programme
Ich hab icq2003, da geht das perfekt.
Wenn Du eh nur ein Chatprogramm als Interface benutzt, spielt es keine Rolle welche Version es ist. Nimm einfach die alte version und Dein Problem hat sich sofort gelöst :-) Sorry war das WE nicht am PC. Andreas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:15 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