AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi ICQ 6.5 Away Nachricht setzen
Thema durchsuchen
Ansicht
Themen-Optionen

ICQ 6.5 Away Nachricht setzen

Ein Thema von Muellermilchtrinker · begonnen am 4. Aug 2009 · letzter Beitrag vom 26. Sep 2009
 
lowF

Registriert seit: 18. Dez 2008
37 Beiträge
 
#6

Re: ICQ 6.5 Away Nachricht setzen

  Alt 13. Sep 2009, 17:12
Ich nehm mir mal die Zeit, das etzwas zu verschönern und kommentieren

Was man braucht ist die EnumWindowUtil.pas (Meines Wissens hier im Forum irgentwo erhältich).


Folgende Header braucht man also noch:
EnumWindowUtil,MSHTML,ActiveX,OleCtrls, SHDocVw; Und folgende Funktion (nicht von mir!)
Delphi-Quellcode:
function GetHTMLFromHWND(WHandle: HWND; var html: IHTMLDocument3): HRESULT;
var
  hInst: HWND;
  lRes: Cardinal;
  MSG: Integer;
  ObjectFromLresult: TObjectFromLresult;
begin
  hInst := LoadLibrary('Oleacc.dll');
  @ObjectFromLresult := GetProcAddress(hInst, 'ObjectFromLresult');
  if @ObjectFromLresult <> nil then
  begin
    try
      MSG := RegisterWindowMessage('WM_HTML_GETOBJECT');
      SendMessageTimeOut(WHandle, MSG, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
      Result := ObjectFromLresult(lRes, IHTMLDocument3, 0, html);
    finally
      FreeLibrary(hInst);
    end;
  end;
end;
Und folgende Typdefinition:
 TObjectFromLResult = function(LRESULT: lResult; const IID: TIID; WPARAM: wParam; out pObject): HRESULT; stdcall;
Delphi-Quellcode:
const WAITTIME = 200;
const MSG = 'HI';
var wlist : TWindowList;
    i : integer;
    ICQ : hwnd;
    ICQ2 : hwnd;
    LongParam : integer;
    lPoint : TPoint;
    lStart : cardinal;
    Document: IHTMLDocument3;
    ele: IHTMLElement;
begin
  //Window List erstellen
  wlist := TWindowList.Create;
  //Auch unsichtbare Fenster anzeigen
  wlist.ShowUnvisibleWindows := true;
  //Alle Fenster auflisten
  wlist.EnumTopLevelWindows;

  //Nach dem ICQ Fenster gucken
  for i := 0 to wlist.Count-1 do
    if wlist[i] =('ICQ') then
      ICQ := Wlist.Handles[i];


  //Punkt, auf dem man den Maustrigger machen muss, um
  //das Away-Fenster zu erhalten
  lPoint.X := 80;
  lPoint.Y := 80;

  //Punkt für Windows konvertieren
  LongParam := lPoint.X + lPoint.Y shl 16;

  //Mouse klick
  PostMessage(ICQ, WM_LBUTTONDOWN, MK_LButton,LongParam);
  PostMessage(ICQ, WM_LBUTTONUP, MK_LButton, LongParam);


  //Gewisse Zeit waren, damit das Away Fenster auch aktiv ist!
  lStart := gettickcount;
  repeat
    Application.ProcessMessages;
  until
    GetTickCount - lStart > WAITTIME;

  //Erneut alle Fenster auflisten
  wlist.EnumTopLevelWindows;

  //Nach dem Away Fesnter suchen
  for i := 0 to wlist.Count-1 do
    if wlist[i] = 'Persönlicher Statusmanagerthen
      ICQ2 := wlist.Handles[i];

  //Alle Child Fenster vom Away Fenster aufzählen
  wlist.EnumChildWindows(icq2);


  //Focus setzen per Mouseclick!
  lPoint.X := 285;
  lPoint.Y := 200;
  LongParam := lPoint.X + lPoint.Y shl 16;
  PostMessage(ICQ2, WM_LBUTTONDOWN, MK_LButton,LongParam);
  PostMessage(ICQ2, WM_LBUTTONUP, MK_LButton, LongParam);



  //Apply text
  //HTML Document holen, in dem die Away msg steht
  GetHTMLFromHWnd(wlist.Handles[1],Document);

  //Text setzen
  try
  (Document.documentElement.document AS IHTMLDocument2).body.innerHTML := MSG;
  except
  //Hier Exception handler einfügen
  end;

  //WList zerstören, Fenster per Mouseclick schliessen.
  wlist.Destroy;

  lPoint.X := 285;
  lPoint.Y := 350;
  LongParam := lPoint.X + lPoint.Y shl 16;
  PostMessage(ICQ2, WM_LBUTTONDOWN, MK_LButton,LongParam);
  PostMessage(ICQ2, WM_LBUTTONUP, MK_LButton, LongParam);
end;
So sollte es funktionieren.
  Mit Zitat antworten Zitat
 


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 22:51 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