Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Senden Von Strings an andere Programme (https://www.delphipraxis.net/107365-senden-von-strings-andere-programme.html)

Maddin1 26. Jan 2008 14:23


Senden Von Strings an andere Programme
 
Hallo, ich habe mal eine Weile gesucht aber nichts wirklich passendes gefunden.

Wie kann man den String eines RichEdits oder Memo an ein anderes Programm senden/empfangen?

Um das Ganze ein wenig genauer zu beschreiben:
ich habe ein kleines Programm geschrieben, mit dessen Hilfe man Texte in leichter Form kodieren kann(einfach mit Ascii Verschiebung).
Und nun würde ich diesen kodierten/dekodierten Text gerne direkt an Icq senden und abschicken lassen.
Und wenn eine Antwort bei Icq kommt, diese direkt wieder in mein Programm laden lassen.

Das würde das lästige Kopieren/Einfügen ersparen.

Bernhard Geyer 26. Jan 2008 14:51

Re: Senden Von Strings an andere Programme
 
Gewünschtes Fenster Suchen mit FindWindow und dann mit WM_GETTEXT und WM_SETTEXT (hoffentlich richtiger Name) Text auslesen und schreiben. Beispiele sollten sich per Forensuche viele finden lassen.

Maddin1 26. Jan 2008 15:20

Re: Senden Von Strings an andere Programme
 
so, habe jetzt mal ein bisschen rumgetüfftelt und nachgeschaut, aber ich komme damit irgendwie nicht zurecht.
Wie sehen diese Funktionen denn an konkreten Beispielen aus?
denn wenn ich versuche die bestimmten Parameter einzugeben, treffe ich immer nur auf neue Fehlermeldungen oder es passiert gar nichts.

Christian Seehase 26. Jan 2008 16:33

Re: Senden Von Strings an andere Programme
 
Moin Maddin,

da hier im Forum eingentlich reichlich funktionierende Beispiele zu finden sind, wäre es in diesem Falle wohl das einfachste, wenn Du mal zeigst, wie Du es versucht hast.

Maddin1 28. Jan 2008 16:17

Re: Senden Von Strings an andere Programme
 
naja wüsste ich jetzt selbst gern^^
--->nich gespeichert hat.

ich versuche es einfach noch einmal und wenn es nicht klappt gibts hier den quelltext.

Maddin1 28. Jan 2008 16:37

Re: Senden Von Strings an andere Programme
 
also, ich habe das jetzt wieder gefunden, hier im Forum:


Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var h: HWND;
   text,classname:String;
var i : integer;
begin

for i:=0 to 20 do begin
gettickcount;
begin
h:=FindWindow(nil,'Name des Chatteilnehmers');
//h:=GetForegroundWindow;
SetLength(text,SendMessage(h,WM_GETTEXTLENGTH,0,0)+1);
SendMessage(h,WM_GETTEXT,length(text),Integer(@text[1]));
SetLength(ClassName, 255);
      //get the class name and reset the
      //memory area to the size of the name
      SetLength(ClassName,
              GetClassName(h,
                           PChar(className),
                           Length(className)));

memo1.Text:=classname;
memo2.Text:=text;

end;
end;
    end;
So... das Ganze läuft in einer Schleife, damit es sich ständig aktualisiert.
Ich komme zwar nun an den Klassennamen heran (der bei Icq immer gleich ist), aber
ich weiß nicht, wie ich auf das Eingabefeld in diesem Chatfenster zugreifen kann.
Außerdem, ist der Titel des Fensters, der Name des anderen Users, was sich ja auch ständig ändert, also kann man das ja auch nicht oben einfach so ohne variable bei h:=findwindow festlegen.

bitsetter 28. Jan 2008 20:20

Re: Senden Von Strings an andere Programme
 
Zitat:

Zitat von Maddin1
Ich komme zwar nun an den Klassennamen heran (der bei Icq immer gleich ist), aber
ich weiß nicht, wie ich auf das Eingabefeld in diesem Chatfenster zugreifen kann.
Außerdem, ist der Titel des Fensters, der Name des anderen Users, was sich ja auch ständig ändert, also kann man das ja auch nicht oben einfach so ohne variable bei h:=findwindow festlegen.

Hallo,

wenn der Klassennamen von Icq eindeutig ist, kannst du ja das ganze mal umdrehen:
Delphi-Quellcode:
h:=  FindWindow('IcqClassName...',nil);
Zitat:

Zitat von Maddin1
Ich komme zwar nun an den Klassennamen heran (der bei Icq immer gleich ist), aber
ich weiß nicht, wie ich auf das Eingabefeld in diesem Chatfenster zugreifen kann.

Da kannst du es mal mit Tools wie Hier im Forum suchenWinSpy oder Componentfinder versuchen, die haben gleich einen Delphi- Codegenerator dabei.

Maddin1 29. Jan 2008 13:33

Re: Senden Von Strings an andere Programme
 
Mit WinSpy habe ich mir den Klassennamen ja anzeigen lassen.
Aber wo ich nicht ganz durchgesehen habe, da wurden noch andere Sachen mit aufgelistet.
Ich weiß nicht, ob es verschiedene Komponenten da, auf jeden fall, steht da ja auch nix von wegen Edit oder irgendwas, was auf ein eingabefeld hindeuten würde, deswegen bin ich mir auch nicht ganz sicher wegen dem generierten Code von WinSpy.

aber trotzdem schonmal dankeschön, ich werde nochmal ein wenig was ausprobieren.

Maddin1 29. Jan 2008 14:29

Re: Senden Von Strings an andere Programme
 
also bei findwindow habe ich jetzt mit dem Klassennamen abgefragt und probiert was zu schicken mit

Delphi-Quellcode:
  SendMessage(wnd, WM_SETTEXT, 0, Integer(Pchar(memo2.Text)));
aber winspy zeigt mir an, das der titel jetzt nur in mein memo text umgeändert wurde.
Sehen tut man das nicht, halt nur bei winspy.
Aber von den koordinaten her, ist es schon das richtige fenster.

gibb 29. Jan 2008 15:51

Re: Senden Von Strings an andere Programme
 
an welchen handle hast du das geschickt ? an den normalen ICQ handle oder an den textfeld handle vom icq ?

weil du müsstest es an den Handle vom "textfeld" das ganze schicken... kannst mit WinSpy das gewünschte "textfeld" (ich weis halt nicht was es ist beim ICQ) anwählen/markieren und dann oben auf Code klicken und es erstellt dir einen Möglichen Code ( meist nicht optimal aber auch nicht grundübel) womit du an den gewünschten handle kommst.

LG Severin

Maddin1 29. Jan 2008 16:33

Re: Senden Von Strings an andere Programme
 
nunja, habe das Fenster markiert und es gibt 4 Einträge, mit jeweils handle, classname und titel.
Ich habe einen Eintrag genommen, dessen Koordinaten mit denen des Eingabefeldes entspricht.
Wobei dieser Eintrag auch nen untergordneten Eintrag enthält: einmal mit classname und einmal als Internetexplorer. Ich habe es mit beiden Varianten versucht, doch jedes mal hat er nur den Titel geändert, wovon man das aber auch nur bei Winspy sehen kann.


-->man is das alles kompliziert^^

Also das Eingabefeld kann man auch nicht extra markieren, sondern nur das gesamte Chatfenster, und man könnte dann den gewünschten Eintrag wählen, wie oben bereits erwähnt.

Andy090778 29. Jan 2008 23:38

Re: Senden Von Strings an andere Programme
 
Delphi-Quellcode:
procedure SendText;
var
  Text: String;
  EditHandle, WindowHandle: HWND;
begin
  Text := 'Hallo';
  WindowHandle := FindWindow(nil, 'XXX - Nachrichtensitzung');
  EditHandle := FindWindowEx(WindowHandle, 0, 'RichEdit20A', nil);
  SendMessage(EditHandle, WM_SETTEXT, 0, Integer(PChar(Text)));
end;
jetzt noch mixen mit GetText und natürlich mit Deinem Text.

Andreas

Maddin1 30. Jan 2008 16:44

Re: Senden Von Strings an andere Programme
 
hey danke Andreas, aber leider funzt das auch nicht,

Delphi-Quellcode:
 WindowHandle := FindWindow(nil, 'XXX - Nachrichtensitzung');
Diese Abfrage habe ich ja im Prinzip schon als Schleife, nur dass ich nach den Klassennamen abfrage und nicht nach den Titel(da der ja Variabel ist).
Mein Problem scheint ja eigentlich nur darin zu liegen, dass ich nicht weiß, wie ich auf die Komponente zugreifen kann.

Habe das ganze gestern mal dem einfachen Standart Editor von Windows probiert und es hat super gefunzt.
Da heißt das RichEdit bei WinSpy auch einfach: Edit.
Bei Icq gibt es leider keine derartige bezeichnung, und ich weiß nicht welches Handle ich nun benötige um Gettext/Settext zu verwenden.

Andy090778 30. Jan 2008 20:21

Re: Senden Von Strings an andere Programme
 
hmm? Mit meiner icq version funktioniert das Prima. XXX ersetzt Du mit dem Namen des Chatters.

Mit WinSpy konnte ich in 30 Sekunden die Klasse des Texteingabefelds ermitteln: RichEdit20A
Im Prinzip musst Du so nur noch das übergeordnete Fenster finden.

Wo genau ist das Problem??

Maddin1 31. Jan 2008 16:24

Re: Senden Von Strings an andere Programme
 
RichEdit20A steht irgendwie nirgends bei WinSpy.
Ich habe halt, wie gesagt ein Fenster gefunden was von den Koordinaten mit dem Eingabe Feld übereinstimmt,
aber wenn ich dessen Handle nehme passiert halt nichts...

Maddin1 31. Jan 2008 16:31

Re: Senden Von Strings an andere Programme
 
welche Icq Version hast du denn? ich hab 6

Maddin1 31. Jan 2008 16:46

Re: Senden Von Strings an andere Programme
 
also hab das jetzt mal folgender maßen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var EditHandle, WindowHandle: HWND;

begin

  windowhandle:= FindWindow('__oxFrame.class__',nil);
  windowhandle:= FindWindowEx(windowhandle, 0, '__oxFrame.class__', nil);
  windowhandle := FindWindowEx(windowhandle, 0, 'Internet Explorer_Server', nil);
  EditHandle := FindWindowEx(WindowHandle, 0, 'RichEdit20A', nil);
  SendMessage(edithandle, WM_SETTEXT, 0, Integer(PChar(memo2.Text)));
  memo1.Text:=inttostr(windowhandle)

end;
Der Scheint aber RichEdit20A nicht zu kennen, weil als ich mir dann windowhandle mal ausgegeben lassen habe kam ein wert raus, doch ab EditHandle, sprich also bei RichEdit20A kam 0 raus

peschai 31. Jan 2008 16:46

Re: Senden Von Strings an andere Programme
 
Hallo
So etwas sollte man nicht im "FormCreate" tun, denn hier wir das formular mit seinen Kindern noch aufgebaut ... (Beisopiel weiter oben ...)

bitsetter 31. Jan 2008 17:38

Re: Senden Von Strings an andere Programme
 
Zitat:

Zitat von Maddin1
Also das Eingabefeld kann man auch nicht extra markieren, sondern nur das gesamte Chatfenster, und man könnte dann den gewünschten Eintrag wählen, wie oben bereits erwähnt.

Zitat:

Zitat von Maddin1
also hab das jetzt mal folgender maßen:
Delphi-Quellcode:
...
  windowhandle := FindWindowEx(windowhandle, 0, 'Internet Explorer_Server', nil);
...

Kann auch sein, dass da der Internet Explorer in so eine Art TOleContainer läuft, mit WM_SETTEXT kommt man dann nicht weit.

Maddin1 1. Feb 2008 18:18

Re: Senden Von Strings an andere Programme
 
hmmm und wie kann man da nun rangehen?

toms 3. Feb 2008 10:03

Re: Senden Von Strings an andere Programme
 
Zitat:

Zitat von Maddin1
hmmm und wie kann man da nun rangehen?


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

Maddin1 3. Feb 2008 10:09

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

toms 3. Feb 2008 10:37

Re: Senden Von Strings an andere Programme
 
Zitat:

Zitat von Maddin1
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

Du kannst vom Internet Explorer_Server das IHTMLDocument2 ermitteln und dann den Text "manipulieren" (auslesen, etc)
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;

Maddin1 3. Feb 2008 11:11

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.

bitsetter 3. Feb 2008 11:24

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;

Maddin1 3. Feb 2008 11:27

Re: Senden Von Strings an andere Programme
 
ich habe die abgespeckte, kostenlose Variante von Delphi 2005

toms 3. Feb 2008 11:43

Re: Senden Von Strings an andere Programme
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Maddin1
hmm bei mir zeigt der an, dass er keine MSHTML.dcu und SHDocVw.dcu finden kann.

Siehe Anhang

Maddin1 3. Feb 2008 12:42

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.

toms 3. Feb 2008 12:51

Re: Senden Von Strings an andere Programme
 
Zitat:

Zitat von Maddin1
hmmm also habe das jetzt mal alles so gemacht, aber wenn ich die Funktion GetICQChatText('') aufrufe, wird meine Memo oder Message einfach nur leer.

Führe den Code Schritt um Schritt aus und überprüfe, was für einen Wert die Funktionen zurückgeben.

Nachtrag: Das ICQ Hauptfenster hat den gleichen Klassennamen wie das Chatfenster.
Darum findet es unter Umständen das falsche Fenster.

k4ni 3. Feb 2008 13:07

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;

Maddin1 3. Feb 2008 13:15

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^^

toms 3. Feb 2008 14:02

Re: Senden Von Strings an andere Programme
 
Zitat:

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;

Maddin1 3. Feb 2008 14:16

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.

toms 3. Feb 2008 14:34

Re: Senden Von Strings an andere Programme
 
Zitat:

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)

Maddin1 3. Feb 2008 14:57

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.

toms 3. Feb 2008 15:04

Re: Senden Von Strings an andere Programme
 
Zitat:

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.

Maddin1 3. Feb 2008 15:08

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*

toms 3. Feb 2008 16:33

Re: Senden Von Strings an andere Programme
 
Zitat:

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/

Maddin1 3. Feb 2008 18:59

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...

Andy090778 3. Feb 2008 19:19

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 05:50 Uhr.
Seite 1 von 2  1 2      

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