AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Senden Von Strings an andere Programme
Thema durchsuchen
Ansicht
Themen-Optionen

Senden Von Strings an andere Programme

Ein Thema von Maddin1 · begonnen am 26. Jan 2008 · letzter Beitrag vom 24. Mär 2008
Antwort Antwort
Seite 4 von 7   « Erste     234 56     Letzte »    
Maddin1
(Gast)

n/a Beiträge
 
#31

Re: Senden Von Strings an andere Programme

  Alt 3. Feb 2008, 13:15
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^^
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#32

Re: Senden Von Strings an andere Programme

  Alt 3. Feb 2008, 14:02
Zitat von k4ni:
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;
Kann nicht funktionieren denn es handelt sich um die Internet Explorer_Server Klasse.

Zitat:
Nachtrag: Das ICQ Hauptfenster hat den gleichen Klassennamen wie das Chatfenster.
Darum findet es unter Umständen das falsche Fenster.
Mit EnumWindows suchen wir nun das richtige Fenster. Neuer Code:

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;
Thomas
  Mit Zitat antworten Zitat
Maddin1
(Gast)

n/a Beiträge
 
#33

Re: Senden Von Strings an andere Programme

  Alt 3. Feb 2008, 14:16
der bricht jetzt, wenn ich die Funktion GetICQChatText ausführe ab und zeigt irgendwas mit EStack Overflow aufgetreten an.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#34

Re: Senden Von Strings an andere Programme

  Alt 3. Feb 2008, 14:34
Zitat von Maddin1:
der bricht jetzt, wenn ich die Funktion GetICQChatText ausführe ab und zeigt irgendwas mit EStack Overflow aufgetreten an.
Bei welcher Stelle tritt der Fehler auf? (debuggen)
Thomas
  Mit Zitat antworten Zitat
Maddin1
(Gast)

n/a Beiträge
 
#35

Re: Senden Von Strings an andere Programme

  Alt 3. Feb 2008, 14:57
weiß nicht genau wo, da er auch keinen Fehlerpunkt markiert, aber es müsste in der Enum Funktion sein.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#36

Re: Senden Von Strings an andere Programme

  Alt 3. Feb 2008, 15:04
Zitat von Maddin1:
weiß nicht genau wo, da er auch keinen Fehlerpunkt markiert, aber es müsste in der Enum Funktion sein.
Mach mal eine Schritt für Schritt Ausführung des Codes.
Thomas
  Mit Zitat antworten Zitat
Maddin1
(Gast)

n/a Beiträge
 
#37

Re: Senden Von Strings an andere Programme

  Alt 3. Feb 2008, 15:08
ö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*
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#38

Re: Senden Von Strings an andere Programme

  Alt 3. Feb 2008, 16:33
Zitat von Maddin1:
öhm löl sorry, wenn ich jetz hier nen bisschen doof sein sollte aber, wie denn?^^

http://www.delphi-treff.de/delphi-id...r/katalog/112/
Thomas
  Mit Zitat antworten Zitat
Maddin1
(Gast)

n/a Beiträge
 
#39

Re: Senden Von Strings an andere Programme

  Alt 3. Feb 2008, 18:59
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...
  Mit Zitat antworten Zitat
Andy090778

Registriert seit: 13. Mai 2006
23 Beiträge
 
Delphi 5 Standard
 
#40

Re: Senden Von Strings an andere Programme

  Alt 3. Feb 2008, 19:19
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
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 7   « Erste     234 56     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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