Einzelnen Beitrag anzeigen

prinz_inzide

Registriert seit: 24. Jan 2005
64 Beiträge
 
#1

wm_gettext gibt MANCHMAL(!) leeren buffer zurück...*heul*

  Alt 28. Jan 2005, 08:00
hi all!

ich hab jetzt mein programm soweit,dass es per timer immer dafür sorgt, dass alle icq-fenster (vorübergehend) in einer listbox dargestellt werden, um überrpüfen zu können ob er auch alle fenster findet.. macht er! klappt perfekt.

so, jetzt kommts:
dann hab ich nen 2. timer, der immer das hier macht:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:integer;
begin
if (form1.ListBox1.Items.Count>0) then
begin
  for i:=0 to form1.ListBox1.Items.Count do
  begin
    ein_fenster_checken(form1.ListBox1.Items.strings[i]);
  end;
end;
end;
(hab die schleife auch schon mit "for i:=0 to form1.ListBox1.Items.Count-1 do" versucht, bring aber das selbe ergebnis und zwar einfunktionierendes, hab mal zu testzwecken eine msgbox in die schleife eingebaut, hat alle fenster angezeigt...

Delphi-Quellcode:
function ein_fenster_checken(name:string):string;
var
fenster,memo: hwnd;
buffer: array[0..1024] of char;
i,position: integer;
eingetragen:boolean;
begin
fenster:=findwindow(nil,pchar(name));
if (fenster<>0) then
begin
  memo:= getdlgitem(fenster, 7001); //7001 ist das feld wo der nachrichtenverlauf drin steht
  if (memo<>0) then
  begin
    SendMessage(memo, wm_gettext, sizeof(buffer), Integer(@buffer));
    showmessage(string(buffer));// hab ich nur zu testzwecken drin
    if (string(buffer)<>'') then
    begin
      for i:=0 to high(uin) do
      begin
        if (uin[i].name=name) then //wenn schon vorhanden im array
        begin
          showmessage('user betreits angelegt');
        end;
        if (eingetragen=false) then
        begin
          showmessage('user wurde neu angelegt');
          setlength(uin,length(uin)+1);
          uin[high(uin)].name:=name;
        end;
      end;
    end;
  end;
end else
form1.ListBox1.Items.Delete(form1.ListBox1.Items.IndexOf(name));
das problem ist die zeile oben, wo er den buffer anzeigen soll:
wenn ich einen user im icq anklicke sodass sein fenster aufgeht und er z.b. eine N/A-message gesetzt hat, welche durch icq5 beim öffnen des user-fensters sofort angezeigt wird, bekomme ich die auch problemlos angezeigt (in meiner showmessage) anders, wenn ich mit ihm gechattet habe, das chat fenster von ihm geschlossen habe un des dann wieder auf mache (text steht dann ja noch drin) kommt eine leere msgbox!! wenn ich dem jenigen dann schreibe bekomm (weilsja per timer immer wieder gemacht wird) den kompletten nachrichtenverlauf...

könnt ihr euch das erklären??

bitte umn hilfe!
  Mit Zitat antworten Zitat