![]() |
ICQ 6.5 Away Nachricht setzen
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: ![]() Nur leider klappt das nicht mit ICQ 6.5. Ich hoffe das ihr mir helfen könnt. |
Re: ICQ 6.5 Away Nachricht setzen
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. |
Re: ICQ 6.5 Away Nachricht setzen
Zitat:
|
Re: ICQ 6.5 Away Nachricht setzen
@lowF: Du hast ne PN.
|
Re: ICQ 6.5 Away Nachricht setzen
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 Statusmanager' then 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); |
Re: ICQ 6.5 Away Nachricht setzen
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:
Delphi-Quellcode:
Und folgende Funktion (nicht von mir!)
EnumWindowUtil,MSHTML,ActiveX,OleCtrls, SHDocVw;
Delphi-Quellcode:
Und folgende Typdefinition:
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;
Delphi-Quellcode:
TObjectFromLResult = function(LRESULT: lResult; const IID: TIID; WPARAM: wParam; out pObject): HRESULT; stdcall;
Delphi-Quellcode:
So sollte es funktionieren.
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 Statusmanager' then 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; |
Re: ICQ 6.5 Away Nachricht setzen
Ich bekomm leider ne Zugriffsverletzung bei:
Delphi-Quellcode:
(Document.documentElement.document AS IHTMLDocument2).body.innerHTML := MSG;
|
Re: ICQ 6.5 Away Nachricht setzen
Kannst du überprüfen, ob
Delphi-Quellcode:
funktioniert hat, bzw. Document danach <> nil ist?
GetHTMLFromHWnd(wlist.Handles[1],Document);
Sicher, dass nicht bei GetHTMLFromHwnd die AV ist? |
Re: ICQ 6.5 Away Nachricht setzen
jetzt hab ich 'Listenindex überschreitet das Maximum(1)' Meldung
|
Re: ICQ 6.5 Away Nachricht setzen
Hast du die Deutsche Version von ICQ 6.5 - und sie läuft auch gerade? Und du bist eingeloggt?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 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