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
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Muellermilchtrinker
Muellermilchtrinker

Registriert seit: 1. Aug 2009
447 Beiträge
 
Delphi 2009 Professional
 
#1

ICQ 6.5 Away Nachricht setzen

  Alt 4. Aug 2009, 18:01
Ich hab da mal ne Frage. Wie kann man in ICQ 6.5 die Away Nachricht über Delphi ändern?
Es gibt ja in der Code-Libary diesen Code:Code-Libary Eintrag
Nur leider klappt das nicht mit ICQ 6.5.
Ich hoffe das ihr mir helfen könnt.
  Mit Zitat antworten Zitat
lowF

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

Re: ICQ 6.5 Away Nachricht setzen

  Alt 17. Aug 2009, 10:34
Hi

Ich hab mal n Code geschrieben, welcher das über Windows API versucht, ziemlich unsauber, da das Awaymsg Fenster für ne Zehntel Sekunde sichtbar ist und man evt aus ner Vollbildanwendung tabbed.
Wenn das trotzdem was für deinen Geschmack ist, meld dich mal.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

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

Re: ICQ 6.5 Away Nachricht setzen

  Alt 17. Aug 2009, 10:37
Zitat von Muellermilchtrinker:
Nur leider klappt das nicht mit ICQ 6.5.
Ich hoffe das ihr mir helfen könnt.
Hast du überprüft, ob die Fenster gefunden werden (= Handles gültig sind)?
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Muellermilchtrinker
Muellermilchtrinker

Registriert seit: 1. Aug 2009
447 Beiträge
 
Delphi 2009 Professional
 
#4

Re: ICQ 6.5 Away Nachricht setzen

  Alt 18. Aug 2009, 10:15
@lowF: Du hast ne PN.
  Mit Zitat antworten Zitat
Benutzerbild von Muellermilchtrinker
Muellermilchtrinker

Registriert seit: 1. Aug 2009
447 Beiträge
 
Delphi 2009 Professional
 
#5

Re: ICQ 6.5 Away Nachricht setzen

  Alt 13. Sep 2009, 16:30
lowF hat mir gestern den Code zu kommen lassen und möchte den euch nicht enthalten.
Also hier ist der Code:
(Getestet hab ichs noch nicht)
Delphi-Quellcode:
var wlist : TWindowList;
    i : integer;
    ICQ : hwnd;
    ICQ2 : hwnd;
    LongParam : integer;
    lPoint : TPoint;
    App : hwnd;
    x : cardinal;
    Document: IHTMLDocument3;
    ele: IHTMLElement;

    MSG : string;
begin
  app := GetForegroundWindow;
  wlist := TWindowList.Create;
  wlist.ShowUnvisibleWindows := true;
  wlist.EnumTopLevelWindows;

  for i := 0 to wlist.Count-1 do
    if pos('Winamp',wlist[i]) > 0 then
      MSG := Copy(wlist[i],1,Pos('Winamp',wlist[i])-3);




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


  lPoint.X := 80;
  lPoint.Y := 80;
  LongParam := lPoint.X + lPoint.Y shl 16;

  PostMessage(ICQ, WM_LBUTTONDOWN, MK_LButton,LongParam);
  PostMessage(ICQ, WM_LBUTTONUP, MK_LButton, LongParam);

  x := gettickcount;
  repeat
    Application.ProcessMessages;
  until
    GetTickCount - x > strtoint(Edit1.Text);
  wlist.EnumTopLevelWindows;

  for i := 0 to wlist.Count-1 do
    if wlist[i] = 'Persönlicher Statusmanagerthen
      ICQ2 := wlist.Handles[i];

  //Message festlegen
  if length(song) > 0 then
    MSG := '[b]Now playing: [/b][i]'+song+'[/i]'
  else
    MSG := '[b]Nothing playing right now![/b]';


  wlist.EnumChildWindows(icq2);


  lPoint.X := 285;
  lPoint.Y := 200;
  LongParam := lPoint.X + lPoint.Y shl 16;
  //PostMessage(ICQ2,WM_SETFOCUS,0,0);
  PostMessage(ICQ2, WM_LBUTTONDOWN, MK_LButton,LongParam);
  PostMessage(ICQ2, WM_LBUTTONUP, MK_LButton, LongParam);

  //Apply text
  GetHTMLFromHWnd(wlist.Handles[1],Document);

  try
  (Document.documentElement.document AS IHTMLDocument2).body.innerHTML := MSG;
  except
    Edit1.Text := '200';
  end;

  wlist.Destroy;

  lPoint.X := 285;
  lPoint.Y := 350;
  LongParam := lPoint.X + lPoint.Y shl 16;
  //PostMessage(ICQ2,WM_SETFOCUS,0,0);
  PostMessage(ICQ2, WM_LBUTTONDOWN, MK_LButton,LongParam);
  PostMessage(ICQ2, WM_LBUTTONUP, MK_LButton, LongParam);


  //PostMessage(App,WM_SETFOCUS,0,0);
  Mit Zitat antworten Zitat
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
Benutzerbild von Muellermilchtrinker
Muellermilchtrinker

Registriert seit: 1. Aug 2009
447 Beiträge
 
Delphi 2009 Professional
 
#7

Re: ICQ 6.5 Away Nachricht setzen

  Alt 13. Sep 2009, 17:27
Ich bekomm leider ne Zugriffsverletzung bei:
  (Document.documentElement.document AS IHTMLDocument2).body.innerHTML := MSG;
  Mit Zitat antworten Zitat
lowF

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

Re: ICQ 6.5 Away Nachricht setzen

  Alt 13. Sep 2009, 19:02
Kannst du überprüfen, ob
GetHTMLFromHWnd(wlist.Handles[1],Document); funktioniert hat, bzw. Document danach <> nil ist?
Sicher, dass nicht bei GetHTMLFromHwnd die AV ist?
  Mit Zitat antworten Zitat
Benutzerbild von Muellermilchtrinker
Muellermilchtrinker

Registriert seit: 1. Aug 2009
447 Beiträge
 
Delphi 2009 Professional
 
#9

Re: ICQ 6.5 Away Nachricht setzen

  Alt 13. Sep 2009, 19:13
jetzt hab ich 'Listenindex überschreitet das Maximum(1)' Meldung
  Mit Zitat antworten Zitat
lowF

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

Re: ICQ 6.5 Away Nachricht setzen

  Alt 13. Sep 2009, 19:29
Hast du die Deutsche Version von ICQ 6.5 - und sie läuft auch gerade? Und du bist eingeloggt?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:20 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