![]() |
Problem beim Fenster finden!
Hallo alle zusammen.
Bin gerade dabei ein ICQ-Clone zu proggen und bin nun auf folgendes Problem gestoßen: Mit folgender Prozedur öffne ich ein neues Nachrichtenfenster, wenn ich eine Nachricht erhalte:
Delphi-Quellcode:
Nun kommt es ja aber nicht selten vor, dass man von einem User bereits eine Nachricht erhalten hat und somit schon ein Fenster offen ist.
procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String);
var i: Integer; ListItem: TListItem; FNick, min1: String; DateTime: TDateTime; Hour, Min, Sec, Msec: Word; begin DateTime := now; DecodeTime(DateTime, Hour, Min, Sec, Msec); Min1 := IntToStr(Min); if Length(Min1) = 1 then Min1 := '0' + Min1; with TMessage.Create(nil) do begin FNick := UIN; if ListView1.Items.Count > 0 then for i := 0 to ListView1.Items.Count - 1 do if ListView1.Items.Item[i].Caption = UIN then begin ListItem := ListView1.Items.Item[i]; Self.IconList.GetIcon(StrToInt(ListItem.SubItems[LV_INDEX_STATUS]), Image1.Picture.Icon); end; Self.AdvIconList.GetIcon(0, Self.Icon); if ListView1.Items.Count > 0 then for i := 0 to ListView1.Items.Count - 1 do if ListView1.Items.Item[i].Caption = UIN then begin ListItem := ListView1.Items.Item[i]; FNick := ListItem.SubItems[LV_INDEX_NICK]; //Nick Break; end; Caption := FNick; Nick.Text := FNick; Nummer.Text := UIN; Text.Font.Color := clred; Text.Font.Size := 10; Text.Lines.Add(FNick+' ('+IntToStr(Hour)+':'+min1+'):'); Text.Font.Color := clblack; Text.Font.Size := 8; Text.Lines.Add(Msg); Text.Lines.Add(''); Show; end; end; Wie kann ich nun also herausfinden, ob von dem User schon ein Fenster offen ist (gebe jedem Fenster den Nickname des Users als Titel)? Und falls ja, wie kann ich dann eine neu erhaltene Nachricht an das Memo mit dem Namen Text des geöffneten Fenster weiterleiten (die Nachricht liegt in einer variablen vom Typ String). PS: Jedes Fenster hat 2 Memo-Felder, müsste also irgendwie über den Namen laufen. Gruß Flo |
Re: Problem beim Fenster finden!
speicher einfach alle fenster die du öffnest in einer Liste. Und wenn du ein Fenster öffnest kannst du ja dem TForm auch ein Property geben welches festhält von welchem User das Fenster ist. Und wenn da wieder eine message kommst brauchst du nur die Liste durchgehen und überprüfst ob in der Liste schon ein Fenster von UserX ist.
|
Re: Problem beim Fenster finden!
Mit folgendem Code kann man (zumindest bei mir) das ICQ-Messagefenster finden:
Delphi-Quellcode:
Und das Memo für die Nachricht entsprechend so:
var
wnd: HWND; begin wnd := FindWindow('#32770',''); if wnd <> 0 then begin // Fenster vorhanden end; end.
Delphi-Quellcode:
Generated by WinSpy ;)
var
wnd: HWND; begin wnd := FindWindow('#32770',''); wnd := FindWindowEx(wnd, 0, 'RichEdit20A', nil); if wnd <> 0 then begin // Femster vorhanden end; end. aso - du öffnest die fenster selber und willst wissen, welches du schon offen hast ... dann einfach eine property UIN oder so, und beim erhalten alle vorhandenen durchgehen und testen, ggf. Nachricht einfügen. Und wenn keines da ist, einfach ein neues erzeugen ;) - Also siehe SirT :( Ich bin einfach zu langsam :cry: Und dann ist der Code auch noch falsch :wall: :wall: :wall: :wall: :? Ich sollte ins Bett ... |
Re: Problem beim Fenster finden!
Delphi-Quellcode:
Damit findest du alle Fenster die mit dem Ressourceneditir von VC erstellt wurden, da sie standardmäßig die Fensterklasse #32770 bekommen.
wnd := FindWindow('#32770','');
|
Re: Problem beim Fenster finden!
Ok, das mit dem Fenster finden werde ich dank der Tips hier hinbekommen.
Nur wie mache ich es dann, dass er mir die Nachricht bei bereits geöffnetem Fenster in das Memo Feld schreibt? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz